[core] Add support for lambda function in Attribute desc value

Allows to dynamically configure the default value of the Attribute in python.
This commit is contained in:
Fabien Castan 2020-06-28 16:01:18 +02:00
parent 05a93c28a2
commit bbc56cfb31
2 changed files with 7 additions and 3 deletions

View file

@ -3,6 +3,7 @@
import collections import collections
import re import re
import weakref import weakref
import types
from meshroom.common import BaseObject, Property, Variant, Signal, ListModel, DictModel, Slot from meshroom.common import BaseObject, Property, Variant, Signal, ListModel, DictModel, Slot
from meshroom.core import desc, pyCompatibility, hashValue from meshroom.core import desc, pyCompatibility, hashValue
@ -189,7 +190,7 @@ class Attribute(BaseObject):
if self.isLink: if self.isLink:
return self.getLinkParam().asLinkExpr() return self.getLinkParam().asLinkExpr()
if self.isOutput: if self.isOutput:
return self.desc.value return self.defaultValue()
return self._value return self._value
def getValueStr(self): def getValueStr(self):
@ -201,6 +202,8 @@ class Attribute(BaseObject):
return str(self.value) return str(self.value)
def defaultValue(self): def defaultValue(self):
if isinstance(self.desc.value, types.FunctionType):
return self.desc.value(self)
return self.desc.value return self.desc.value
def _isDefault(self): def _isDefault(self):

View file

@ -583,8 +583,9 @@ class BaseNode(BaseObject):
if not isinstance(attr.attributeDesc, desc.File): if not isinstance(attr.attributeDesc, desc.File):
continue continue
attr.value = attr.attributeDesc.value.format(**self._cmdVars) defaultValue = attr.defaultValue()
attr._invalidationValue = attr.attributeDesc.value.format(**cmdVarsNoCache) attr.value = defaultValue.format(**self._cmdVars)
attr._invalidationValue = defaultValue.format(**cmdVarsNoCache)
v = attr.getValueStr() v = attr.getValueStr()
self._cmdVars[name] = '--{name} {value}'.format(name=name, value=v) self._cmdVars[name] = '--{name} {value}'.format(name=name, value=v)