revert signature of Accessibles.copy() method

no more kwds arguments, method 'merge' should be used

Change-Id: I7028d9df8b69c018dcdc0c55d3ae0f71e24ee15b
This commit is contained in:
zolliker 2021-10-06 13:31:21 +02:00
parent 0d3df7be92
commit 70b9c88f82
2 changed files with 17 additions and 22 deletions

View File

@ -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

View File

@ -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