summaryrefslogtreecommitdiffstats
path: root/src/gui/ABRTPlugin.py
blob: e01d4b932554a3d3e1f921d1abb41bf069e23392 (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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# -*- coding: utf-8 -*-

""" PluginInfo keys:
WWW
Name
Enabled
GTKBuilder
Version
Type
Email
Description
"""
from abrt_utils import _, log, log1, log2
from ConfBackend import getCurrentConfBackend, ConfBackendInitError

class PluginSettings(dict):
    def __init__(self):
        dict.__init__(self)
        self.client_side_conf = None
        try:
            self.client_side_conf = getCurrentConfBackend()
        except ConfBackendInitError, e:
            print e

    def check(self):
        # if present, these should be non-empty
        for key in ["Password", "Login"]:
            if key in self.keys():
                if not self[key]:
                    # some of the required keys are missing
                    return False
        # settings are OK
        return True

    def load_daemon_settings(self, name, daemon_settings):
        # load settings from daemon
        for key in daemon_settings.keys():
            log2("daemon-side setting: %s[%s]='%s'", name, key, daemon_settings[key])
            self[str(key)] = str(daemon_settings[key])

        if self.client_side_conf:
            # FIXME: this fails when gk-authorization fails.
            # We need to show a dialog to user and let him know
            # for now just silently ignore it to avoid rhbz#559342
            settings = {}
            try:
                settings = self.client_side_conf.load(name)
            except Exception, e:
                print e
            # overwrite daemon data with user setting
            for key in settings.keys():
                # only rewrite keys which exist in plugin's keys.
                # e.g. we don't want a password field for logger plugin
                if key in daemon_settings.keys():
                    log2("client-side override: %s[%s]='%s'", name, key, settings[key])
                    self[str(key)] = str(settings[key])

    def save_on_client_side(self, name):
        if self.client_side_conf:
            self.client_side_conf.save(name, self)

class PluginInfo():
    """Class to represent common plugin info"""
    types = {"":_("Not loaded plugins"),
             "Analyzer":_("Analyzer plugins"),
             "Action":_("Action plugins"),
             "Reporter":_("Reporter plugins"),
             "Database":_("Database plugins")}
    keys = ["WWW", "Name", "Enabled",
            "GTKBuilder", "Version",
            "Type", "Email", "Description"]

    def __init__(self):
        self.WWW = None
        self.Name = None
        self.Enabled = None
        self.GTKBuilder = None
        self.Version = None
        self.Type = None
        self.Email = None
        self.Description = None
        self.Settings = PluginSettings()

    def getName(self):
        return self.Name

    def getDescription(self):
        return self.Description

    def getType(self):
        return self.Type

    def getGUI(self):
        return self.GTKBuilder

    def __str__(self):
        return self.Name

    def __getitem__(self, item):
        return self.__dict__[item]

    def load_daemon_settings(self, daemon_settings):
        if self.Name:
            self.Settings.load_daemon_settings(self.Name, daemon_settings)
        else:
            log("Plugin name is not set, can't load its settings")

    def save_settings_on_client_side(self):
        self.Settings.save_on_client_side(str(self.Name))