3 """Module used to define how to manage settings and their persistence
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>
13 from gettext import gettext as _
15 from gi.repository import Gio
17 FLAKE8_KEY_BASE = 'org.gnome.gedit.plugins.flake8_integration'
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"
25 FLAKE8_IGNORED_KEYS = (FLAKE8_KEY_W191, FLAKE8_KEY_W291, FLAKE8_KEY_W292,
26 FLAKE8_KEY_W293, FLAKE8_KEY_W391)
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")}
34 FLAKE8_KEY_COMPLEXITY = "complexity"
37 class SettingsManager(object):
38 """Allow to manage local settings and it persistent storage"""
41 """Initialize Settings Manager
43 :type self: SettingsManager
44 :param self: Current manager
49 #_settings allow persistent storage of configuration
50 self._settings = Gio.Settings.new(FLAKE8_KEY_BASE)
51 #settings contains configuration usable in the plugin
53 # pull local settings from persistent storage
56 def pull_settings(self):
57 """Pull operation update local settings from persistent storage
59 :type self: SettingsManager
60 :param self: Current manager
66 for tag in FLAKE8_IGNORED_KEYS:
67 self.settings[tag] = self._settings.get_boolean(tag)
69 self.settings[FLAKE8_KEY_COMPLEXITY] = self._settings.get_int(
70 FLAKE8_KEY_COMPLEXITY)
72 def push_settings(self):
73 """Push operation allow persistent storage update from local settings
75 :type self: SettingsManager
76 :param self: Current manager
82 for tag in FLAKE8_IGNORED_KEYS:
83 self._settings.set_boolean(tag, self.settings[tag])
85 self._settings.set_int(FLAKE8_KEY_COMPLEXITY,
86 self.settings[FLAKE8_KEY_COMPLEXITY])
88 def update_setting(self, values={}):
89 """Updating settings allow to update local and persistent settings
91 :type self: SettingsManager
92 :param self: Current manager
94 :param values: values to store persistently
98 # update local settings
99 self.settings.update(values)
100 # push local settings to persistent storage
103 def get_ignore_keys(self):
104 """Allow to share information about keys used to store ignore list
106 :type self: SettingsManager
107 :param self: Current manager
110 :return: list of ignore keys
112 return FLAKE8_IGNORED_KEYS
114 def get_ignore_items(self):
115 """Allow to share information about keys used to store ignore list
117 :type self: SettingsManager
118 :param self: Current manager
120 :rtype: list of tuple of str
121 :return: list of (ignore key, ignore label)
123 return CONFIG_OPTIONS.items()
125 def get_complexity_key(self):
126 """Allow to share information about key used to store complexity
128 :type self: SettingsManager
129 :param self: Current manager
132 :return: name of the complexity key
134 return FLAKE8_KEY_COMPLEXITY
136 def is_in_ignore_list(self, key):
137 """Answer to "Is tag in ignore list ?" question
139 :type self: SettingsManager
140 :param self: Current manager
142 :param key: flake8 key as defined in FLAKE8_IGNORED_KEYS
145 :return: True if the key is in ignore list, False otherwise
147 return self.settings[key]
149 def get_ignore_list(self):
150 """Get the user defined warning keys to ignore
152 :type self: SettingsManager
153 :param self: Current manager
156 :return: list of warning keys
158 return [tag for tag, value in self.settings.items()
159 if tag in FLAKE8_IGNORED_KEYS and value is True]
161 def get_complexity(self):
162 """Get the user defined complexity parameter
164 :type self: SettingsManager
165 :param self: Current manager
170 return self.settings[FLAKE8_KEY_COMPLEXITY]