From 35e5e7623c260bd35cb924b65f21350145e12233 Mon Sep 17 00:00:00 2001 From: Ivan Alejandro Date: Wed, 28 Aug 2013 13:14:09 -0300 Subject: Use dirspec instead of plain xdg. Closes #3574. --- src/leap/common/config/__init__.py | 39 ++++++ src/leap/common/config/baseconfig.py | 5 +- src/leap/common/config/prefixers.py | 132 --------------------- .../common/config/tests/test_get_path_prefix.py | 63 ++++++++++ 4 files changed, 104 insertions(+), 135 deletions(-) delete mode 100644 src/leap/common/config/prefixers.py create mode 100644 src/leap/common/config/tests/test_get_path_prefix.py (limited to 'src') 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 . +""" +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 . - -""" -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 . +""" +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) -- cgit v1.2.3