Esempio n. 1
0
    def test_load_any(self):
        # import an already-imported module
        self.assertIdentical(modules.load_any('snakeoil.modules'), modules)
        # attribute of an already imported module
        self.assertIdentical(modules.load_any('sys.path'), sys.path)
        # already imported toplevel.
        self.assertIdentical(sys, modules.load_any('sys'))
        # unimported
        myfoo = modules.load_any('mod_testpack.mod_test2.foo')

        # "Unable to import"
        # pylint: disable=F0401

        from mod_testpack.mod_test2 import foo
        self.assertIdentical(foo, myfoo)
        # nonexisting attribute
        self.assertRaises(
            modules.FailedImport, modules.load_any, 'snakeoil.froznicator')
        # nonexisting top-level
        self.assertRaises(
            modules.FailedImport, modules.load_any,
            'spork_does_not_exist.foo')
        self.assertRaises(
            modules.FailedImport, modules.load_any,
            'spork_does_not_exist')
        # not imported yet
        self.assertRaises(
            modules.FailedImport,
            modules.load_any, 'mod_testpack.mod_test3')
Esempio n. 2
0
def _process_plugin(package, plug, filter_disabled=False):
    if isinstance(plug.target, str):
        plug = modules.load_any(plug.target)
    elif isinstance(plug.target, int):
        module = modules.load_any(plug.source)
        plugs = getattr(module, PLUGIN_ATTR, {})
        plugs = plugs.get(plug.key, [])
        if len(plugs) <= plug.target:
            logger.exception(
                "plugin cache for %s, %s, %s is somehow wrong; no item at position %s",
                package.__name__, plug.source, plug.key, plug.target)
            return None
        plug = plugs[plug.target]
    else:
        logger.error("package %s, plug %s; non int, non string.  wtf?",
                     package.__name__, plug)
        return None

    if filter_disabled:
        if getattr(plug, 'disabled', False):
            logger.debug("plugin %s is disabled, skipping", plug)
            return None
        f = getattr(plug, '_plugin_disabled_check', None)
        if f is not None and f():
            logger.debug("plugin %s is disabled, skipping", plug)
            return None

    return plug
Esempio n. 3
0
    def test_load_any(self):
        # import an already-imported module
        self.assertIdentical(modules.load_any('snakeoil.modules'), modules)
        # attribute of an already imported module
        self.assertIdentical(modules.load_any('sys.path'), sys.path)
        # already imported toplevel.
        self.assertIdentical(sys, modules.load_any('sys'))
        # unimported
        myfoo = modules.load_any('mod_testpack.mod_test2.foo')

        # "Unable to import"
        # pylint: disable=F0401

        from mod_testpack.mod_test2 import foo
        self.assertIdentical(foo, myfoo)
        # nonexisting attribute
        self.assertRaises(modules.FailedImport, modules.load_any,
                          'snakeoil.froznicator')
        # nonexisting top-level
        self.assertRaises(modules.FailedImport, modules.load_any,
                          'spork_does_not_exist.foo')
        self.assertRaises(modules.FailedImport, modules.load_any,
                          'spork_does_not_exist')
        # not imported yet
        self.assertRaises(modules.FailedImport, modules.load_any,
                          'mod_testpack.mod_test3')
Esempio n. 4
0
def _process_plugin(package, plug, filter_disabled=False):
    if isinstance(plug.target, basestring):
        try:
            plug = modules.load_any(plug.target)
        except modules.FailedImport, e:
            logger.exception("plugin import for %s failed processing file %s, entry %s: %s",
                package.__name__, plug.source, plug.target, e)
            return None
Esempio n. 5
0
def _process_plugin(package, plug, filter_disabled=False):
    if isinstance(plug.target, basestring):
        try:
            plug = modules.load_any(plug.target)
        except modules.FailedImport as e:
            logger.exception(
                "plugin import for %s failed processing file %s, entry %s: %s",
                package.__name__,
                plug.source,
                plug.target,
                e,
            )
            return None
    elif isinstance(plug.target, int):
        try:
            module = modules.load_any(plug.source)
        except modules.FailedImport as e:
            logger.exception("plugin import for %s failed processing file %s: %s", package.__name__, plug.source, e)
            return None
        plugs = getattr(module, PLUGIN_ATTR, {})
        plugs = plugs.get(plug.key, [])
        if len(plugs) <= plug.target:
            logger.exception(
                "plugin cache for %s, %s, %s is somehow wrong; no item at position %s",
                package.__name__,
                plug.source,
                plug.key,
                plug.target,
            )
            return None
        plug = plugs[plug.target]
    else:
        logger.error("package %s, plug %s; non int, non string.  wtf?", package.__name__, plug)
        return None

    if filter_disabled:
        if getattr(plug, "disabled", False):
            logger.debug("plugin %s is disabled, skipping", plug)
            return None
        f = getattr(plug, "_plugin_disabled_check", None)
        if f is not None and f():
            logger.debug("plugin %s is disabled, skipping", plug)
            return None

    return plug
