loading config from xdg config file

This commit is contained in:
amnesia 2025-07-26 11:56:40 +02:00
parent 9c35c9acdc
commit 6f2a104c4a
2 changed files with 74 additions and 1 deletions

View File

@ -1,7 +1,7 @@
[project] [project]
description = "Mommy's here to support you when running python (in a virtual enviroment)~ ❤️" description = "Mommy's here to support you when running python (in a virtual enviroment)~ ❤️"
name = "python_mommy_venv" name = "python_mommy_venv"
dependencies = [] dependencies = ["toml"]
authors = [] authors = []
readme = "README.md" readme = "README.md"
requires-python = ">=3.9" requires-python = ">=3.9"

View File

@ -1,7 +1,11 @@
from typing import Optional, List from typing import Optional, List
import os import os
from os.path import expandvars
from sys import platform
import logging import logging
from pathlib import Path from pathlib import Path
import configparser
import toml
from .static import RESPONSES from .static import RESPONSES
@ -70,3 +74,72 @@ def load_config(data: Optional[dict] = None):
CONFIG = data CONFIG = data
load_config() load_config()
def _get_xdg_config_dir() -> Path:
res = os.environ.get("XDG_CONFIG_HOME")
if res is not None:
return Path(res)
xdg_user_dirs_file = Path(os.environ.get("XDG_CONFIG_HOME") or Path(Path.home(), ".config", "user-dirs.dirs"))
xdg_user_dirs_default_file = Path("/etc/xdg/user-dirs.defaults")
def get_dir_from_xdg_file(xdg_file_path: Path, key_a: str) -> Optional[str]:
if not xdg_file_path.exists():
logger.info("config file not found in %s", str(xdg_file_path))
return
with xdg_file_path.open("r") as f:
for line in f:
if line.startswith("#"):
continue
parts = line.split("=")
if len(parts) > 2:
continue
key_b = parts[0].lower().strip()
value = parts[1].strip().split("#")[0]
if key_a.lower() == key_b:
return value
logger.info("key %s not found in %s", key_a, str(xdg_file_path))
res = get_dir_from_xdg_file(xdg_user_dirs_file, "XDG_CONFIG_HOME")
if res is not None:
return Path(res)
res = get_dir_from_xdg_file(xdg_user_dirs_default_file, "CONFIG")
if res is not None:
return Path(Path.home(), res)
res = get_dir_from_xdg_file(xdg_user_dirs_default_file, "XDG_CONFIG_HOME")
if res is not None:
return Path(Path.home(), res)
default = Path(Path.home(), ".config")
logging.info("falling back to %s", default)
return default
_CONFIG_DIRECTORY = _get_xdg_config_dir() / "mommy"
CONFIG_FILES = [
_CONFIG_DIRECTORY / "python-mommy.toml",
_CONFIG_DIRECTORY / "mommy.toml",
]
def load_config_file(config_file: Path) -> bool:
if not config_file.exists():
return False
with config_file.open("r") as f:
data = toml.load(f)
load_config(data=data)
return True
for c in CONFIG_FILES:
if load_config_file(c):
break