Beispiel #1
0
 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
Beispiel #2
0
    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
Beispiel #3
0
 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__)
Beispiel #4
0
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