Esempio n. 6
0
def python_namespace_type(value, module=False, attribute=False):
    """
    return the object from python namespace that value specifies

    :param value: python namespace, snakeoil.modules for example
    :param module: if true, the object must be a module
    :param attribute: if true, the object must be a non-module
    :raises ValueError: if the conditions aren't met, or import fails
    """
    try:
        if module:
            return import_module(value)
        elif attribute:
            return modules.load_attribute(value)
        return modules.load_any(value)
    except (ImportError, modules.FailedImport) as err:
        compatibility.raise_from(argparse.ArgumentTypeError(str(err)))
Esempio n. 7
0
def python_namespace_type(value, module=False, attribute=False):
    """
    return the object from python namespace that value specifies

    :param value: python namespace, snakeoil.modules for example
    :param module: if true, the object must be a module
    :param attribute: if true, the object must be a non-module
    :raises ValueError: if the conditions aren't met, or import fails
    """
    try:
        if module:
            return import_module(value)
        elif attribute:
            return modules.load_attribute(value)
        return modules.load_any(value)
    except (ImportError, modules.FailedImport) as err:
        compatibility.raise_from(argparse.ArgumentTypeError(str(err)))
Esempio n. 8
0
def disabled_demandload(scope, *imports):
    """Exactly like :py:func:`demandload` but does all imports immediately."""
    for source, target in parse_imports(imports):
        scope[target] = load_any(source)
Esempio n. 9
0
 def _replace_func(self):
     source = object.__getattribute__(self, '_source')
     return load_any(source)
Esempio n. 10
0
    for plug in sequence:
        plug = _process_plugin(package, plug, filter_disabled)
        if plug is not None:
            yield plug

def _process_plugin(package, plug, filter_disabled=False):
    if isinstance(plug.target, basestring):
        try:
            plug = modules.load_any(plug.target)
        except modules.FailedImport, e:
            logger.exception("plugin import for %s failed processing file %s, entry %s: %s",
                package.__name__, plug.source, plug.target, e)
            return None
    elif isinstance(plug.target, int):
        try:
            module = modules.load_any(plug.source)
        except modules.FailedImport, e:
            logger.exception("plugin import for %s failed processing file %s: %s",
                package.__name__, plug.source, e)
            return None
        plugs = getattr(module, PLUGIN_ATTR, {})
        plugs = plugs.get(plug.key, [])
        if len(plugs) <= plug.target:
            logger.exception("plugin cache for %s, %s, %s is somehow wrong; no item at position %s",
                package.__name__, plug.source, plug.key, plug.target)
            return None
        plug = plugs[plug.target]
    else:
        logger.error("package %s, plug %s; non int, non string.  wtf?",
            package.__name__, plug)
        return None
Esempio n. 11
0
def disabled_demandload(scope, *imports):
    """Exactly like :py:func:`demandload` but does all imports immediately."""
    for source, target in parse_imports(imports):
        scope[target] = load_any(source)
Esempio n. 12
0
    def test_load_any(self):
        # import an already-imported module
        assert modules.load_any('snakeoil.modules') is modules
        # attribute of an already imported module
        assert modules.load_any('sys.path') is sys.path
        # already imported toplevel.
        assert sys is modules.load_any('sys')
        # unimported
        myfoo = modules.load_any('mod_testpack.mod_test2.foo')

        # "Unable to import"
        # pylint: disable=F0401

        from mod_testpack.mod_test2 import foo
        assert foo is myfoo
        # nonexisting attribute
        with pytest.raises(modules.FailedImport):
            modules.load_any('snakeoil.froznicator')
        # nonexisting top-level
        with pytest.raises(modules.FailedImport):
            modules.load_any('spork_does_not_exist.foo')
        with pytest.raises(modules.FailedImport):
            modules.load_any('spork_does_not_exist')
        # not imported yet
        with pytest.raises(modules.FailedImport):
            modules.load_any('mod_testpack.mod_test3')
Esempio n. 13
0
def disabled_demandload(*imports, **kwargs):
    """Exactly like :py:func:`demandload` but does all imports immediately."""
    scope = kwargs.pop('scope', sys._getframe(1).f_globals)
    for source, target in parse_imports(imports):
        scope[target] = load_any(source)
Esempio n. 14
0
    def test_load_any(self):
        # import an already-imported module
        assert modules.load_any('snakeoil.modules') is modules
        # attribute of an already imported module
        assert modules.load_any('sys.path') is sys.path
        # already imported toplevel.
        assert sys is modules.load_any('sys')
        # unimported
        myfoo = modules.load_any('mod_testpack.mod_test2.foo')

        # "Unable to import"
        # pylint: disable=F0401

        from mod_testpack.mod_test2 import foo
        assert foo is myfoo
        # nonexisting attribute
        with pytest.raises(modules.FailedImport):
            modules.load_any('snakeoil.froznicator')
        # nonexisting top-level
        with pytest.raises(modules.FailedImport):
            modules.load_any('spork_does_not_exist.foo')
        with pytest.raises(modules.FailedImport):
            modules.load_any('spork_does_not_exist')
        # not imported yet
        with pytest.raises(modules.FailedImport):
            modules.load_any('mod_testpack.mod_test3')