summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Alejandro <ivanalejandro0@gmail.com>2013-08-28 13:14:09 -0300
committerIvan Alejandro <ivanalejandro0@gmail.com>2013-08-28 15:33:34 -0300
commit35e5e7623c260bd35cb924b65f21350145e12233 (patch)
tree722854d277f15f43dde882217452bd22999513ef /src
parent518169758b3aec1beef1ae15bf08cb4906517f49 (diff)
Use dirspec instead of plain xdg. Closes #3574.
Diffstat (limited to 'src')
-rw-r--r--src/leap/common/config/__init__.py39
-rw-r--r--src/leap/common/config/baseconfig.py5
-rw-r--r--src/leap/common/config/prefixers.py132
-rw-r--r--src/leap/common/config/tests/test_get_path_prefix.py63
4 files changed, 104 insertions, 135 deletions
diff --git a/src/leap/common/config/__init__.py b/src/leap/common/config/__init__.py
index e69de29..68d92dc 100644
--- a/src/leap/common/config/__init__.py
+++ b/src/leap/common/config/__init__.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+# __init__.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/>.
+"""
+Common configs
+"""
+import os
+
+from dirspec.basedir import get_xdg_config_home
+
+
+def get_path_prefix(standalone=False):
+ """
+ Returns the platform dependent path prefix.
+
+ :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
+ """
+ config_home = get_xdg_config_home()
+ if standalone:
+ config_home = os.path.join(os.getcwd(), "config")
+
+ return config_home
diff --git a/src/leap/common/config/baseconfig.py b/src/leap/common/config/baseconfig.py
index e310bc0..2d98031 100644
--- a/src/leap/common/config/baseconfig.py
+++ b/src/leap/common/config/baseconfig.py
@@ -29,7 +29,7 @@ from abc import ABCMeta, abstractmethod
from leap.common.check import leap_assert, leap_check
from leap.common.files import mkdir_p
from leap.common.config.pluggableconfig import PluggableConfig
-from leap.common.config.prefixers import get_platform_prefixer
+from leap.common.config import get_path_prefix
logger = logging.getLogger(__name__)
@@ -108,8 +108,7 @@ class BaseConfig:
"""
Returns the platform dependant path prefixer
"""
- return get_platform_prefixer().get_path_prefix(
- standalone=self.standalone)
+ return get_path_prefix(standalone=self.standalone)
def loaded(self):
"""
diff --git a/src/leap/common/config/prefixers.py b/src/leap/common/config/prefixers.py
deleted file mode 100644
index 9a5b043..0000000
--- a/src/leap/common/config/prefixers.py
+++ /dev/null
@@ -1,132 +0,0 @@
-# -*- coding: utf-8 -*-
-# prefixers.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/>.
-
-"""
-Platform dependant configuration path prefixers
-"""
-import os
-import platform
-
-from abc import ABCMeta, abstractmethod
-from xdg import BaseDirectory
-
-from leap.common.check import leap_assert
-
-
-class Prefixer:
- """
- Abstract prefixer class
- """
-
- __metaclass__ = ABCMeta
-
- @abstractmethod
- def get_path_prefix(self, standalone=False):
- """
- 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 ""
-
-
-def get_platform_prefixer():
- prefixer = globals()[platform.system() + "Prefixer"]
- leap_assert(prefixer, "Unimplemented platform prefixer: %s" %
- (platform.system(),))
- return prefixer()
-
-
-class LinuxPrefixer(Prefixer):
- """
- Config prefixer for the Linux platform
- """
-
- def get_path_prefix(self, standalone=False):
- """
- Returns the platform dependant path prefixer.
- This method expects an env variable named LEAP_CLIENT_PATH if
- standalone is used.
-
- :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
- """
- config_dir = BaseDirectory.xdg_config_home
- if not standalone:
- return config_dir
- return os.path.join(os.getcwd(), "config")
-
-
-class DarwinPrefixer(Prefixer):
- """
- Config prefixer for the Darwin platform
- """
-
- def get_path_prefix(self, standalone=False):
- """
- Returns the platform dependant path prefixer.
- This method expects an env variable named LEAP_CLIENT_PATH if
- standalone is used.
-
- :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
- """
- config_dir = BaseDirectory.xdg_config_home
- if not standalone:
- return config_dir
- return os.path.join(os.getcwd(), "config")
-
-
-class WindowsPrefixer(Prefixer):
- """
- Config prefixer for the Windows platform
- """
-
- def get_path_prefix(self, standalone=False):
- """
- Returns the platform dependant path prefixer.
- This method expects an env variable named LEAP_CLIENT_PATH if
- standalone is used.
-
- :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
- """
- config_dir = BaseDirectory.xdg_config_home
-
- if not standalone:
- return config_dir
- return os.path.join(os.getcwd(), "config")
-
-if __name__ == "__main__":
- try:
- abs_prefixer = Prefixer()
- except Exception as e:
- assert isinstance(e, TypeError), "Something went wrong"
- print "Abstract Prefixer class is working as expected"
-
- linux_prefixer = LinuxPrefixer()
- print linux_prefixer.get_path_prefix(standalone=True)
- print linux_prefixer.get_path_prefix()
diff --git a/src/leap/common/config/tests/test_get_path_prefix.py b/src/leap/common/config/tests/test_get_path_prefix.py
new file mode 100644
index 0000000..27824fc
--- /dev/null
+++ b/src/leap/common/config/tests/test_get_path_prefix.py
@@ -0,0 +1,63 @@
+# -*- coding: utf-8 -*-
+# test_get_path_prefix.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/>.
+"""
+Tests for get_path_prefix
+"""
+import os
+import mock
+
+try:
+ import unittest2 as unittest
+except ImportError:
+ import unittest
+
+from leap.common.config import get_path_prefix
+from leap.common.testing.basetest import BaseLeapTest
+
+
+class GetPathPrefixTest(BaseLeapTest):
+ """
+ Tests for the get_path_prefix helper.
+
+ Note: we only are testing that the path is correctly returned and that if
+ we are not in a bundle (standalone=False) then the paths are different.
+
+ dirspec calculates the correct path using different methods and dlls
+ (in case of Windows) so we don't implement tests to check if the paths
+ are the correct ones.
+ """
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def test_standalone_path(self):
+ expected_path = os.path.join('expected', 'path', 'config')
+ fake_cwd = os.path.join('expected', 'path')
+ with mock.patch('os.getcwd', lambda: fake_cwd):
+ path = get_path_prefix(standalone=True)
+ self.assertEquals(path, expected_path)
+
+ def test_path_prefix(self):
+ standalone_path = get_path_prefix(standalone=True)
+ path = get_path_prefix(standalone=False)
+ self.assertNotEquals(path, standalone_path)
+
+
+if __name__ == "__main__":
+ unittest.main(verbosity=2)