Premier commit : Code et doc (état de publication)
[gedit/flake8] / flake8_integration / settings.py
1 #-*- coding: utf-8 -*-
2
3 """Module used to define how to manage settings and their persistence
4
5 :author: Sébastien CHAZALLET <s.chazallet@gmail.com>
6 :organization: InsPyration EURL
7 :copyright: Copyright © InsPyration EURL <www.inspyration.org>
8 :license: GPL 3 <http://www.gnu.org/licenses/gpl.html>
9
10 :version: 0.1
11 """
12
13 from gettext import gettext as _
14
15 from gi.repository import Gio
16
17 FLAKE8_KEY_BASE = 'org.gnome.gedit.plugins.flake8_integration'
18
19 FLAKE8_KEY_W191 = "w191"
20 FLAKE8_KEY_W291 = "w291"
21 FLAKE8_KEY_W292 = "w292"
22 FLAKE8_KEY_W293 = "w293"
23 FLAKE8_KEY_W391 = "w391"
24
25 FLAKE8_IGNORED_KEYS = (FLAKE8_KEY_W191, FLAKE8_KEY_W291, FLAKE8_KEY_W292,
26                        FLAKE8_KEY_W293, FLAKE8_KEY_W391)
27
28 CONFIG_OPTIONS = {FLAKE8_KEY_W191: _("w191: identation contains tabs"),
29                   FLAKE8_KEY_W291: _("w291: trailling whitespace"),
30                   FLAKE8_KEY_W292: _("w292: no new line at end of file"),
31                   FLAKE8_KEY_W293: _("w293: blank line contains whitespace"),
32                   FLAKE8_KEY_W391: _("w391: blank line at end of file")}
33
34 FLAKE8_KEY_COMPLEXITY = "complexity"
35
36
37 class SettingsManager(object):
38     """Allow to manage local settings and it persistent storage"""
39
40     def __init__(self):
41         """Initialize Settings Manager
42
43         :type  self: SettingsManager
44         :param self: Current manager
45
46         :rtype: None
47         """
48
49         #_settings allow persistent storage of configuration
50         self._settings = Gio.Settings.new(FLAKE8_KEY_BASE)
51         #settings contains configuration usable in the plugin
52         self.settings = {}
53         # pull local settings from persistent storage
54         self.pull_settings()
55
56     def pull_settings(self):
57         """Pull operation update local settings from persistent storage
58
59         :type  self: SettingsManager
60         :param self: Current manager
61
62         :rtype: None
63         """
64
65         # pull ignore list
66         for tag in FLAKE8_IGNORED_KEYS:
67             self.settings[tag] = self._settings.get_boolean(tag)
68         # pull complexity
69         self.settings[FLAKE8_KEY_COMPLEXITY] = self._settings.get_int(
70             FLAKE8_KEY_COMPLEXITY)
71
72     def push_settings(self):
73         """Push operation allow persistent storage update from local settings
74
75         :type  self: SettingsManager
76         :param self: Current manager
77
78         :rtype: None
79         """
80
81         # push ignore list
82         for tag in FLAKE8_IGNORED_KEYS:
83             self._settings.set_boolean(tag, self.settings[tag])
84         # push complexity
85         self._settings.set_int(FLAKE8_KEY_COMPLEXITY,
86                                self.settings[FLAKE8_KEY_COMPLEXITY])
87
88     def update_setting(self, values={}):
89         """Updating settings allow to update local and persistent settings
90
91         :type  self: SettingsManager
92         :param self: Current manager
93         :type  values: dict
94         :param values: values to store persistently
95
96         :rtype: None
97         """
98         # update local settings
99         self.settings.update(values)
100         # push local settings to persistent storage
101         self.push_settings()
102
103     def get_ignore_keys(self):
104         """Allow to share information about keys used to store ignore list
105
106         :type  self: SettingsManager
107         :param self: Current manager
108
109         :rtype: list of str
110         :return: list of ignore keys
111         """
112         return FLAKE8_IGNORED_KEYS
113
114     def get_ignore_items(self):
115         """Allow to share information about keys used to store ignore list
116
117         :type  self: SettingsManager
118         :param self: Current manager
119
120         :rtype: list of tuple of str
121         :return: list of (ignore key, ignore label)
122         """
123         return CONFIG_OPTIONS.items()
124
125     def get_complexity_key(self):
126         """Allow to share information about key used to store complexity
127
128         :type  self: SettingsManager
129         :param self: Current manager
130
131         :rtype: str
132         :return: name of the complexity key
133         """
134         return FLAKE8_KEY_COMPLEXITY
135
136     def is_in_ignore_list(self, key):
137         """Answer to "Is tag in ignore list ?" question
138
139         :type  self: SettingsManager
140         :param self: Current manager
141         :type  key: str
142         :param key: flake8 key as defined in FLAKE8_IGNORED_KEYS
143
144         :rtype: bool
145         :return: True if the key is in ignore list, False otherwise
146         """
147         return self.settings[key]
148
149     def get_ignore_list(self):
150         """Get the user defined warning keys to ignore
151
152         :type  self: SettingsManager
153         :param self: Current manager
154
155         :rtype: list of str
156         :return: list of warning keys
157         """
158         return [tag for tag, value in self.settings.items()
159                 if tag in FLAKE8_IGNORED_KEYS and value is True]
160
161     def get_complexity(self):
162         """Get the user defined complexity parameter
163
164         :type  self: SettingsManager
165         :param self: Current manager
166
167         :rtype: int
168         :return: complexity
169         """
170         return self.settings[FLAKE8_KEY_COMPLEXITY]