Example #1
0
    def load(self, ignore_blacklist=False):
        """ Attempt to load the plugin we represent. """
        if self.is_loaded:
            log.warning('Trying to load already loaded plugin %r.' %
                        self.data['name'])
            return

        if not ignore_blacklist and self.is_blacklisted:
            raise addons.DependencyError('Plugin %r is blacklisted.' % 
                                         self.data['name'])

        # Check our dependencies for safety.
        addons.check_dependencies(self)

        # Load our dependencies.
        for name in self.requires.iterkeys():
            if name == '__app__' or (':' in name and not
                    name.startswith('plugin:')):
                continue
            dep = addons.get('plugin', name)

            # Make sure we're needed.
            if not self.name in dep.needed_by:
                dep.needed_by.append(self.name)

            # If it's loaded, just continue.
            if dep.is_loaded:
                continue
            dep.load()

        # Okay, now load!
        self._do_load()
Example #2
0
    def is_active(self, val):
        """ Enable or disable the plugin. """
        val = bool(val)
        if val == self._is_active:
            return

        # Don't set _is_active just yet.
        if val:
            # Check our dependencies first.
            addons.check_dependencies(self._info)

            # Make sure those dependencies are loaded.
            self._activate_dependencies()

            # Connect our signals.
            self._connect_signals()

            # Finally, set ourselves active and update any UI elements for
            # this plugin.
            self._is_active = True
            self._info.update_ui()

            log.info('Activated plugin %r.' % self._info.data['name'])

        else:
            # If we're already on, we can assume we don't need to check our
            # dependencies. We *do* have to deactivate the plugins that depend
            # on us though.
            self._deactivate_dependants()

            # Disconnect the signals and slots.
            self._disconnect_signals()

            # And finally, set us as inactive and update UI.
            self._is_active = False
            self._info.update_ui()

            log.info('Deactivated plugin %r.' % self._info.data['name'])