revert signature of Accessibles.copy() method
no more kwds arguments, method 'merge' should be used Change-Id: I7028d9df8b69c018dcdc0c55d3ae0f71e24ee15b
This commit is contained in:
parent
0d3df7be92
commit
70b9c88f82
@ -56,6 +56,7 @@ class HasAccessibles(HasProperties):
|
|||||||
accessibles = OrderedDict() # dict of accessibles
|
accessibles = OrderedDict() # dict of accessibles
|
||||||
merged_properties = {} # dict of dict of merged properties
|
merged_properties = {} # dict of dict of merged properties
|
||||||
new_names = [] # list of names of new accessibles
|
new_names = [] # list of names of new accessibles
|
||||||
|
override_values = {} # bare values overriding a parameter and methods overriding a command
|
||||||
for base in reversed(cls.__mro__):
|
for base in reversed(cls.__mro__):
|
||||||
for key, value in base.__dict__.items():
|
for key, value in base.__dict__.items():
|
||||||
if isinstance(value, Accessible):
|
if isinstance(value, Accessible):
|
||||||
@ -63,16 +64,19 @@ class HasAccessibles(HasProperties):
|
|||||||
if base == cls and key not in accessibles:
|
if base == cls and key not in accessibles:
|
||||||
new_names.append(key)
|
new_names.append(key)
|
||||||
accessibles[key] = value
|
accessibles[key] = value
|
||||||
|
override_values.pop(key, None)
|
||||||
elif key in accessibles:
|
elif key in accessibles:
|
||||||
# either a bare value overriding a parameter
|
# either a bare value overriding a parameter
|
||||||
# or a method overriding a command
|
# or a method overriding a command
|
||||||
aobj = aobj.copy()
|
override_values[key] = value
|
||||||
aobj.override(value)
|
|
||||||
accessibles[key] = aobj
|
|
||||||
for aname, aobj in accessibles.items():
|
for aname, aobj in accessibles.items():
|
||||||
if aobj != getattr(cls, aname, None):
|
if aname in override_values:
|
||||||
aobj = aobj.copy()
|
aobj = aobj.copy()
|
||||||
|
aobj.merge(merged_properties[aname])
|
||||||
|
aobj.override(override_values[aname])
|
||||||
|
# replace the bare value by the created accessible
|
||||||
setattr(cls, aname, aobj)
|
setattr(cls, aname, aobj)
|
||||||
|
else:
|
||||||
aobj.merge(merged_properties[aname])
|
aobj.merge(merged_properties[aname])
|
||||||
accessibles[aname] = aobj
|
accessibles[aname] = aobj
|
||||||
# rebuild order: (1) inherited items, (2) items from paramOrder, (3) new accessibles
|
# rebuild order: (1) inherited items, (2) items from paramOrder, (3) new accessibles
|
||||||
|
@ -60,11 +60,8 @@ class Accessible(HasProperties):
|
|||||||
"""override with a bare value"""
|
"""override with a bare value"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def copy(self, **kwds):
|
def copy(self):
|
||||||
"""return a (deep) copy of ourselfs
|
"""return a (deep) copy of ourselfs"""
|
||||||
|
|
||||||
:param kwds: override given properties
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def updateProperties(self, merged_properties):
|
def updateProperties(self, merged_properties):
|
||||||
@ -223,15 +220,11 @@ class Parameter(Accessible):
|
|||||||
else:
|
else:
|
||||||
raise ProgrammingError('can not use %r as name of a Parameter' % self.name)
|
raise ProgrammingError('can not use %r as name of a Parameter' % self.name)
|
||||||
|
|
||||||
def copy(self, **kwds):
|
def copy(self):
|
||||||
"""return a (deep) copy of ourselfs
|
"""return a (deep) copy of ourselfs"""
|
||||||
|
|
||||||
:param kwds: override given properties
|
|
||||||
"""
|
|
||||||
res = type(self)()
|
res = type(self)()
|
||||||
res.name = self.name
|
res.name = self.name
|
||||||
res.init(self.propertyValues)
|
res.init(self.propertyValues)
|
||||||
res.init(kwds)
|
|
||||||
if 'datatype' in self.propertyValues:
|
if 'datatype' in self.propertyValues:
|
||||||
res.datatype = res.datatype.copy()
|
res.datatype = res.datatype.copy()
|
||||||
return res
|
return res
|
||||||
@ -407,16 +400,12 @@ class Command(Accessible):
|
|||||||
self.func = func
|
self.func = func
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def copy(self, **kwds):
|
def copy(self):
|
||||||
"""return a (deep) copy of ourselfs
|
"""return a (deep) copy of ourselfs"""
|
||||||
|
|
||||||
:param kwds: override given properties
|
|
||||||
"""
|
|
||||||
res = type(self)()
|
res = type(self)()
|
||||||
res.name = self.name
|
res.name = self.name
|
||||||
res.func = self.func
|
res.func = self.func
|
||||||
res.init(self.propertyValues)
|
res.init(self.propertyValues)
|
||||||
res.init(kwds)
|
|
||||||
if res.argument:
|
if res.argument:
|
||||||
res.argument = res.argument.copy()
|
res.argument = res.argument.copy()
|
||||||
if res.result:
|
if res.result:
|
||||||
@ -435,6 +424,8 @@ class Command(Accessible):
|
|||||||
if not callable(value):
|
if not callable(value):
|
||||||
raise ProgrammingError('%s = %r is overriding a Command' % (self.name, value))
|
raise ProgrammingError('%s = %r is overriding a Command' % (self.name, value))
|
||||||
self.func = value
|
self.func = value
|
||||||
|
if value.__doc__:
|
||||||
|
self.description = inspect.cleandoc(value.__doc__)
|
||||||
|
|
||||||
def merge(self, merged_properties):
|
def merge(self, merged_properties):
|
||||||
"""merge with inherited properties
|
"""merge with inherited properties
|
||||||
|
Loading…
x
Reference in New Issue
Block a user