Skip to content

Paths

The following snippet help with fallback config logic to pick the best config file from a set of options.

Code

import os
from pathlib import Path


def default_config_dir():
    return Path("/etc")

def default_config_file():
    return default_config_dir() / "myapp.conf"

def default_user_config_dir():
    return Path(os.environ.get("XDG_CONFIG_HOME", "~/.config"))

def default_user_config_file():
    return default_user_config_dir() / "myapp.conf"

def default_user_data_dir():
    return Path(os.environ.get("XDG_DATA_HOME", "~/.local/share"))

def get_default_data_dir():
    return default_user_data_dir() / "myapp"

def get_config_file():
    env_config_file = os.environ.get("MYAPP_CONFIG", None)
    if env_config_file:
        return Path(env_config_file)

    config_file = default_config_file()
    if config_file.exists():
        return config_file

    user_config_file = default_user_config_file()
    return user_config_file