27 """A generic assembler for butler composite datasets, that can be used when the component names match the 28 argument names in the __init__ signature, or the setter name for component objects is specified or can be 29 inferred by component name. 31 When determining setter names: If the setter name is specified by the policy then the genericAssembler 32 will use that to set the component into the python object. If the policy does not specify setter names the 33 genericAssembler will see if the __init__ func input argument names match the policy argument names. If 34 that does not work, and the python object has setter names that match the component name of all the object 35 then the setter name can be inferred; it will first try 'set' + <componentName>, and if that does not 36 exist it will try 'set' + <componentName>.capitalize (e.g. for component name 'foo', it will try setfoo 37 and then setFoo.) If no setter can be found for a component object, it will raise a runtime error. 39 initArgs = {k: v.obj
for k, v
in componentInfo.items()}
47 for componentName, componentInfo
in componentInfo.items():
48 if componentInfo.setter
is not None:
49 setter = getattr(obj, componentInfo.setter)
50 elif hasattr(obj,
'set_' + componentName):
51 setter = getattr(obj,
'set_' + componentName)
52 elif hasattr(obj,
'set' + componentName.capitalize()):
53 setter = getattr(obj,
'set' + componentName.capitalize())
55 raise RuntimeError(
"No setter for datasetType:%s class:%s" %
56 (componentInfo.datasetType, cls))
57 setter(componentInfo.obj)
62 """A generic disassembler for butler composite datasets, that can be used when the getter name for 63 component objects is specified or can be inferred by component name. 65 When determining getter names: If the getter name is specified by the policy then the genericAssembler 66 will use that to get the component from the python object. If the policy does not specify getter names and 67 the python object has getter names that match the component name of all the object then the getter name 68 can be inferred; it will first try 'get' + <componentName>, and if that does not exist it will try 'get' + 69 <componentName>.capitalize (e.g. for component name 'foo', it will try getfoo and then getFoo.) If no 70 getter can be found for a component object, it will raise a runtime error. 72 for componentName, componentInfo
in componentInfo.items():
73 if componentInfo.getter
is not None:
74 getter = getattr(obj, componentInfo.getter)
75 elif hasattr(obj,
'get_' + componentName):
76 getter = getattr(obj,
'get_' + componentName)
77 elif hasattr(obj,
'get' + componentName.capitalize()):
78 getter = getattr(obj,
'get' + componentName.capitalize())
80 raise RuntimeError(
"No getter for componentName:%s" % componentName)
81 componentInfo.obj = getter()
def genericAssembler(dataId, componentInfo, cls)
def genericDisassembler(obj, dataId, componentInfo)