summaryrefslogtreecommitdiffstats
path: root/src/gui/PluginList.py
blob: f93e64e448c7a8e9d722ebfb780a055733141762 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# -*- coding: utf-8 -*-
import CCDBusBackend
from ABRTPlugin import PluginInfo, PluginSettings
from abrt_utils import _, log, log1, log2

class PluginInfoList(list):
    """Class to store list of PluginInfos"""
    def __init__(self,dbus_manager=None):
        list.__init__(self)
        self.dm = dbus_manager

    def load(self):
        if self.dm:
            rows = self.dm.getPluginsInfo()
            for plugin_name in rows:
                row = rows[plugin_name]
                entry = PluginInfo()
                for attr_name in row:
                    log2("PluginInfoList: adding %s[%s]:%s", plugin_name, attr_name, row[attr_name])
                    entry.__dict__[attr_name] = row[attr_name]
                daemon_settings = self.dm.getPluginSettings(plugin_name)
                entry.load_daemon_settings(daemon_settings)
                self.append(entry)
        else:
            log("PluginInfoList: db == None")

    def getReporterByName(self, name):
        try:
            return [x for x in self if x["Name"] == name and x.Type == "Reporter" ][0]
        except:
            # if such reporter doesnt't exist return None
            return None

    def getEnabledPlugins(self):
        return [x for x in self if x["Enabled"] == 'yes']

    def getActionPlugins(self):
        return [x for x in self if x["Enabled"] == 'yes' and x["Type"] == 'Action']

    def getDatabasePlugins(self):
        return [x for x in self if x["Enabled"] == 'yes' and x["Type"] == 'Database']

    def getAnalyzerPlugins(self):
        return [x for x in self if x["Enabled"] == 'yes' and x["Type"] == 'Analyzer']

    def getReporterPlugins(self):
        return [x for x in self if x["Enabled"] == 'yes' and x["Type"] == 'Reporter']

    def getReporterPluginsSettings(self):
        reporters_settings = {}
        for plugin in self.getReporterPlugins():
            reporters_settings[str(plugin)] = plugin.Settings
        return reporters_settings


__PFList = None
__PFList_dbmanager = None

def getPluginInfoList(dbmanager,refresh=None):
    global __PFList
    global __PFList_dbmanager

    if __PFList == None or refresh or __PFList_dbmanager != dbmanager:
        __PFList = PluginInfoList(dbus_manager=dbmanager)
        __PFList.load()
        __PFList_dbmanager = dbmanager
    return __PFList

__PFList = None