Skip to content
Open
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
85 changes: 60 additions & 25 deletions appdirs.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@
import sys
import os

try:
import pwd
except ImportError:
pwd = None

PY3 = sys.version_info[0] == 3

if PY3:
Expand All @@ -41,7 +46,6 @@
system = sys.platform



def user_data_dir(appname=None, appauthor=None, version=None, roaming=False):
r"""Return full path to the user-specific data dir for this application.

Expand Down Expand Up @@ -84,14 +88,22 @@ def user_data_dir(appname=None, appauthor=None, version=None, roaming=False):
path = os.path.join(path, appauthor, appname)
else:
path = os.path.join(path, appname)
elif system == 'darwin':
path = os.path.expanduser('~/Library/Application Support/')
if appname:
path = os.path.join(path, appname)
else:
path = os.getenv('XDG_DATA_HOME', os.path.expanduser("~/.local/share"))
if appname:
path = os.path.join(path, appname)
if system == 'darwin':
path = os.path.expanduser(
'~{0}/Library/Application Support/'.format(_effective_user())
)
if appname:
path = os.path.join(path, appname)
else:
path = os.getenv(
'XDG_DATA_HOME',
os.path.expanduser(
'~{0}/.local/share'.format(_effective_user())
)
)
if appname:
path = os.path.join(path, appname)
if appname and version:
path = os.path.join(path, version)
return path
Expand Down Expand Up @@ -194,14 +206,20 @@ def user_config_dir(appname=None, appauthor=None, version=None, roaming=False):
"""
if system == "win32":
path = user_data_dir(appname, appauthor, None, roaming)
elif system == 'darwin':
path = os.path.expanduser('~/Library/Preferences/')
if appname:
path = os.path.join(path, appname)
else:
path = os.getenv('XDG_CONFIG_HOME', os.path.expanduser("~/.config"))
if appname:
path = os.path.join(path, appname)
if system == 'darwin':
path = os.path.expanduser(
'~{0}/Library/Preferences/'.format(_effective_user())
)
if appname:
path = os.path.join(path, appname)
else:
path = os.getenv(
'XDG_CONFIG_HOME',
os.path.expanduser('~{0}/.config'.format(_effective_user()))
)
if appname:
path = os.path.join(path, appname)
if appname and version:
path = os.path.join(path, version)
return path
Expand Down Expand Up @@ -306,14 +324,20 @@ def user_cache_dir(appname=None, appauthor=None, version=None, opinion=True):
path = os.path.join(path, appname)
if opinion:
path = os.path.join(path, "Cache")
elif system == 'darwin':
path = os.path.expanduser('~/Library/Caches')
if appname:
path = os.path.join(path, appname)
else:
path = os.getenv('XDG_CACHE_HOME', os.path.expanduser('~/.cache'))
if appname:
path = os.path.join(path, appname)
if system == 'darwin':
path = os.path.expanduser(
'~{0}/Library/Caches'.format(_effective_user())
)
if appname:
path = os.path.join(path, appname)
else:
path = os.getenv(
'XDG_CACHE_HOME',
os.path.expanduser('~{0}/.cache'.format(_effective_user()))
)
if appname:
path = os.path.join(path, appname)
if appname and version:
path = os.path.join(path, version)
return path
Expand Down Expand Up @@ -353,7 +377,10 @@ def user_state_dir(appname=None, appauthor=None, version=None, roaming=False):
if system in ["win32", "darwin"]:
path = user_data_dir(appname, appauthor, None, roaming)
else:
path = os.getenv('XDG_STATE_HOME', os.path.expanduser("~/.local/state"))
path = os.getenv(
'XDG_STATE_HOME',
os.path.expanduser('~{0}/.local/state'.format(_effective_user()))
)
if appname:
path = os.path.join(path, appname)
if appname and version:
Expand Down Expand Up @@ -395,8 +422,9 @@ def user_log_dir(appname=None, appauthor=None, version=None, opinion=True):
"""
if system == "darwin":
path = os.path.join(
os.path.expanduser('~/Library/Logs'),
appname)
os.path.expanduser('~{0}/Library/Logs'.format(_effective_user())),
appname
)
elif system == "win32":
path = user_data_dir(appname, appauthor, version)
version = False
Expand Down Expand Up @@ -460,6 +488,13 @@ def user_log_dir(self):

#---- internal support stuff

def _effective_user():
try:
return pwd.getpwuid(os.geteuid()).pw_name
except Exception:
return ''


def _get_win_folder_from_registry(csidl_name):
"""This is a fallback technique at best. I'm not sure if using the
registry for this guarantees us the correct answer for all CSIDL_*
Expand Down