summaryrefslogtreecommitdiff
path: root/src/leap/config
diff options
context:
space:
mode:
authorTomás Touceda <chiiph@leap.se>2013-03-15 13:30:01 -0300
committerkali <kali@leap.se>2013-03-21 23:01:50 +0900
commit8f54774f6c3f779527718a0158ebd0efc4aab588 (patch)
tree8a746424f81698b03cabcc481196273672b5601e /src/leap/config
parentddbad58fc2b3f44a293eeac7790a06f13b56944a (diff)
Handle configuration and paths in a standalone way
Also, abstracts QSettings under LeapSettings and adds a way to define the VPN env in a platform dependant way.
Diffstat (limited to 'src/leap/config')
-rw-r--r--src/leap/config/baseconfig.py20
-rw-r--r--src/leap/config/leapsettings.py186
-rw-r--r--src/leap/config/prefixers.py2
3 files changed, 200 insertions, 8 deletions
diff --git a/src/leap/config/baseconfig.py b/src/leap/config/baseconfig.py
index c497d156..f5c07184 100644
--- a/src/leap/config/baseconfig.py
+++ b/src/leap/config/baseconfig.py
@@ -41,6 +41,16 @@ class BaseConfig:
__metaclass__ = ABCMeta
+ """
+ Standalone is a class wide parameter
+
+ @param standalone: if True it will return the prefix for a
+ standalone application. Otherwise, it will return the system
+ default for configuration storage.
+ @type standalone: bool
+ """
+ standalone = False
+
def __init__(self):
self._data = {}
self._config_checker = None
@@ -62,16 +72,13 @@ class BaseConfig:
leap_assert(self._config_checker, "Load the config first")
return self._config_checker.config[key]
- def get_path_prefix(self, standalone=False):
+ def get_path_prefix(self):
"""
Returns the platform dependant path prefixer
- @param standalone: if True it will return the prefix for a
- standalone application. Otherwise, it will return the system
- default for configuration storage.
- @type standalone: bool
"""
- return get_platform_prefixer().get_path_prefix(standalone=standalone)
+ return get_platform_prefixer().get_path_prefix(
+ standalone=self.standalone)
def loaded(self):
"""
@@ -113,7 +120,6 @@ class BaseConfig:
@return: True if loaded from disk correctly, False otherwise
"""
- # TODO: retrieve standalone option from app-level config
config_path = os.path.join(self.get_path_prefix(),
path)
diff --git a/src/leap/config/leapsettings.py b/src/leap/config/leapsettings.py
new file mode 100644
index 00000000..4f12b4f8
--- /dev/null
+++ b/src/leap/config/leapsettings.py
@@ -0,0 +1,186 @@
+# -*- coding: utf-8 -*-
+# leapsettings.py
+# Copyright (C) 2013 LEAP
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+"""
+QSettings abstraction
+"""
+import os
+import logging
+
+from PySide import QtCore
+
+from leap.config.prefixers import get_platform_prefixer
+from leap.common.check import leap_assert, leap_assert_type
+
+logger = logging.getLogger(__name__)
+
+
+class LeapSettings(object):
+ """
+ Leap client QSettings wrapper
+ """
+
+ CONFIG_NAME = "leap.conf"
+
+ # keys
+ GEOMETRY_KEY = "Geometry"
+ WINDOWSTATE_KEY = "WindowState"
+ USER_KEY = "User"
+ AUTOLOGIN_KEY = "AutoLogin"
+ PROPERPROVIDER_KEY = "ProperProvider"
+
+ def __init__(self, standalone=False):
+ """
+ Constructor
+
+ @param standalone: parameter used to define the location of
+ the config
+ @type standalone: bool
+ """
+
+ settings_path = os.path.join(get_platform_prefixer()
+ .get_path_prefix(standalone=standalone),
+ self.CONFIG_NAME)
+ self._settings = QtCore.QSettings(settings_path,
+ QtCore.QSettings.IniFormat)
+
+ def get_geometry(self):
+ """
+ Returns the saved geometry or None if it wasn't saved
+
+ @rtype: bytearray or None
+ """
+ return self._settings.value(self.GEOMETRY_KEY, None)
+
+ def set_geometry(self, geometry):
+ """
+ Saves the geometry to the settings
+
+ @param geometry: bytearray representing the geometry
+ @type geometry: bytearray
+ """
+ leap_assert(geometry, "We need a geometry")
+ self._settings.setValue(self.GEOMETRY_KEY, geometry)
+
+ def get_windowstate(self):
+ """
+ Returns the window state or None if it wasn't saved
+
+ @rtype: bytearray or None
+ """
+ return self._settings.value(self.WINDOWSTATE_KEY, None)
+
+ def set_windowstate(self, windowstate):
+ """
+ Saves the window state to the settings
+
+ @param windowstate: bytearray representing the window state
+ @type windowstate: bytearray
+ """
+ leap_assert(windowstate, "We need a window state")
+ self._settings.setValue(self.WINDOWSTATE_KEY, windowstate)
+
+ def get_enabled_services(self, provider):
+ """
+ Returns a list of enabled services for the given provider
+
+ @param provider: provider domain
+ @type provider: str
+
+ @rtype: list of str
+ """
+
+ leap_assert(len(provider) > 0, "We need a nonempty provider")
+ enabled_services = self._settings.value("%s/Services" % (provider,),
+ [])
+ if isinstance(enabled_services, (str, unicode)):
+ enabled_services = enabled_services.split(",")
+
+ return enabled_services
+
+ def set_enabled_services(self, provider, services):
+ """
+ Saves the list of enabled services for the given provider
+
+ @param provider: provider domain
+ @type provider: str
+ @param services: list of services to save
+ @type services: list of str
+ """
+
+ leap_assert(len(provider) > 0, "We need a nonempty provider")
+ leap_assert_type(services, list)
+
+ self._settings.setValue("%s/Services" % (provider,),
+ services)
+
+ def get_user(self):
+ """
+ Returns the configured user to remember, None if there isn't one
+
+ @rtype: str or None
+ """
+ return self._settings.value(self.USER_KEY, None)
+
+ def set_user(self, user):
+ """
+ Saves the user to remember
+
+ @param user: user name to remember
+ @type user: str
+ """
+ leap_assert(len(user) > 0, "We cannot save an empty user")
+ self._settings.setValue(self.USER_KEY, user)
+
+ def get_autologin(self):
+ """
+ Returns True if the app should automatically login, False otherwise
+
+ @rtype: bool
+ """
+ return self._settings.value(self.AUTOLOGIN_KEY, "false") != "false"
+
+ def set_autologin(self, autologin):
+ """
+ Sets wether the app should automatically login
+
+ @param autologin: True if the app should autologin, False otherwise
+ @type autologin: bool
+ """
+ leap_assert_type(autologin, bool)
+ self._settings.setValue(self.AUTOLOGIN_KEY, autologin)
+
+ # TODO: make this scale with multiple providers, we are assuming
+ # just one for now
+ def get_properprovider(self):
+ """
+ Returns True if there is a properly configured provider
+
+ @rtype: bool
+ """
+ return self._settings.value(self.PROPERPROVIDER_KEY,
+ "false") != "false"
+
+ def set_properprovider(self, properprovider):
+ """
+ Sets wether the app should automatically login
+
+ @param autologin: True if the app should autologin, False otherwise
+ @type autologin: bool
+ """
+ leap_assert_type(properprovider, bool)
+ self._settings.setValue(self.PROPERPROVIDER_KEY, properprovider)
diff --git a/src/leap/config/prefixers.py b/src/leap/config/prefixers.py
index c65d8f53..557a77ac 100644
--- a/src/leap/config/prefixers.py
+++ b/src/leap/config/prefixers.py
@@ -74,7 +74,7 @@ class LinuxPrefixer(Prefixer):
config_dir = BaseDirectory.xdg_config_home
if not standalone:
return config_dir
- return os.getenv("LEAP_CLIENT_PATH", config_dir)
+ return os.path.join(os.getcwd(), "config")
if __name__ == "__main__":