diff --git a/openflexure_microscope/microscope.py b/openflexure_microscope/microscope.py index 8c016101..487be8a8 100644 --- a/openflexure_microscope/microscope.py +++ b/openflexure_microscope/microscope.py @@ -8,7 +8,7 @@ import numpy as np from openflexure_stage import OpenFlexureStage from .camera.pi import StreamingCamera -from .plugins import PluginMount +from .plugins import PluginMount, load_plugin, search_plugin_paths class Microscope(object): @@ -39,7 +39,7 @@ class Microscope(object): """Shut down the microscope hardware.""" self.camera.close() self.stage.close() - + def attach(self, camera: StreamingCamera, stage: OpenFlexureStage): """ Retroactively attaches a camera and stage to the microscope object. @@ -61,6 +61,20 @@ class Microscope(object): logging.info("Attached stage {}".format(stage)) self.stage.backlash = np.zeros(3, dtype=np.int) + def find_plugins(self, plugin_paths=[], include_default=True): + """ + Automatically search for plugins, and attach to self. + + Args: + plugin_paths (list): List of strings of plugin directories. + include_default (bool): Also load plugins from the module default directory (DEFAULT_PLUGIN_PATH) + """ + plugins_list = search_plugin_paths(plugin_paths, include_default=include_default) + + for i in plugins_list: + module = load_plugin(i) + self.plugin.attach(module) + # Create unified state @property def state(self): diff --git a/openflexure_microscope/plugins/loader.py b/openflexure_microscope/plugins/loader.py index 63b8fd8c..7276c145 100644 --- a/openflexure_microscope/plugins/loader.py +++ b/openflexure_microscope/plugins/loader.py @@ -8,23 +8,23 @@ HERE = os.path.abspath(os.path.dirname(__file__)) DEFAULT_PLUGIN_PATH = os.path.join(HERE, 'default') -def search_plugin_dirs(plugin_dirs, include_default=True): +def search_plugin_dirs(plugin_paths, include_default=True): """ Search through, and load from, a list of plugin directories. Args: - plugin_dirs (list): List of strings of plugin directories. + plugin_paths (list): List of strings of plugin directories. include_default (bool): Also load plugins from the module default directory (DEFAULT_PLUGIN_PATH) """ global DEFAULT_PLUGIN_PATH if include_default: # If including default plugins - plugin_dirs.append(DEFAULT_PLUGIN_PATH) # Add default directory to the search paths + plugin_paths.append(DEFAULT_PLUGIN_PATH) # Add default directory to the search paths - logging.debug(plugin_dirs) + logging.debug(plugin_paths) plugins = [] # List of loaded plugins - for plugin_dir in plugin_dirs: # For each plugin directory + for plugin_dir in plugin_paths: # For each plugin directory logging.debug("Searching {}".format(plugin_dir)) plugins.extend(find_plugins(plugin_dir)) # Find plugin folders, and load into list diff --git a/tests/test_plugins.py b/tests/test_plugins.py index 469b3fa4..8f2d1d40 100644 --- a/tests/test_plugins.py +++ b/tests/test_plugins.py @@ -2,7 +2,7 @@ from openflexure_microscope.camera.pi import StreamingCamera from openflexure_stage import OpenFlexureStage from openflexure_microscope import Microscope -from openflexure_microscope.plugins import PluginMount, load_plugin, search_plugin_dirs +from openflexure_microscope.plugins import PluginMount, load_plugin, search_plugin_paths import atexit import logging, sys @@ -11,11 +11,7 @@ logging.basicConfig(stream=sys.stderr, level=logging.DEBUG) if __name__ == '__main__': microscope = Microscope(StreamingCamera(), OpenFlexureStage("/dev/ttyUSB0")) - plugins_list = search_plugin_dirs([], include_default=True) - - for i in plugins_list: - module = load_plugin(i) - microscope.plugin.attach(module) + microscope.find_plugins() # Automatically find microscope plugins # Check that default tets plugins have loaded print("RUNNING PLUGIN METHODS:")