From 2eb3cc455e9c705fabfaa7670720782052aac33d Mon Sep 17 00:00:00 2001 From: noiioiu Date: Sun, 17 Nov 2024 07:08:10 -0600 Subject: [PATCH 1/7] Append XDG_CONFIG_HOME to list before .config if set and nonempty --- confuse/util.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/confuse/util.py b/confuse/util.py index c27e161..623b828 100644 --- a/confuse/util.py +++ b/confuse/util.py @@ -131,11 +131,9 @@ def find_package_path(name): def xdg_config_dirs(): """Returns a list of paths taken from the XDG_CONFIG_DIRS - and XDG_CONFIG_HOME environment varibables if they exist + environment variable if it exists """ paths = [] - if 'XDG_CONFIG_HOME' in os.environ: - paths.append(os.environ['XDG_CONFIG_HOME']) if 'XDG_CONFIG_DIRS' in os.environ: paths.extend(os.environ['XDG_CONFIG_DIRS'].split(':')) else: @@ -155,6 +153,8 @@ def config_dirs(): paths = [] if platform.system() == 'Darwin': + if 'XDG_CONFIG_HOME' in os.environ and os.environ['XDG_CONFIG_HOME'] != '': + paths.append(os.environ['XDG_CONFIG_HOME']) paths.append(UNIX_DIR_FALLBACK) paths.append(MAC_DIR) paths.extend(xdg_config_dirs()) @@ -166,6 +166,8 @@ def config_dirs(): else: # Assume Unix. + if 'XDG_CONFIG_HOME' in os.environ and os.environ['XDG_CONFIG_HOME'] != '': + paths.append(os.environ['XDG_CONFIG_HOME']) paths.append(UNIX_DIR_FALLBACK) paths.extend(xdg_config_dirs()) From 349e28f4d7f19eca622875d50956c447355ca6e5 Mon Sep 17 00:00:00 2001 From: noiioiu Date: Sun, 17 Nov 2024 07:34:48 -0600 Subject: [PATCH 2/7] Ignore XDG_CONFIG_HOME if not an absolute path --- confuse/util.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/confuse/util.py b/confuse/util.py index 623b828..31e28a5 100644 --- a/confuse/util.py +++ b/confuse/util.py @@ -153,7 +153,7 @@ def config_dirs(): paths = [] if platform.system() == 'Darwin': - if 'XDG_CONFIG_HOME' in os.environ and os.environ['XDG_CONFIG_HOME'] != '': + if 'XDG_CONFIG_HOME' in os.environ and os.path.isabs(os.environ['XDG_CONFIG_HOME']): paths.append(os.environ['XDG_CONFIG_HOME']) paths.append(UNIX_DIR_FALLBACK) paths.append(MAC_DIR) @@ -166,7 +166,7 @@ def config_dirs(): else: # Assume Unix. - if 'XDG_CONFIG_HOME' in os.environ and os.environ['XDG_CONFIG_HOME'] != '': + if 'XDG_CONFIG_HOME' in os.environ and os.path.isabs(os.environ['XDG_CONFIG_HOME']): paths.append(os.environ['XDG_CONFIG_HOME']) paths.append(UNIX_DIR_FALLBACK) paths.extend(xdg_config_dirs()) From 9beffe656250a3fd144ad94cde22b8de67129188 Mon Sep 17 00:00:00 2001 From: noiioiu Date: Sun, 17 Nov 2024 07:43:17 -0600 Subject: [PATCH 3/7] Use xdg_config_home() --- confuse/util.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/confuse/util.py b/confuse/util.py index 31e28a5..8331c76 100644 --- a/confuse/util.py +++ b/confuse/util.py @@ -129,6 +129,16 @@ def find_package_path(name): return os.path.dirname(os.path.abspath(filepath)) +def xdg_config_home(): + """Returns a list containing the value of XDG_CONFIG_HOME + environment variable if it exists and is an absolute path + """ + if 'XDG_CONFIG_HOME' in os.environ and os.path.isabs(os.environ['XDG_CONFIG_HOME']): + return [os.environ['XDG_CONFIG_HOME']] + else: + return [] + + def xdg_config_dirs(): """Returns a list of paths taken from the XDG_CONFIG_DIRS environment variable if it exists @@ -153,8 +163,7 @@ def config_dirs(): paths = [] if platform.system() == 'Darwin': - if 'XDG_CONFIG_HOME' in os.environ and os.path.isabs(os.environ['XDG_CONFIG_HOME']): - paths.append(os.environ['XDG_CONFIG_HOME']) + paths.extend(xdg_config_home()) paths.append(UNIX_DIR_FALLBACK) paths.append(MAC_DIR) paths.extend(xdg_config_dirs()) @@ -166,8 +175,7 @@ def config_dirs(): else: # Assume Unix. - if 'XDG_CONFIG_HOME' in os.environ and os.path.isabs(os.environ['XDG_CONFIG_HOME']): - paths.append(os.environ['XDG_CONFIG_HOME']) + paths.extend(xdg_config_home()) paths.append(UNIX_DIR_FALLBACK) paths.extend(xdg_config_dirs()) From 26419cc62b36f38fd75bf51bfd67f3b4b7686fba Mon Sep 17 00:00:00 2001 From: noiioiu Date: Sun, 17 Nov 2024 09:40:30 -0600 Subject: [PATCH 4/7] Ignore UNIX_DIR_FALLBACK if XDG_CONFIG_HOME is an absolute path --- confuse/util.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/confuse/util.py b/confuse/util.py index 8331c76..50e727a 100644 --- a/confuse/util.py +++ b/confuse/util.py @@ -130,13 +130,14 @@ def find_package_path(name): def xdg_config_home(): - """Returns a list containing the value of XDG_CONFIG_HOME - environment variable if it exists and is an absolute path + """Returns the value of XDG_CONFIG_HOME environment + variable if it exists and is an absolute path, + and UNIX_DIR_FALLBACK otherwise """ if 'XDG_CONFIG_HOME' in os.environ and os.path.isabs(os.environ['XDG_CONFIG_HOME']): - return [os.environ['XDG_CONFIG_HOME']] + return os.environ['XDG_CONFIG_HOME'] else: - return [] + return UNIX_DIR_FALLBACK def xdg_config_dirs(): @@ -163,8 +164,7 @@ def config_dirs(): paths = [] if platform.system() == 'Darwin': - paths.extend(xdg_config_home()) - paths.append(UNIX_DIR_FALLBACK) + paths.append(xdg_config_home()) paths.append(MAC_DIR) paths.extend(xdg_config_dirs()) @@ -175,8 +175,7 @@ def config_dirs(): else: # Assume Unix. - paths.extend(xdg_config_home()) - paths.append(UNIX_DIR_FALLBACK) + paths.append(xdg_config_home()) paths.extend(xdg_config_dirs()) # Expand and deduplicate paths. From 2ea02061cdbc440c47f4afe93a655556350da91c Mon Sep 17 00:00:00 2001 From: noiioiu Date: Sun, 17 Nov 2024 09:58:21 -0600 Subject: [PATCH 5/7] Use getenv --- confuse/util.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/confuse/util.py b/confuse/util.py index 50e727a..17c7fc7 100644 --- a/confuse/util.py +++ b/confuse/util.py @@ -131,11 +131,12 @@ def find_package_path(name): def xdg_config_home(): """Returns the value of XDG_CONFIG_HOME environment - variable if it exists and is an absolute path, - and UNIX_DIR_FALLBACK otherwise + variable if it exists and is an absolute path, and + UNIX_DIR_FALLBACK otherwise """ - if 'XDG_CONFIG_HOME' in os.environ and os.path.isabs(os.environ['XDG_CONFIG_HOME']): - return os.environ['XDG_CONFIG_HOME'] + config_dir = os.getenv('XDG_CONFIG_HOME', UNIX_DIR_FALLBACK) + if os.path.isabs(config_dir): + return config_dir else: return UNIX_DIR_FALLBACK From 61126746b0d5bd2f7eb46758e02b7c92a2e30d89 Mon Sep 17 00:00:00 2001 From: noiioiu Date: Sun, 17 Nov 2024 15:56:05 -0600 Subject: [PATCH 6/7] Use UNIX_DIR_FALLBACK only if XDG_CONFIG_HOME is unset or empty Ignore all non-absolute paths found in XDG_CONFIG_HOME or XDG_CONFIG_DIRS --- confuse/util.py | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/confuse/util.py b/confuse/util.py index 17c7fc7..197bcd8 100644 --- a/confuse/util.py +++ b/confuse/util.py @@ -130,24 +130,26 @@ def find_package_path(name): def xdg_config_home(): - """Returns the value of XDG_CONFIG_HOME environment - variable if it exists and is an absolute path, and - UNIX_DIR_FALLBACK otherwise + """Returns a list that contain UNIX_DIR_FALLBACK if + the XDG_CONFIG_HOME environment variable is either unset + or an empty string, the value of XDG_CONFIG_HOME if it + is an absolute path, and is empty otherwise """ - config_dir = os.getenv('XDG_CONFIG_HOME', UNIX_DIR_FALLBACK) - if os.path.isabs(config_dir): - return config_dir - else: - return UNIX_DIR_FALLBACK - + config_dir = os.path.expanduser(os.getenv('XDG_CONFIG_HOME', UNIX_DIR_FALLBACK)) + if config_dir == '': + return [UNIX_DIR_FALLBACK] + return [config_dir] if os.path.isabs(config_dir) else [] def xdg_config_dirs(): """Returns a list of paths taken from the XDG_CONFIG_DIRS - environment variable if it exists + environment variable if it exists and is nonempty """ paths = [] - if 'XDG_CONFIG_DIRS' in os.environ: - paths.extend(os.environ['XDG_CONFIG_DIRS'].split(':')) + if 'XDG_CONFIG_DIRS' in os.environ and os.environ['XDG_CONFIG_DIRS'] != '': + config_path_list = [os.path.expanduser(path) for path in os.environ['XDG_CONFIG_DIRS'].split(':')] + # Filter out paths that are not absolute + config_abs_path_list = [path for path in config_path_list if os.path.isabs(path)] + paths.extend(config_abs_path_list) else: paths.append('/etc/xdg') paths.append('/etc') @@ -165,7 +167,7 @@ def config_dirs(): paths = [] if platform.system() == 'Darwin': - paths.append(xdg_config_home()) + paths.extend(xdg_config_home()) paths.append(MAC_DIR) paths.extend(xdg_config_dirs()) @@ -176,7 +178,7 @@ def config_dirs(): else: # Assume Unix. - paths.append(xdg_config_home()) + paths.extend(xdg_config_home()) paths.extend(xdg_config_dirs()) # Expand and deduplicate paths. From 68e7ff905b06712582945ea1cc31e36e4d79c121 Mon Sep 17 00:00:00 2001 From: noiioiu Date: Sun, 17 Nov 2024 16:09:42 -0600 Subject: [PATCH 7/7] Move filtering to config_dirs() --- confuse/util.py | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/confuse/util.py b/confuse/util.py index 197bcd8..7c74374 100644 --- a/confuse/util.py +++ b/confuse/util.py @@ -130,15 +130,12 @@ def find_package_path(name): def xdg_config_home(): - """Returns a list that contain UNIX_DIR_FALLBACK if - the XDG_CONFIG_HOME environment variable is either unset - or an empty string, the value of XDG_CONFIG_HOME if it - is an absolute path, and is empty otherwise + """Return the value of the XDG_CONFIG_HOME + environment variable if it is set and nonempty, + and UNIX_DIR_FALLBACK otherwise """ - config_dir = os.path.expanduser(os.getenv('XDG_CONFIG_HOME', UNIX_DIR_FALLBACK)) - if config_dir == '': - return [UNIX_DIR_FALLBACK] - return [config_dir] if os.path.isabs(config_dir) else [] + config_path = os.getenv('XDG_CONFIG_HOME', UNIX_DIR_FALLBACK) + return config_path if config_path != '' else UNIX_DIR_FALLBACK def xdg_config_dirs(): """Returns a list of paths taken from the XDG_CONFIG_DIRS @@ -146,10 +143,7 @@ def xdg_config_dirs(): """ paths = [] if 'XDG_CONFIG_DIRS' in os.environ and os.environ['XDG_CONFIG_DIRS'] != '': - config_path_list = [os.path.expanduser(path) for path in os.environ['XDG_CONFIG_DIRS'].split(':')] - # Filter out paths that are not absolute - config_abs_path_list = [path for path in config_path_list if os.path.isabs(path)] - paths.extend(config_abs_path_list) + paths.extend(os.environ['XDG_CONFIG_DIRS'].split(':')) else: paths.append('/etc/xdg') paths.append('/etc') @@ -167,7 +161,7 @@ def config_dirs(): paths = [] if platform.system() == 'Darwin': - paths.extend(xdg_config_home()) + paths.append(xdg_config_home()) paths.append(MAC_DIR) paths.extend(xdg_config_dirs()) @@ -178,13 +172,13 @@ def config_dirs(): else: # Assume Unix. - paths.extend(xdg_config_home()) + paths.append(xdg_config_home()) paths.extend(xdg_config_dirs()) - # Expand and deduplicate paths. + # Expand and paths and remove duplicates and relative paths. out = [] for path in paths: - path = os.path.abspath(os.path.expanduser(path)) - if path not in out: + path = os.path.expanduser(path) + if path not in out and os.path.isabs(path): out.append(path) return out