[core] Update formatting with quotes for List and Group

If the joinChar is NOT space, we use global quotes.
If the joinChar is space, we use quotes per element.
This commit is contained in:
Fabien Castan 2024-02-02 15:16:58 +01:00
parent 092dcfe722
commit a35f1c72e2
2 changed files with 24 additions and 11 deletions

View file

@ -312,7 +312,7 @@ class Attribute(BaseObject):
return Template(self.value).safe_substitute(os.environ) return Template(self.value).safe_substitute(os.environ)
return self.value return self.value
def getValueStr(self): def getValueStr(self, withQuotes=True):
''' '''
Return the value formatted as a string with quotes to deal with spaces. Return the value formatted as a string with quotes to deal with spaces.
If it is a string, expressions will be evaluated. If it is a string, expressions will be evaluated.
@ -325,11 +325,11 @@ class Attribute(BaseObject):
# ensure value is a list as expected # ensure value is a list as expected
assert(isinstance(self.value, Sequence) and not isinstance(self.value, str)) assert(isinstance(self.value, Sequence) and not isinstance(self.value, str))
v = self.attributeDesc.joinChar.join(self.getEvalValue()) v = self.attributeDesc.joinChar.join(self.getEvalValue())
if v: if withQuotes and v:
return '"{}"'.format(v) return '"{}"'.format(v)
return v return v
# String, File, single value Choice are based on strings and should includes quotes to deal with spaces # String, File, single value Choice are based on strings and should includes quotes to deal with spaces
if isinstance(self.attributeDesc, (desc.StringParam, desc.File, desc.ChoiceParam)): if withQuotes and isinstance(self.attributeDesc, (desc.StringParam, desc.File, desc.ChoiceParam)):
return '"{}"'.format(self.getEvalValue()) return '"{}"'.format(self.getEvalValue())
return str(self.getEvalValue()) return str(self.getEvalValue())
@ -513,9 +513,15 @@ class ListAttribute(Attribute):
else: else:
return [attr.getPrimitiveValue(exportDefault=exportDefault) for attr in self._value if not attr.isDefault] return [attr.getPrimitiveValue(exportDefault=exportDefault) for attr in self._value if not attr.isDefault]
def getValueStr(self): def getValueStr(self, withQuotes=True):
assert(isinstance(self.value, ListModel)) assert(isinstance(self.value, ListModel))
return self.attributeDesc.joinChar.join([v.getValueStr() for v in self.value]) if self.attributeDesc.joinChar == ' ':
return self.attributeDesc.joinChar.join([v.getValueStr(withQuotes=True) for v in self.value])
else:
v = self.attributeDesc.joinChar.join([v.getValueStr(withQuotes=False) for v in self.value])
if v:
return '"{}"'.format(v)
return v
def updateInternals(self): def updateInternals(self):
super(ListAttribute, self).updateInternals() super(ListAttribute, self).updateInternals()
@ -631,7 +637,7 @@ class GroupAttribute(Attribute):
else: else:
return {name: attr.getPrimitiveValue(exportDefault=exportDefault) for name, attr in self._value.items() if not attr.isDefault} return {name: attr.getPrimitiveValue(exportDefault=exportDefault) for name, attr in self._value.items() if not attr.isDefault}
def getValueStr(self): def getValueStr(self, withQuotes=True):
# add brackets if requested # add brackets if requested
strBegin = '' strBegin = ''
strEnd = '' strEnd = ''
@ -642,9 +648,16 @@ class GroupAttribute(Attribute):
else: else:
raise AttributeError("Incorrect brackets on GroupAttribute: {}".format(self.attributeDesc.brackets)) raise AttributeError("Incorrect brackets on GroupAttribute: {}".format(self.attributeDesc.brackets))
# particular case when using space separator
spaceSep = self.attributeDesc.joinChar == ' '
# sort values based on child attributes group description order # sort values based on child attributes group description order
sortedSubValues = [self._value.get(attr.name).getValueStr() for attr in self.attributeDesc.groupDesc] sortedSubValues = [self._value.get(attr.name).getValueStr(withQuotes=spaceSep) for attr in self.attributeDesc.groupDesc]
return strBegin + self.attributeDesc.joinChar.join(sortedSubValues) + strEnd s = self.attributeDesc.joinChar.join(sortedSubValues)
if withQuotes and not spaceSep:
return '"{}{}{}"'.format(strBegin, s, strEnd)
return '{}{}{}'.format(strBegin, s, strEnd)
def updateInternals(self): def updateInternals(self):
super(GroupAttribute, self).updateInternals() super(GroupAttribute, self).updateInternals()

View file

@ -64,9 +64,9 @@ def test_formatting_groups():
n3 = graph.addNewNode('ImageProcessing') n3 = graph.addNewNode('ImageProcessing')
n3._buildCmdVars() # prepare vars for command line creation n3._buildCmdVars() # prepare vars for command line creation
name = 'sharpenFilter' name = 'sharpenFilter'
assert n3._cmdVars[name + 'Value'] == 'False:3:1.0:0.0' assert n3._cmdVars[name + 'Value'] == '"False:3:1.0:0.0"'
name = 'fillHoles' name = 'fillHoles'
assert n3._cmdVars[name + 'Value'] == 'False' # Booleans assert n3._cmdVars[name + 'Value'] == 'False' # Booleans
name = 'noiseFilter' name = 'noiseFilter'
assert n3._cmdVars[name + 'Value'] == 'False:"uniform":0.0:1.0:True' assert n3._cmdVars[name + 'Value'] == '"False:uniform:0.0:1.0:True"'