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()
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')
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')
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))
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))
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))
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())))
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())))