[pkg] remove dependency on dirspec
authordrebs <drebs@leap.se>
Wed, 6 Jul 2016 06:46:33 +0000 (08:46 +0200)
committerKali Kaneko <kali@leap.se>
Mon, 11 Jul 2016 14:41:53 +0000 (16:41 +0200)
This commit removes the dep introduced in 5e12233 by just importing some tiny
bit of dirspec code.

The previous change was introduced because:

  * pyxdg did not account for Mac OS specifics, i.e. using ~/Library/
    directory structure instead of .config (see:
    https://leap.se/code/issues/3574).

  * dirspec does the correct thing for xdg on Mac OS.

  * u1db depends on dirspec anyway.

The problem is that dirspec is not maintained and published on pypi, what
forces us to download it from an URL and add exceptions to be able to pip
install it.

As we are removing dependence on u1db on other modules, we can also remove it
here. To workaround the Mac OS problem, we just add some code from dirspec to
ensure we get the correct directory on Mac OS.

pkg/requirements.pip
setup.py
src/leap/common/config/__init__.py
tests/config/test_get_path_prefix.py

index b2be31f..b02c8b5 100644 (file)
@@ -3,5 +3,4 @@ pyopenssl
 python-dateutil
 pyzmq>=14.4.1
 txzmq>=0.7.3
-https://launchpad.net/dirspec/stable-13-10/13.10/+download/dirspec-13.10.tar.gz
 -e .
index e23ca7d..4269718 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -30,7 +30,6 @@ dependency_links = [requirement for requirement
                     in requirements if requirement.startswith('http')]
 requirements = [requirement for requirement
                 in requirements if requirement not in dependency_links]
-requirements.append('dirspec')
 
 tests_requirements = [
     'mock',
index 68d92dc..15c6fea 100644 (file)
 Common configs
 """
 import os
+import sys
 
-from dirspec.basedir import get_xdg_config_home
+
+def _get_xdg_config_home():
+    if sys.platform == 'win32':
+        from win32com.shell import shell, shellcon
+        get_path = lambda name: shell.SHGetFolderPath(
+            0, getattr(shellcon, name), None, 0).encode('utf8')
+        path = get_path('CSIDL_LOCAL_APPDATA')
+    elif sys.platform == 'darwin':
+        user_home = os.path.expanduser('~')
+        path = os.path.join(user_home, 'Library', 'Preferences')
+    else:
+        user_home = os.path.expanduser('~')
+        path = os.path.join(user_home, '.config')
+    return path
 
 
 def get_path_prefix(standalone=False):
@@ -32,8 +46,6 @@ def get_path_prefix(standalone=False):
                        configuration storage.
     :type standalone: bool
     """
-    config_home = get_xdg_config_home()
     if standalone:
-        config_home = os.path.join(os.getcwd(), "config")
-
-    return config_home
+        return os.path.join(os.getcwd(), "config")
+    return _get_xdg_config_home()
index e383a7e..878e2fe 100644 (file)
@@ -19,11 +19,8 @@ Tests for get_path_prefix
 """
 import os
 import mock
-
-try:
-    import unittest2 as unittest
-except ImportError:
-    import unittest
+import pytest
+import sys
 
 from leap.common.config import get_path_prefix
 from leap.common.testing.basetest import BaseLeapTest
@@ -58,6 +55,21 @@ class GetPathPrefixTest(BaseLeapTest):
         path = get_path_prefix(standalone=False)
         self.assertNotEquals(path, standalone_path)
 
+homedir = os.environ.get('HOME')
+
 
-if __name__ == "__main__":
-    unittest.main(verbosity=2)
+@pytest.mark.parametrize(
+    "scenario", [
+        # (platform, path_parts, standalone),
+        ('linux', [homedir, '.config'], False),
+        ('darwin', [homedir, 'Library/Preferences'], False),
+        ('win32', [homedir, 'xyz'], False),
+        ('standalone', [os.getcwd(), 'config'], True)])
+def test_get_path_prefix(scenario, monkeypatch):
+    platform, path_parts, standalone = scenario
+    if platform == 'win32':
+        pytest.skip()  # TODO: find a way to add test for win32 platform
+    # set a custom temporary platform
+    monkeypatch.setattr(sys, 'platform', platform)
+    expected_prefix = os.path.join(*path_parts)
+    assert expected_prefix == get_path_prefix(standalone)