Пример #1
0
def initialize(validate=True):
    """
    Initialize the loader module by loading all type definitions and plugins.
    @param validate: if True, perform post-initialization validation
    @type validate: bool
    """

    global _MANAGER
    # pre-initialization validation
    assert not _is_initialized()

    _create_manager()
    # add plugins here in the form (path, base class, manager map)
    plugin_tuples =  ((_DISTRIBUTORS_DIR, Distributor, _MANAGER.distributors),
                      (_DISTRIBUTORS_DIR, GroupDistributor, _MANAGER.group_distributors),
                      (_IMPORTERS_DIR, GroupImporter, _MANAGER.group_importers),
                      (_IMPORTERS_DIR, Importer, _MANAGER.importers),
                      (_PROFILERS_DIR, Profiler, _MANAGER.profilers))
    for path, base_class, plugin_map in plugin_tuples:
        loading.load_plugins_from_path(path, base_class, plugin_map)

    plugin_entry_points = (
        (ENTRY_POINT_DISTRIBUTORS, _MANAGER.distributors),
        (ENTRY_POINT_GROUP_DISTRIBUTORS, _MANAGER.group_distributors),
        (ENTRY_POINT_IMPORTERS, _MANAGER.importers),
        (ENTRY_POINT_GROUP_IMPORTERS, _MANAGER.group_importers),
        (ENTRY_POINT_PROFILERS, _MANAGER.profilers),
    )
    for entry_point in plugin_entry_points:
        loading.load_plugins_from_entry_point(*entry_point)

    # post-initialization validation
    if not validate:
        return
    _validate_importers()
Пример #2
0
    def test_multiple_with_disabled(self):
        plugin_root = gen_plugin_root()
        distributors_root = gen_plugin(plugin_root, 'distributor',
                                       'MyDistributor', ['test_distribution'])
        importer_root_1 = gen_plugin(plugin_root, 'importer',
                                     'EnabledImporter', ['test_importer'])
        importer_root_2 = gen_plugin(plugin_root,
                                     'importer',
                                     'DisabledImporter', ['test_importer'],
                                     enabled=False)
        self.assertEqual(importer_root_1, importer_root_2)
        loading.load_plugins_from_path(distributors_root, Distributor,
                                       self.loader.distributors)
        loading.load_plugins_from_path(importer_root_1, Importer,
                                       self.loader.importers)

        distributor_cls = self.loader.distributors.get_plugin_by_id(
            'mydistributor')[0]
        self.assertTrue(issubclass(distributor_cls, Distributor))

        importer_cls = self.loader.importers.get_plugins_by_type(
            'test_importer')[0][0]
        self.assertEqual(importer_cls.__name__, 'EnabledImporter')

        self.assertRaises(exceptions.PluginNotFound,
                          self.loader.importers.get_plugin_by_id,
                          'disabledimporter')
Пример #3
0
    def test_multiple_with_disabled(self):
        plugin_root = gen_plugin_root()
        distributors_root = gen_plugin(plugin_root,
                                       'distributor',
                                       'MyDistributor',
                                       ['test_distribution'])
        importer_root_1 = gen_plugin(plugin_root,
                                     'importer',
                                     'EnabledImporter',
                                     ['test_importer'])
        importer_root_2 = gen_plugin(plugin_root,
                                     'importer',
                                     'DisabledImporter',
                                     ['test_importer'],
                                     enabled=False)
        self.assertEqual(importer_root_1, importer_root_2)
        loading.load_plugins_from_path(distributors_root, Distributor, self.loader.distributors)
        loading.load_plugins_from_path(importer_root_1, Importer, self.loader.importers)

        distributor_cls = self.loader.distributors.get_plugin_by_id('mydistributor')[0]
        self.assertTrue(issubclass(distributor_cls, Distributor))

        importer_cls = self.loader.importers.get_plugins_by_type('test_importer')[0][0]
        self.assertEqual(importer_cls.__name__, 'EnabledImporter')

        self.assertRaises(exceptions.PluginNotFound,
                          self.loader.importers.get_plugin_by_id,
                          'disabledimporter')
Пример #4
0
    def test_multiple_distributors(self):
        plugin_root = gen_plugin_root()
        distributors_root_1 = gen_plugin(plugin_root,
                                         'distributor',
                                         'FooDistributor',
                                         ['foo'])
        distributors_root_2 = gen_plugin(plugin_root,
                                         'distributor',
                                         'BarDistributor',
                                         ['bar'])
        distributors_root_3 = gen_plugin(plugin_root,
                                         'distributor',
                                         'BazDistributor',
                                         ['baz'])
        self.assertEqual(distributors_root_1,
                         distributors_root_2,
                         distributors_root_3)
        loading.load_plugins_from_path(distributors_root_1, Distributor, self.loader.distributors)

        cls_1 = self.loader.distributors.get_plugin_by_id('foodistributor')[0]
        self.assertTrue(issubclass(cls_1, Distributor))

        cls_2 = self.loader.distributors.get_plugins_by_type('bar')[0][0]
        self.assertTrue(issubclass(cls_2, Distributor))

        cls_3 = self.loader.distributors.get_plugin_by_id('bazdistributor')[0]
        self.assertTrue(issubclass(cls_3, Distributor))
Пример #5
0
 def test_single_importer_with_query(self):
     plugin_root = gen_plugin_root()
     types = ['test_type']
     importers_root = gen_plugin(plugin_root, 'importer', 'TestImporter',
                                 types)
     loading.load_plugins_from_path(importers_root, Importer,
                                    self.loader.importers)
     cls, cfg = self.loader.importers.get_plugins_by_type(types[0])[0]
     self.assertTrue(issubclass(cls, Importer))
