Source code for flake8_integration.settings

#-*- coding: utf-8 -*-

"""Module used to define how to manage settings and their persistence

:author: Sébastien CHAZALLET <s.chazallet@gmail.com>
:organization: InsPyration EURL
:copyright: Copyright © InsPyration EURL <www.inspyration.org>
:license: GPL 3 <http://www.gnu.org/licenses/gpl.html>

:version: 0.1
"""

from gettext import gettext as _

from gi.repository import Gio

FLAKE8_KEY_BASE = 'org.gnome.gedit.plugins.flake8_integration'

FLAKE8_KEY_W191 = "w191"
FLAKE8_KEY_W291 = "w291"
FLAKE8_KEY_W292 = "w292"
FLAKE8_KEY_W293 = "w293"
FLAKE8_KEY_W391 = "w391"

FLAKE8_IGNORED_KEYS = (FLAKE8_KEY_W191, FLAKE8_KEY_W291, FLAKE8_KEY_W292,
                       FLAKE8_KEY_W293, FLAKE8_KEY_W391)

CONFIG_OPTIONS = {FLAKE8_KEY_W191: _("w191: identation contains tabs"),
                  FLAKE8_KEY_W291: _("w291: trailling whitespace"),
                  FLAKE8_KEY_W292: _("w292: no new line at end of file"),
                  FLAKE8_KEY_W293: _("w293: blank line contains whitespace"),
                  FLAKE8_KEY_W391: _("w391: blank line at end of file")}

FLAKE8_KEY_COMPLEXITY = "complexity"


[docs]class SettingsManager(object): """Allow to manage local settings and it persistent storage"""
[docs] def __init__(self): """Initialize Settings Manager :type self: SettingsManager :param self: Current manager :rtype: None """ #_settings allow persistent storage of configuration self._settings = Gio.Settings.new(FLAKE8_KEY_BASE) #settings contains configuration usable in the plugin self.settings = {} # pull local settings from persistent storage self.pull_settings()
[docs] def pull_settings(self): """Pull operation update local settings from persistent storage :type self: SettingsManager :param self: Current manager :rtype: None """ # pull ignore list for tag in FLAKE8_IGNORED_KEYS: self.settings[tag] = self._settings.get_boolean(tag) # pull complexity self.settings[FLAKE8_KEY_COMPLEXITY] = self._settings.get_int( FLAKE8_KEY_COMPLEXITY)
[docs] def push_settings(self): """Push operation allow persistent storage update from local settings :type self: SettingsManager :param self: Current manager :rtype: None """ # push ignore list for tag in FLAKE8_IGNORED_KEYS: self._settings.set_boolean(tag, self.settings[tag]) # push complexity self._settings.set_int(FLAKE8_KEY_COMPLEXITY, self.settings[FLAKE8_KEY_COMPLEXITY])
[docs] def update_setting(self, values={}): """Updating settings allow to update local and persistent settings :type self: SettingsManager :param self: Current manager :type values: dict :param values: values to store persistently :rtype: None """ # update local settings self.settings.update(values) # push local settings to persistent storage self.push_settings()
[docs] def get_ignore_keys(self): """Allow to share information about keys used to store ignore list :type self: SettingsManager :param self: Current manager :rtype: list of str :return: list of ignore keys """ return FLAKE8_IGNORED_KEYS
[docs] def get_ignore_items(self): """Allow to share information about keys used to store ignore list :type self: SettingsManager :param self: Current manager :rtype: list of tuple of str :return: list of (ignore key, ignore label) """ return CONFIG_OPTIONS.items()
[docs] def get_complexity_key(self): """Allow to share information about key used to store complexity :type self: SettingsManager :param self: Current manager :rtype: str :return: name of the complexity key """ return FLAKE8_KEY_COMPLEXITY
[docs] def is_in_ignore_list(self, key): """Answer to "Is tag in ignore list ?" question :type self: SettingsManager :param self: Current manager :type key: str :param key: flake8 key as defined in FLAKE8_IGNORED_KEYS :rtype: bool :return: True if the key is in ignore list, False otherwise """ return self.settings[key]
[docs] def get_ignore_list(self): """Get the user defined warning keys to ignore :type self: SettingsManager :param self: Current manager :rtype: list of str :return: list of warning keys """ return [tag for tag, value in self.settings.items() if tag in FLAKE8_IGNORED_KEYS and value is True]
[docs] def get_complexity(self): """Get the user defined complexity parameter :type self: SettingsManager :param self: Current manager :rtype: int :return: complexity """ return self.settings[FLAKE8_KEY_COMPLEXITY]