Source code for rawdisk.plugins.manager

# -*- coding: utf-8 -*-


import os
import rawdisk
from yapsy.PluginManager import PluginManagerSingleton
from yapsy.VersionedPluginManager import VersionedPluginManager
from rawdisk.plugins.categories import IFilesystemPlugin
from xdg.BaseDirectory import xdg_data_dirs

APP_NAME = "rawdisk"


[docs]class Manager(object): """This class is responsible for loading filesystem plugins. See Also: http://yapsy.sourceforge.net """ def __init__(self): self.fs_plugins = [] self.search_path = []
[docs] def load_plugins(self): self._initialize_search_path() self._load_filesystem_plugins() self._register_filesystem_plugins()
def _initialize_search_path(self): self.search_path = [os.path.join( os.path.dirname(rawdisk.__file__), "plugins/filesystems"), ] [self.search_path.append( os.path.join(path, APP_NAME, "plugins/filesystems") ) for path in xdg_data_dirs] def _register_filesystem_plugins(self): for pluginInfo in self.fs_plugins: pluginInfo.plugin_object.register() def _load_filesystem_plugins(self): # import logging # logging.basicConfig(level=logging.DEBUG) """Looks for *.yapsy-plugin files and loads them. It calls 'register' \ method for each plugin, which in turn registers with \ :class:`FilesystemDetector \ <rawdisk.filesystems.detector.FilesystemDetector>`. Note: Plugin search locations: * $(rawdisk package location)/plugins/filesystems * $(home dir)/.local/share/rawdisk/plugins/filesystems * /usr/local/share/rawdisk/plugins/filesystems * /usr/share/rawdisk/plugins/filesystems """ PluginManagerSingleton.setBehaviour([ VersionedPluginManager, ]) # Load the plugins from the plugin directory. self.manager = PluginManagerSingleton.get() self.manager.setPluginPlaces(self.search_path) self.manager.setCategoriesFilter({ "Filesystem": IFilesystemPlugin, }) # Load plugins self.manager.collectPlugins() for pluginInfo in self.manager.getPluginsOfCategory("Filesystem"): self.fs_plugins.append(pluginInfo)