diff options
| author | Tomás Touceda <chiiph@leap.se> | 2013-08-28 15:45:53 -0300 | 
|---|---|---|
| committer | Tomás Touceda <chiiph@leap.se> | 2013-08-28 15:45:53 -0300 | 
| commit | f6b4491f972124271639af80f52f4b6dd6c056ba (patch) | |
| tree | 722854d277f15f43dde882217452bd22999513ef | |
| parent | 518169758b3aec1beef1ae15bf08cb4906517f49 (diff) | |
| parent | 35e5e7623c260bd35cb924b65f21350145e12233 (diff) | |
Merge remote-tracking branch 'ivan/feature/3574_path-prefix-with-dirspec' into develop
| -rw-r--r-- | changes/feature-3574_use-dirspec-instead-of-plain-xdg | 1 | ||||
| -rw-r--r-- | pkg/requirements.pip | 2 | ||||
| -rw-r--r-- | src/leap/common/config/__init__.py | 39 | ||||
| -rw-r--r-- | src/leap/common/config/baseconfig.py | 5 | ||||
| -rw-r--r-- | src/leap/common/config/prefixers.py | 132 | ||||
| -rw-r--r-- | src/leap/common/config/tests/test_get_path_prefix.py | 63 | 
6 files changed, 106 insertions, 136 deletions
| 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 index 0000000..9bdc507 --- /dev/null +++ b/changes/feature-3574_use-dirspec-instead-of-plain-xdg @@ -0,0 +1 @@ +  o Use dirspec instead of plain xdg. Closes #3574. diff --git a/pkg/requirements.pip b/pkg/requirements.pip index 9617d92..c89fd19 100644 --- a/pkg/requirements.pip +++ b/pkg/requirements.pip @@ -1,5 +1,5 @@  jsonschema  #<=0.8 -- are we done with this conflict? -pyxdg +dirspec  protobuf>=2.4.1  protobuf.socketrpc  pyopenssl 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) | 
