def entities(self, recursive=True, path=False): """ Returns a list of all entities inside the Package If optional parameter recursive is set to True it will return all packages from this package and its subpackages. """ entities = [] if path is True: spath = '' elif path is not False: spath='%s/%s' % (path, self.id) if path else self.id else: spath = path if recursive: for pack in self._packages.values(): entities.extend(pack.entities(path=spath)) for i in self._structures: if isinstance(self._structures[i], Structure) or is_entitylist(self._structures[i]): elist = self._structures[i].entities() spath2 = '%s/%s' % (spath, i) if spath else i entities.extend([(e, spath2) for e in elist]) return entities
def entities(self, recursive=True, path=False): """ Returns a list of all entities inside the Package If optional parameter recursive is set to True it will return all packages from this package and its subpackages. """ entities = [] if path is True: spath = '' elif path is not False: spath = '%s/%s' % (path, self.id) if path else self.id else: spath = path if recursive: for pack in self._packages.values(): entities.extend(pack.entities(path=spath)) for i in self._structures: if isinstance(self._structures[i], Structure) or is_entitylist( self._structures[i]): elist = self._structures[i].entities() spath2 = '%s/%s' % (spath, i) if spath else i entities.extend([(e, spath2) for e in elist]) return entities
def write_object(cls, object, path, encoding=None): if isinstance(object, Structure): cls.write_structure(object, path, encoding=encoding) elif is_entitylist(object): cls.write_entitylist(object, path, encoding=encoding) elif isinstance(object, Blob): cls.write_blob(object, path) else: raise TypeError('Cannot write object of such type (%s)' % object.__class__.__name__)
def entitylist_diff2 (self, entitylist, flags=None, values=True): if flags == None: flags = ['added','removed','modified'] entitylistdiff = EntityListDiff(self.id, ordered=self.ordered) entitylistdiff.uri = (self.uri, entitylist.uri) if not is_entitylist(entitylist): entitylist = entitylist.entitylist() entities1 = self.keys() entities2 = entitylist.keys() isect = intersect(entities1, entities2) if 'removed' in flags: for item in difference(isect, entities1): entitylistdiff.add('removed', ediff=self[item], id=item) if 'added' in flags: for item in difference(isect, entities2): if isinstance(entitylist, OrderedDict): # if we keep order if entitylist.keys().index(item)>0: pos = ('after', entitylist.keys()[entitylist.keys().index(item)-1]) else: pos = 0 else: pos = None entitylistdiff.add('added', ediff=entitylist[item], id=item, pos=pos) if ('modified' in flags and values is True) or ('unmodified' in flags): for item in isect: if values is False: entitylistdiff.add('unmodified', ediff=self[item], id=item) else: entity = self[item] entity2 = entitylist[item] entitydiff = entity.diff(entity2) if len(entitydiff.keys()) == 0: if 'unmodified' in flags: entitylistdiff.add('unmodified', ediff=entity, id=item) else: if 'modified' in flags: entitylistdiff.add('modified', ediff=entitydiff, id=item) return entitylistdiff