def test_unimportable_package(self):
     self._create_pkg("_foobar").close()
     s = ModuleScanner([self.d])
     self.failIf(s.modules)
     removed, added = s.rescan()
     self.failIf(added)
     self.failIf(removed)
 def test_scanner_error(self):
     h = self._create_mod("q4.py")
     h.write(b"1syntaxerror\n")
     h.close()
     s = ModuleScanner([self.d])
     removed, added = s.rescan()
     self.failIf(added)
     self.failIf(removed)
     self.failUnlessEqual(len(s.failures), 1)
     self.failUnless("q4" in s.failures)
 def test_scanner_add(self):
     self._create_mod("q1.py").close()
     self._create_mod("q2.py").close()
     s = ModuleScanner([self.d])
     self.failIf(s.modules)
     removed, added = s.rescan()
     self.failIf(removed)
     self.failUnlessEqual(set(added), {"q1", "q2"})
     self.failUnlessEqual(len(s.modules), 2)
     self.failUnlessEqual(len(s.failures), 0)
 def test_scanner_add_package(self):
     h = self._create_pkg("somepkg")
     h2 = self._create_mod("sub.py", "somepkg")
     h2.write(b"test=123\n")
     h2.close()
     h.write(b"from .sub import *\nmain=321\n")
     h.close()
     s = ModuleScanner([self.d])
     removed, added = s.rescan()
     self.failUnlessEqual(added, ["somepkg"])
     self.failUnlessEqual(s.modules["somepkg"].module.main, 321)
     self.failUnlessEqual(s.modules["somepkg"].module.test, 123)
 def test_scanner_remove(self):
     h = self._create_mod("q3.py")
     h.close()
     s = ModuleScanner([self.d])
     s.rescan()
     os.remove(h.name)
     try:
         os.remove(h.name + "c")
     except OSError:
         pass
     removed, added = s.rescan()
     self.failIf(added)
     self.failUnlessEqual(removed, ["q3"])
     self.failUnlessEqual(len(s.modules), 0)
     self.failUnlessEqual(len(s.failures), 0)
Example #6
0
    def __init__(self, folders=None):
        """folders is a list of paths that will be scanned for plugins.
        Plugins in later paths will be preferred if they share a name.
        """

        super(PluginManager, self).__init__()

        if folders is None:
            folders = []

        self.__scanner = ModuleScanner(folders)
        self.__modules = {}  # name: PluginModule
        self.__handlers = []  # handler list
        self.__enabled = set()  # (possibly) enabled plugin IDs

        self.__restore()
Example #7
0
import quodlibet
import sys
import os

# Nasty hack to allow importing of plugins...
PLUGIN_DIRS = []

root = os.path.join(quodlibet.__path__[0], "ext")
for entry in os.listdir(root):
    path = os.path.join(root, entry)
    if not os.path.isdir(path):
        continue
    PLUGIN_DIRS.append(path)

PLUGIN_DIRS.append(os.path.join(os.path.dirname(__file__), "test_plugins"))

ms = ModuleScanner(PLUGIN_DIRS)
ms.rescan()
plugins = {}
modules = {}
for name, module in ms.modules.iteritems():
    for plugin in list_plugins(module.module):
        plugins[plugin.PLUGIN_ID] = Plugin(plugin)
        modules[plugin.PLUGIN_ID] = module.module


class PluginTestCase(AbstractTestCase):
    """Base class for all plugin tests"""
    plugins = plugins
    modules = modules