Пример #1
0
 def register_plugins(cls):
     cls._plugins = {}
     # make sure modules are loaded
     import_feature_plugins()
     # register plugins, find all leaf implementation classes derived from this class
     subclasses = set()
     work = [cls]
     while work:
         parent = work.pop()
         if not parent.__subclasses__():
             subclasses.add(parent)
             continue
         for child in parent.__subclasses__():
             if child not in subclasses:
                 work.append(child)
     # register all plugins,
     # if there is any exception, continue to register all other plugins,
     # finally throw one single exception to the caller
     exceptions = []
     for scls in subclasses or []:
         try:
             feature_name = scls.feature_name()
             if feature_name in cls._plugins:
                 exceptions.append("Duplicate plugin found for feature %s" %
                                   feature_name)
             else:
                 cls._plugins[feature_name] = scls
         except Exception as e:
             exceptions.append(str(e))
     if exceptions:
         raise PluginRegistrationFailed(exceptions)
Пример #2
0
 def register_plugins(cls):
     cls._plugins = {}
     # make sure modules are loaded
     import_feature_plugins()
     # register plugins, find all leaf implementation classes derived from this class
     subclasses = set()
     work = [cls]
     while work:
         parent = work.pop()
         if not parent.__subclasses__():
             subclasses.add(parent)
             continue
         for child in parent.__subclasses__():
             if child not in subclasses:
                 work.append(child)
     # register all plugins,
     # if there is any exception, continue to register all other plugins,
     # finally throw one single exception to the caller
     exceptions = []
     for scls in subclasses or []:
         try:
             feature_name = scls.feature_name()
             if feature_name in cls._plugins:
                 exceptions.append("Duplicate plugin found for feature %s" % feature_name)
             else:
                 cls._plugins[feature_name] = scls
         except Exception as e:
             exceptions.append(str(e))
     if exceptions:
         raise PluginRegistrationFailed(exceptions)