def test_get_plugin(self): """ get plugin """ simple_plugin = SimplePlugin() plugin_manager = PluginManager(plugins=[simple_plugin]) # Get the plugin. plugin = plugin_manager.get_plugin(simple_plugin.id) self.assertEqual(plugin, simple_plugin) # Try to get a non-existent plugin. self.assertEqual(None, plugin_manager.get_plugin("bogus"))
def test_get_plugin(self): """ get plugin """ simple_plugin = SimplePlugin() plugin_manager = PluginManager(plugins=[simple_plugin]) # Get the plugin. plugin = plugin_manager.get_plugin(simple_plugin.id) self.assertEqual(plugin, simple_plugin) # Try to get a non-existent plugin. self.assertEqual(None, plugin_manager.get_plugin("bogus")) return
def test_start_and_stop_errors(self): """ start and stop errors """ simple_plugin = SimplePlugin() bad_plugin = BadPlugin() plugin_manager = PluginManager(plugins=[simple_plugin, bad_plugin]) # Start the plugin manager. This starts all of the plugin manager's # plugins. self.failUnlessRaises(ZeroDivisionError, plugin_manager.start) # Stop the plugin manager. This stops all of the plugin manager's # plugins. self.failUnlessRaises(ZeroDivisionError, plugin_manager.stop) # Try to start a non-existent plugin. self.failUnlessRaises(SystemError, plugin_manager.start_plugin, plugin_id='bogus') # Try to stop a non-existent plugin. self.failUnlessRaises(SystemError, plugin_manager.stop_plugin, plugin_id='bogus') return
def test_start_and_stop(self): """ start and stop """ simple_plugin = SimplePlugin() plugin_manager = PluginManager(plugins=[simple_plugin]) # Start the plugin manager. This starts all of the plugin manager's # plugins. plugin_manager.start() # Make sure the plugin was started. self.assertEqual(True, simple_plugin.started) # Stop the plugin manager. This stops all of the plugin manager's # plugins. plugin_manager.stop() # Make sure the plugin was stopped. self.assertEqual(True, simple_plugin.stopped) return
def test_iteration_over_plugins(self): """ iteration over plugins """ simple_plugin = SimplePlugin() bad_plugin = BadPlugin() plugin_manager = PluginManager(plugins=[simple_plugin, bad_plugin]) # Iterate over the plugin manager's plugins. plugins = [] for plugin in plugin_manager: plugins.append(plugin) self.assertEqual([simple_plugin, bad_plugin], plugins)
def test_start_and_stop_errors(self): """ start and stop errors """ simple_plugin = SimplePlugin() bad_plugin = BadPlugin() plugin_manager = PluginManager(plugins=[simple_plugin, bad_plugin]) # Start the plugin manager. This starts all of the plugin manager's # plugins. with self.assertRaises(ZeroDivisionError): plugin_manager.start() # Stop the plugin manager. This stops all of the plugin manager's # plugins. with self.assertRaises(ZeroDivisionError): plugin_manager.stop() # Try to start a non-existent plugin. with self.assertRaises(SystemError): plugin_manager.start_plugin(plugin_id="bogus") # Try to stop a non-existent plugin. with self.assertRaises(SystemError): plugin_manager.stop_plugin(plugin_id="bogus")
def test_set_plugin_manager_at_contruction_time(self): """ set plugin manager at construction time""" a = PluginA() b = PluginB() c = PluginC() # Start off with just two of the plugins. application = TestApplication(plugin_manager=PluginManager( plugins=[a, b, c])) application.start() # Make sure we can get the plugins. self.assertEqual(a, application.get_plugin("A")) self.assertEqual(b, application.get_plugin("B")) self.assertEqual(c, application.get_plugin("C")) # Make sure we can't get one that isn't there ;^) self.assertEqual(None, application.get_plugin("BOGUS"))
def test_ignore_plugins_matching_a_wildcard_in_the_exclude_list(self): # Note that the items in the list use the 'fnmatch' syntax for matching # plugins Ids. exclude = ['b*'] plugin_manager = PluginManager(exclude=exclude, plugins=[ SimplePlugin(id='foo'), SimplePlugin(id='bar'), SimplePlugin(id='baz') ]) # The Ids of the plugins that we expect the plugin manager to find. expected = ['foo'] # Make sure the plugin manager found only the required plugins and that # it starts and stops them correctly.. self._test_start_and_stop(plugin_manager, expected)
def test_ignore_plugins_whose_ids_are_in_the_exclude_list(self): # Note that the items in the list use the 'fnmatch' syntax for matching # plugins Ids. exclude = ["foo", "baz"] plugin_manager = PluginManager( exclude=exclude, plugins=[ SimplePlugin(id="foo"), SimplePlugin(id="bar"), SimplePlugin(id="baz"), ], ) # The Ids of the plugins that we expect the plugin manager to find. expected = ["bar"] # Make sure the plugin manager found only the required plugins and that # it starts and stops them correctly.. self._test_start_and_stop(plugin_manager, expected)
def test_only_include_plugins_whose_ids_are_in_the_include_list(self): # Note that the items in the list use the 'fnmatch' syntax for matching # plugins Ids. include = ['foo', 'bar'] plugin_manager = PluginManager(include=include, plugins=[ SimplePlugin(id='foo'), SimplePlugin(id='bar'), SimplePlugin(id='baz') ]) # The Ids of the plugins that we expect the plugin manager to find. expected = ['foo', 'bar'] # Make sure the plugin manager found only the required plugins and that # it starts and stops them correctly.. self._test_start_and_stop(plugin_manager, expected) return
def test_start_and_stop(self): """ start and stop """ simple_plugin = SimplePlugin() plugin_manager = PluginManager(plugins=[simple_plugin]) # Start the plugin manager. This starts all of the plugin manager's # plugins. plugin_manager.start() # Make sure the plugin was started. self.assertEqual(True, simple_plugin.started) # Stop the plugin manager. This stops all of the plugin manager's # plugins. plugin_manager.stop() # Make sure the plugin was stopped. self.assertEqual(True, simple_plugin.stopped)
def run(plugins=[], use_eggs=True, egg_path=[], image_path=[], template_path=[], startup_task="", application_name="Omnivore", debug_log=False, document_class=None): """Start the application :param plugins: list of user plugins :param use_eggs Boolean: search for setuptools plugins and plugins in local eggs? :param egg_path: list of user-specified paths to search for more plugins :param startup_task string: task factory identifier for task shown in initial window :param application_name string: change application name instead of default Omnivore """ EnthoughtWxApp.mac_menubar_app_name = application_name _app = EnthoughtWxApp(redirect=False) if False: # enable this to use FilterEvent _app.FilterEvent = _app.FilterEventMouseWheel # Enthought library imports. from envisage.api import PluginManager from envisage.core_plugin import CorePlugin # Local imports. from omnivore.framework.application import FrameworkApplication from omnivore.framework.plugin import OmnivoreTasksPlugin, OmnivoreMainPlugin from omnivore.file_type.plugin import FileTypePlugin from omnivore import get_image_path from omnivore.utils.jobs import get_global_job_manager # Include standard plugins core_plugins = [ CorePlugin(), OmnivoreTasksPlugin(), OmnivoreMainPlugin(), FileTypePlugin() ] if sys.platform == "darwin": from omnivore.framework.osx_plugin import OSXMenuBarPlugin core_plugins.append(OSXMenuBarPlugin()) import omnivore.file_type.recognizers core_plugins.extend(omnivore.file_type.recognizers.plugins) import omnivore.plugins core_plugins.extend(omnivore.plugins.plugins) # Add the user's plugins core_plugins.extend(plugins) # Check basic command line args default_parser = argparse.ArgumentParser(description="Default Parser") default_parser.add_argument("--no-eggs", dest="use_eggs", action="store_false", default=True, help="Do not load plugins from python eggs") options, extra_args = default_parser.parse_known_args() # The default is to use the specified plugins as well as any found # through setuptools and any local eggs (if an egg_path is specified). # Egg/setuptool plugin searching is turned off by the use_eggs parameter. default = PluginManager( plugins = core_plugins, ) if use_eggs and options.use_eggs: from pkg_resources import Environment, working_set from envisage.api import EggPluginManager from envisage.composite_plugin_manager import CompositePluginManager # Find all additional eggs and add them to the working set environment = Environment(egg_path) distributions, errors = working_set.find_plugins(environment) if len(errors) > 0: raise SystemError('cannot add eggs %s' % errors) logger = logging.getLogger() logger.debug('added eggs %s' % distributions) map(working_set.add, distributions) # The plugin manager specifies which eggs to include and ignores all others egg = EggPluginManager( include = [ 'omnivore.tasks', ] ) plugin_manager = CompositePluginManager( plugin_managers=[default, egg] ) else: plugin_manager = default # Add omnivore icons after all image paths to allow user icon themes to take # precidence from pyface.resource_manager import resource_manager import os image_paths = image_path[:] image_paths.append(get_image_path("icons")) image_paths.append(get_image_path("../omnivore8bit/icons")) resource_manager.extra_paths.extend(image_paths) from omnivore.templates import template_subdirs template_subdirs.extend(template_path) kwargs = {} if startup_task: kwargs['startup_task'] = startup_task if application_name: kwargs['name'] = application_name if document_class: kwargs['document_class'] = document_class # Create a debugging log if debug_log: filename = app.get_log_file_name("debug") handler = logging.FileHandler(filename) logger = logging.getLogger('') logger.addHandler(handler) logger.setLevel(logging.DEBUG) # Turn off omnivore log debug messages by default log = logging.getLogger("omnivore") log.setLevel(logging.INFO) # check for logging stuff again to pick up any new loggers loaded since # startup import omnivore.utils.wx.error_logger as error_logger if "-d" in extra_args: i = extra_args.index("-d") error_logger.enable_loggers(extra_args[i+1]) app = FrameworkApplication(plugin_manager=plugin_manager, command_line_args=extra_args, **kwargs) app.run() job_manager = get_global_job_manager() if job_manager is not None: job_manager.shutdown()