Blame pagure/lib/plugins.py

Pierre-Yves Chibon 295cfb
# -*- coding: utf-8 -*-
Pierre-Yves Chibon 295cfb
Pierre-Yves Chibon 295cfb
"""
Pierre-Yves Chibon 295cfb
 (c) 2016 - Copyright Red Hat Inc
Pierre-Yves Chibon 295cfb
Pierre-Yves Chibon 295cfb
 Authors:
Pierre-Yves Chibon 295cfb
   Pierre-Yves Chibon <pingou@pingoured.fr></pingou@pingoured.fr>
Pierre-Yves Chibon 295cfb
Pierre-Yves Chibon 295cfb
"""
Pierre-Yves Chibon 295cfb
Pierre-Yves Chibon 67d1cc
from __future__ import unicode_literals, absolute_import
Aurélien Bompard dcf6f6
Pierre-Yves Chibon 295cfb
from straight.plugin import load
Pierre-Yves Chibon 295cfb
Patrick Uiterwijk 4012dc
from pagure.lib.model_base import BASE
Pierre-Yves Chibon 295cfb
Pierre-Yves Chibon 295cfb
Slavek Kabrda 370e67
def get_plugin_names(blacklist=None, without_backref=False):
Slavek Kabrda 370e67
    """ Return the list of plugins names.
Slavek Kabrda 370e67
Slavek Kabrda 370e67
    :arg blacklist: name or list of names to not return
Slavek Kabrda 370e67
    :type blacklist: string or list of strings
Slavek Kabrda 370e67
    :arg without_backref: whether or not to include hooks that
Slavek Kabrda 370e67
        have backref "None"
Slavek Kabrda 370e67
    :type without_backref: bool
Slavek Kabrda 370e67
    :return: list of plugin names (strings)
Slavek Kabrda 370e67
    """
Pierre-Yves Chibon 295cfb
    from pagure.hooks import BaseHook
Pierre-Yves Chibon 9c2953
Pierre-Yves Chibon 9c2953
    plugins = load("pagure.hooks", subclasses=BaseHook)
Pierre-Yves Chibon 295cfb
    if not blacklist:
Pierre-Yves Chibon 295cfb
        blacklist = []
Pierre-Yves Chibon 295cfb
    elif not isinstance(blacklist, list):
Pierre-Yves Chibon 295cfb
        blacklist = [blacklist]
Pierre-Yves Chibon 295cfb
Pierre-Yves Chibon 295cfb
    output = [
Pierre-Yves Chibon ee649a
        plugin.name
Pierre-Yves Chibon ee649a
        for plugin in plugins
Slavek Kabrda 370e67
        if plugin.name not in blacklist and (plugin.backref or without_backref)
Pierre-Yves Chibon 295cfb
    ]
Pierre-Yves Chibon 295cfb
    # The default hook is not one we show
Pierre-Yves Chibon 9c2953
    if "default" in output:
Pierre-Yves Chibon 9c2953
        output.remove("default")
Pierre-Yves Chibon 295cfb
    return sorted(output)
Pierre-Yves Chibon 295cfb
Pierre-Yves Chibon 295cfb
Pierre-Yves Chibon 295cfb
def get_plugin_tables():
Pierre-Yves Chibon 9c2953
    """ Return the list of all plugins. """
Pierre-Yves Chibon 9c2953
    plugins = load("pagure.hooks", subclasses=BASE)
Pierre-Yves Chibon 295cfb
    return plugins
Pierre-Yves Chibon 295cfb
Pierre-Yves Chibon 295cfb
Pierre-Yves Chibon 295cfb
def get_plugin(plugin_name):
Pierre-Yves Chibon 9c2953
    """ Return the list of plugins names. """
Pierre-Yves Chibon 295cfb
    from pagure.hooks import BaseHook
Pierre-Yves Chibon 9c2953
Pierre-Yves Chibon 9c2953
    plugins = load("pagure.hooks", subclasses=BaseHook)
Pierre-Yves Chibon 295cfb
    for plugin in plugins:
Pierre-Yves Chibon 295cfb
        if plugin.name == plugin_name:
Pierre-Yves Chibon 295cfb
            return plugin
Patrick Uiterwijk 4012dc
Patrick Uiterwijk 4012dc
Slavek Kabrda adbb5f
def get_enabled_plugins(project):
Patrick Uiterwijk 4012dc
    """ Returns a list of plugins enabled for a specific project.
Patrick Uiterwijk 4012dc
Patrick Uiterwijk 4012dc
    Args:
Patrick Uiterwijk 4012dc
        project (model.Project): The project to look for.
Patrick Uiterwijk 4012dc
    Returns: (list): A  list of tuples (pluginclass, dbobj) with the plugin
Patrick Uiterwijk 4012dc
        classess and dbobjects for plugins enabled for the project.
Patrick Uiterwijk 4012dc
    """
Patrick Uiterwijk 4012dc
    from pagure.hooks import BaseHook
Patrick Uiterwijk 4012dc
Patrick Uiterwijk 4012dc
    enabled = []
Patrick Uiterwijk 4012dc
    for plugin in load("pagure.hooks", subclasses=BaseHook):
Slavek Kabrda 370e67
        if plugin.backref is None:
Slavek Kabrda 370e67
            if plugin.is_enabled_for(project):
Slavek Kabrda 370e67
                enabled.append((plugin, None))
Slavek Kabrda 370e67
        else:
Slavek Kabrda 370e67
            plugin.db_object()
Slavek Kabrda 370e67
            if hasattr(project, plugin.backref):
Slavek Kabrda 370e67
                dbobj = getattr(project, plugin.backref)
Slavek Kabrda 370e67
                if dbobj and dbobj.active:
Slavek Kabrda 370e67
                    enabled.append((plugin, dbobj))
Patrick Uiterwijk 4012dc
    return enabled