Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions appdirs.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
27 changes: 27 additions & 0 deletions test/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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)
Expand All @@ -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()