diff --git a/appdirs.py b/appdirs.py index fcc26ad..ad2e29b 100644 --- a/appdirs.py +++ b/appdirs.py @@ -457,6 +457,76 @@ def user_log_dir(self): version=self.version) +#---- pathlib stuff + +def _pathlib_wrapper(func): + + try: + import functools + import pathlib + import inspect + signature = inspect.signature(func) + + def inner(*args, **kwargs): + ba = signature.bind_partial(*args, **kwargs) + ba.apply_defaults() + return pathlib.Path(func(*ba.args, **ba.kwargs)) + + inner.__signature__ = signature + inner.__doc__ = func.__doc__ + inner.__name__ = func.__name__.replace("dir", "path") + return inner + + except ImportError: + return func + + +site_config_path = _pathlib_wrapper(site_config_dir) +site_data_path = _pathlib_wrapper(site_data_dir) +user_cache_path = _pathlib_wrapper(user_cache_dir) +user_config_path = _pathlib_wrapper(user_config_dir) +user_data_path = _pathlib_wrapper(user_data_dir) +user_log_path = _pathlib_wrapper(user_log_dir) +user_state_path = _pathlib_wrapper(user_state_dir) + + +class AppPaths(AppDirs): + + @property + def user_data_dir(self): + return user_data_path(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_data_dir(self): + return site_data_path(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_config_dir(self): + return user_config_path(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_config_dir(self): + return site_config_path(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_cache_dir(self): + return user_cache_path(self.appname, self.appauthor, + version=self.version) + + @property + def user_state_dir(self): + return user_state_path(self.appname, self.appauthor, + version=self.version) + + @property + def user_log_dir(self): + return user_log_path(self.appname, self.appauthor, + version=self.version) + #---- internal support stuff def _get_win_folder_from_registry(csidl_name): diff --git a/test/test_api.py b/test/test_api.py index 8c89fb2..2737209 100644 --- a/test/test_api.py +++ b/test/test_api.py @@ -4,8 +4,14 @@ if sys.version_info[0] < 3: STRING_TYPE = basestring + PATH_TYPE = basestring +elif sys.version_info < (3, 4): + STRING_TYPE = str + PATH_TYPE = str else: + import pathlib STRING_TYPE = str + PATH_TYPE = pathlib.Path class Test_AppDir(unittest.TestCase): @@ -25,6 +31,18 @@ def test_helpers(self): self.assertIsInstance( appdirs.user_log_dir('MyApp', 'MyCompany'), STRING_TYPE) + def test_path_helpers(self): + self.assertIsInstance( + appdirs.user_data_path('MyApp', 'MyCompany'), PATH_TYPE) + self.assertIsInstance( + appdirs.site_data_path('MyApp', 'MyCompany'), PATH_TYPE) + self.assertIsInstance( + appdirs.user_cache_path('MyApp', 'MyCompany'), PATH_TYPE) + self.assertIsInstance( + appdirs.user_state_path('MyApp', 'MyCompany'), PATH_TYPE) + self.assertIsInstance( + appdirs.user_log_path('MyApp', 'MyCompany'), PATH_TYPE) + def test_dirs(self): dirs = appdirs.AppDirs('MyApp', 'MyCompany', version='1.0') self.assertIsInstance(dirs.user_data_dir, STRING_TYPE) @@ -33,5 +51,14 @@ def test_dirs(self): self.assertIsInstance(dirs.user_state_dir, STRING_TYPE) self.assertIsInstance(dirs.user_log_dir, STRING_TYPE) + def test_paths(self): + paths = appdirs.AppPaths('MyApp', 'MyCompany', version='1.0') + self.assertIsInstance(paths.user_data_dir, PATH_TYPE) + self.assertIsInstance(paths.site_data_dir, PATH_TYPE) + self.assertIsInstance(paths.user_cache_dir, PATH_TYPE) + self.assertIsInstance(paths.user_state_dir, PATH_TYPE) + self.assertIsInstance(paths.user_log_dir, PATH_TYPE) + + if __name__ == "__main__": unittest.main()