def _build_value(self, entries, deep=False): """ Constructs a DataObject from list of tree entries @param entries list of TreeEntry instances with values @param deep boolean flag, indicates whether subtree value should be loaded or kept as ValueRef @retval a DataObject """ if not entries: return dobj = DataObject() for entry in entries: valname = entry.entry['name'] value = entry.value if isinstance(value, TreeValue): if deep: tentries = yield self.vs.get_tree_entriesvalues(value) # @todo Should this maybe a container DataObject? vdo = self._build_value(tentries, deep) if vdo: dobj.set_attr(valname, vdo) else: # Put only a the tree value object in # @todo Check if this is OK in a DataObject dobj.set_attr(valname, value) elif isinstance(value, ValueObject): if type(value.value) is dict: # case where a DataObject was encoded vdo = DataObject.from_encoding(value.value) vdo.identity = value.identity else: # case where value is a simple value vdo = DataObject() vdo.identity = value.identity vdo.set_attr('value', value.value) if len(entries) == 1: defer.returnValue(vdo) return dobj.set_attr(valname, vdo) else: raise RuntimeError('Unknown value type in store: '+repr(value)) defer.returnValue(dobj)