Пример #1
0
    def __validateModules(self):
        self.__validatePrerequisites(self._STAGE_validateModules)
        for mr in self.__moduleRecords:
            ns = mr.namespace()
            for base_uid in mr.dependsOnExternal():
                xmr = ns.lookupModuleRecordByUID(base_uid)
                if xmr is None:
                    raise pyxb.NamespaceArchiveError(
                        'Module %s depends on external module %s, not available in archive path'
                        % (mr.generationUID(), base_uid))
                if not xmr.isIncorporated():
                    _log.info('Need to incorporate data from %s', xmr)
                else:
                    _log.info('Have required base data %s', xmr)

            for origin in mr.origins():
                for (cat, names) in six.iteritems(origin.categoryMembers()):
                    if not (cat in ns.categories()):
                        continue
                    cross_objects = names.intersection(
                        six.iterkeys(ns.categoryMap(cat)))
                    if 0 < len(cross_objects):
                        raise pyxb.NamespaceArchiveError(
                            'Archive %s namespace %s module %s origin %s archive/active conflict on category %s: %s'
                            % (self.__archivePath, ns, mr, origin, cat,
                               " ".join(cross_objects)))
                    _log.info('%s no conflicts on %d names', cat, len(names))
Пример #2
0
 def _readToStage(self, stage):
     if self.__stage is None:
         raise pyxb.NamespaceArchiveError(
             'Attempt to read from invalid archive %s' % (self, ))
     try:
         while self.__stage < stage:
             if self.__stage < self._STAGE_uid:
                 self.__unpickler = self.__createUnpickler()
                 self.__stage = self._STAGE_uid
                 continue
             if self.__stage < self._STAGE_readModules:
                 assert self.__unpickler is not None
                 self.__readModules(self.__unpickler)
                 self.__stage = self._STAGE_readModules
                 continue
             if self.__stage < self._STAGE_validateModules:
                 self.__validateModules()
                 self.__stage = self._STAGE_validateModules
                 continue
             if self.__stage < self._STAGE_readComponents:
                 assert self.__unpickler is not None
                 self.__stage = self._STAGE_readComponents
                 self.__readComponentSet(self.__unpickler)
                 self.__unpickler = None
                 continue
             raise pyxb.LogicError('Too many stages (at %s, want %s)' %
                                   (self.__stage, stage))
     except:
         self.__stage = None
         self.__unpickler = None
         raise
Пример #3
0
 def __readModules(self, unpickler):
     mrs = unpickler.load()
     assert isinstance(
         mrs, set), 'Expected set got %s from %s' % (type(mrs),
                                                     self.archivePath())
     if self.__moduleRecords is None:
         for mr in mrs.copy():
             mr2 = mr.namespace().lookupModuleRecordByUID(
                 mr.generationUID())
             if mr2 is not None:
                 mr2._setFromOther(mr, self)
                 mrs.remove(mr)
         self.__moduleRecords = set()
         assert 0 == len(self.__namespaces)
         for mr in mrs:
             mr._setArchive(self)
             ns = mr.namespace()
             ns.addModuleRecord(mr)
             self.__namespaces.add(ns)
             self.__moduleRecords.add(mr)
     else:
         # Verify the archive still has what was in it when we created this.
         for mr in mrs:
             mr2 = mr.namespace().lookupModuleRecordByUID(
                 mr.generationUID())
             if not (mr2 in self.__moduleRecords):
                 raise pyxb.NamespaceArchiveError(
                     'Lost module record %s %s from %s' %
                     (mr.namespace(), mr.generationUID(),
                      self.archivePath()))
Пример #4
0
 def __validatePrerequisites (self, stage):
     from pyxb.namespace import builtin
     prereq_uids = self._unsatisfiedModulePrerequisites()
     for uid in prereq_uids:
         if builtin.BuiltInObjectUID == uid:
             continue
         depends_on = self.__NamespaceArchives.get(uid)
         if depends_on is None:
             raise pyxb.NamespaceArchiveError('%s: archive depends on unavailable archive %s' % (self.archivePath(), uid))
         depends_on._readToStage(stage)
Пример #5
0
    def __createUnpickler (self):
        unpickler = pickle.Unpickler(open(self.__archivePath, 'rb'))

        fmt = unpickler.load()
        if self.__PickleFormat != fmt:
            raise pyxb.NamespaceArchiveError('Archive format is %s, require %s' % (fmt, self.__PickleFormat))

        self.__generationUID = unpickler.load()

        return unpickler
Пример #6
0
 def __validatePrerequisites(self, stage):
     import builtin
     prereq_uids = self._unsatisfiedModulePrerequisites()
     #print '%s depends on %d prerequisites' % (self, len(prereq_uids))
     for uid in prereq_uids:
         if builtin.BuiltInObjectUID == uid:
             continue
         depends_on = self.__NamespaceArchives.get(uid)
         if depends_on is None:
             raise pyxb.NamespaceArchiveError(
                 '%s: archive depends on unavailable archive %s' %
                 (self.archivePath(), uid))
         #print '%s stage %s depends on %s at %s going to %s' % (self, self._stage(), depends_on, depends_on._stage(), stage)
         depends_on._readToStage(stage)
Пример #7
0
 def add(self, namespace):
     """Add the given namespace to the set that is to be stored in this archive."""
     if namespace.isAbsentNamespace():
         raise pyxb.NamespaceArchiveError('Cannot archive absent namespace')
     self.__namespaces.add(namespace)