Use dirspec instead of plain xdg. Closes #3574.
authorIvan Alejandro <ivanalejandro0@gmail.com>
Wed, 28 Aug 2013 16:14:09 +0000 (13:14 -0300)
committerIvan Alejandro <ivanalejandro0@gmail.com>
Wed, 28 Aug 2013 18:33:34 +0000 (15:33 -0300)
changes/feature-3574_use-dirspec-instead-of-plain-xdg [new file with mode: 0644]
pkg/requirements.pip
src/leap/common/config/__init__.py
src/leap/common/config/baseconfig.py
src/leap/common/config/prefixers.py [deleted file]
src/leap/common/config/tests/test_get_path_prefix.py [new file with mode: 0644]

diff --git a/changes/feature-3574_use-dirspec-instead-of-plain-xdg b/changes/feature-3574_use-dirspec-instead-of-plain-xdg
new file mode 100644 (file)
index 0000000..9bdc507
--- /dev/null
@@ -0,0 +1 @@
+  o Use dirspec instead of plain xdg. Closes #3574.
index 9617d92..c89fd19 100644 (file)
@@ -1,5 +1,5 @@
 jsonschema  #<=0.8 -- are we done with this conflict?
-pyxdg
+dirspec
 protobuf>=2.4.1
 protobuf.socketrpc
 pyopenssl
index e69de29..68d92dc 100644 (file)
@@ -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
index e310bc0..2d98031 100644 (file)
@@ -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 (file)
index 9a5b043..0000000
+++ /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 (file)
index 0000000..27824fc
--- /dev/null
@@ -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)