Пример #6
0
 def test_single_importer_with_query(self):
     plugin_root = gen_plugin_root()
     types = ['test_type']
     importers_root = gen_plugin(plugin_root,
                                 'importer',
                                 'TestImporter',
                                 types)
     loading.load_plugins_from_path(importers_root, Importer, self.loader.importers)
     cls, cfg = self.loader.importers.get_plugins_by_type(types[0])[0]
     self.assertTrue(issubclass(cls, Importer))
Пример #7
0
    def test_multiple_importers_per_plugin(self):
        """
        Tests a single plugin that contains multiple importers.
        """

        # Setup
        plugin_root = gen_plugin_root()
        imp_root = gen_multi_plugin(plugin_root, 'importer', 'MultiImporter', ['foo'])

        # Test
        loading.load_plugins_from_path(imp_root, Importer, self.loader.importers)

        # Verify
        loaded = self.loader.importers.get_loaded_plugins()
        self.assertEqual(3, len(loaded))
Пример #8
0
    def test_multiple_importers_per_plugin(self):
        """
        Tests a single plugin that contains multiple importers.
        """

        # Setup
        plugin_root = gen_plugin_root()
        imp_root = gen_multi_plugin(plugin_root, 'importer', 'MultiImporter',
                                    ['foo'])

        # Test
        loading.load_plugins_from_path(imp_root, Importer,
                                       self.loader.importers)

        # Verify
        loaded = self.loader.importers.get_loaded_plugins()
        self.assertEqual(3, len(loaded))
Пример #9
0
 def test_single_distributor(self):
     plugin_root = gen_plugin_root()
     types = ['test_type']
     distributors_root = gen_plugin(plugin_root,
                                    'distributor',
                                    'TestDistributor',
                                    types)
     loading.load_plugins_from_path(distributors_root, Distributor, self.loader.distributors)
     try:
         cls, cfg = self.loader.distributors.get_plugin_by_id('testdistributor')
     except Exception, e:
         print 'plugin root: %s' % plugin_root
         print 'plugins: ',
         pprint(self.loader.distributors.plugins)
         print 'configs: ',
         pprint(self.loader.distributors.configs)
         print 'types: ',
         pprint(self.loader.distributors.types)
         self.fail('\n'.join((repr(e), traceback.format_exc())))
Пример #10
0
 def test_single_distributor(self):
     plugin_root = gen_plugin_root()
     types = ['test_type']
     distributors_root = gen_plugin(plugin_root, 'distributor',
                                    'TestDistributor', types)
     loading.load_plugins_from_path(distributors_root, Distributor,
                                    self.loader.distributors)
     try:
         cls, cfg = self.loader.distributors.get_plugin_by_id(
             'testdistributor')
     except Exception, e:
         print 'plugin root: %s' % plugin_root
         print 'plugins: ',
         pprint(self.loader.distributors.plugins)
         print 'configs: ',
         pprint(self.loader.distributors.configs)
         print 'types: ',
         pprint(self.loader.distributors.types)
         self.fail('\n'.join((repr(e), traceback.format_exc())))
Пример #11
0
    def test_multiple_distributors(self):
        plugin_root = gen_plugin_root()
        distributors_root_1 = gen_plugin(plugin_root, 'distributor',
                                         'FooDistributor', ['foo'])
        distributors_root_2 = gen_plugin(plugin_root, 'distributor',
                                         'BarDistributor', ['bar'])
        distributors_root_3 = gen_plugin(plugin_root, 'distributor',
                                         'BazDistributor', ['baz'])
        self.assertEqual(distributors_root_1, distributors_root_2,
                         distributors_root_3)
        loading.load_plugins_from_path(distributors_root_1, Distributor,
                                       self.loader.distributors)

        cls_1 = self.loader.distributors.get_plugin_by_id('foodistributor')[0]
        self.assertTrue(issubclass(cls_1, Distributor))

        cls_2 = self.loader.distributors.get_plugins_by_type('bar')[0][0]
        self.assertTrue(issubclass(cls_2, Distributor))

        cls_3 = self.loader.distributors.get_plugin_by_id('bazdistributor')[0]
        self.assertTrue(issubclass(cls_3, Distributor))
Пример #12
0
def initialize(validate=True):
    """
    Initialize the loader module by loading all type definitions and plugins.
    @param validate: if True, perform post-initialization validation
    @type validate: bool
    """

    global _MANAGER
    # pre-initialization validation
    assert not _is_initialized()

    _create_manager()
    # add plugins here in the form (path, base class, manager map)
    plugin_tuples = ((_DISTRIBUTORS_DIR, Distributor, _MANAGER.distributors),
                     (_DISTRIBUTORS_DIR, GroupDistributor,
                      _MANAGER.group_distributors),
                     (_IMPORTERS_DIR, GroupImporter, _MANAGER.group_importers),
                     (_IMPORTERS_DIR, Importer, _MANAGER.importers),
                     (_PROFILERS_DIR, Profiler, _MANAGER.profilers))
    for path, base_class, plugin_map in plugin_tuples:
        loading.load_plugins_from_path(path, base_class, plugin_map)

    plugin_entry_points = (
        (ENTRY_POINT_DISTRIBUTORS, _MANAGER.distributors),
        (ENTRY_POINT_GROUP_DISTRIBUTORS, _MANAGER.group_distributors),
        (ENTRY_POINT_IMPORTERS, _MANAGER.importers),
        (ENTRY_POINT_GROUP_IMPORTERS, _MANAGER.group_importers),
        (ENTRY_POINT_PROFILERS, _MANAGER.profilers),
    )
    for entry_point in plugin_entry_points:
        loading.load_plugins_from_entry_point(*entry_point)

    # post-initialization validation
    if not validate:
        return
    _validate_importers()