Skip to main content

fuckPythonConfig

License: MIT Python >= 3.11 Ruff

English | 简体中文

A zero-boilerplate config loader for Python. It auto-discovers a TOML config file and a .env file located next to your running script, then resolves placeholders like ${VAR} and ${VAR:default} recursively across dicts/lists. It uses python-dotenv under the hood for robust .env behavior.

Goal: in small-to-medium scripts/services, get a ready-to-use config with one call to load_config(), without writing path plumbing and env-var glue code.

Features

  • Auto discovery: by default, finds the first .toml and .env next to the caller script
  • Placeholder resolution:
    • ${VAR} uses the environment variable
    • ${VAR:default} uses default when the variable is missing
    • Recursively resolves across dicts/lists
  • .env compatibility: powered by python-dotenv (merge/override/interpolate, etc.)
  • Clear errors:
    • FileNotFoundError (custom, more friendly info)
    • TOMLReadError
    • EnvVarNotFoundError (when no default provided)
  • Minimal deps: only python-dotenv (plus stdlib tomllib)

Installation

Requires: Python >= 3.11

  • pip
pip install fuckpythonconfig
  • uv (optional)
uv add fuckpythonconfig
  • from source
pip install git+https://github.com/JGG0sbp66/fuckPythonConfig.git@dev

Quick Start

Project layout (example):

your-project/
  app.py           # your script calling load_config()
  config.toml      # config file
  .env             # environment variables (dev)

config.toml:

[database]
host = "127.0.0.1"
port = 5432
username = "${DB_USER:postgres}"
password = "${DB_PASS}"  # will raise EnvVarNotFoundError if missing

.env:

DB_USER=local_user
DB_PASS=secret123

app.py:

from fuckpythonconfig import load_config

cfg = load_config()  # auto-discovers .toml and .env next to app.py
print(cfg["database"]["username"])  # => "local_user"

Explicit parameters (optional):

from fuckpythonconfig import load_config

cfg = load_config(
    file_path="./config.toml",   # specify TOML path
    dotenv_path="./.env",        # specify .env path
    verbose=True,                 # passthrough to python-dotenv
    override=False,               # override existing env vars
    interpolate=True,             # allow .env interpolation
)

Placeholder rules

  • Syntax:
    • ${VAR} → use env var VAR
    • ${VAR:default} → use default literal if VAR is missing
  • Scope: recursively applied to all string values in dict/list
  • Match: only replaced when a value is exactly a placeholder
    • i.e. "${VAR}" is replaced; "prefix ${VAR}" is not (current limitation)
  • Types:
    • replaced value is a string (from env/default)
    • non-placeholder TOML types remain unchanged (int/bool/array, etc.)
  • Missing variable: raises EnvVarNotFoundError if no default provided

API

load_config(

file_path: str | None = None, dotenv_path: str | None = None, stream: IO[str] | None = None, verbose: bool = False, override: bool = False, interpolate: bool = True, encoding: str | None = "utf-8", ) -> dict

Purpose:

  • Read TOML → load .env → resolve placeholders → return a merged dict

Details:

  • When not specified, it searches the caller script directory for the first .toml and .env
  • .env loading is handled by python-dotenv; parameters are passed through

Exceptions:

  • FileNotFoundError (missing .toml/.env/dir)
  • TOMLReadError (syntax or read failure)
  • EnvVarNotFoundError (placeholder var missing without default)

Limitations

  • Only replaces values that are exactly a placeholder (no partial replacement in long strings)
  • If multiple .toml/.env files exist, the first one enumerated by the filesystem is used
  • Python >= 3.11 (due to stdlib tomllib)

Development

Ruff is used for linting/formatting.

uv sync

Contributions are welcome (placeholder improvements, type casting, cross-file refs, etc.).

Acknowledgments

  • python-dotenv for the robust .env handling

License

MIT License. See LICENSE for details.

Metadata

Release files for fuckpythonconfig 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fuckpythonconfig 1.0.1
File Size Uploaded
fuckpythonconfig-1.0.1.tar.gz 8.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fuckpythonconfig 1.0.1
File Interpreter ABI Platform
fuckpythonconfig-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 16.4 kB

Release files / fuckpythonconfig-1.0.1.tar.gz

Download URL fuckpythonconfig-1.0.1.tar.gz
Size 8.9 kB
Tags Source
SHA-256 checksum
How to use checksums
f43ba716de96dcfb84f2d93a1bdf3b908d26e26aa0650fa2beec1b0e30a19b2d
BLAKE2b-256 checksum
How to use checksums
6820e62af32799fd957bdac5d7675891d28a6d066f4e188c74b6db471ee087bb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.1

Release files / fuckpythonconfig-1.0.1-py3-none-any.whl

Download URL fuckpythonconfig-1.0.1-py3-none-any.whl
Size 7.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
69fb7ecffb04f3f96ae3a11a1e7a236c7df3f3ee9344410c74b8c87288357027
BLAKE2b-256 checksum
How to use checksums
2b5a88ce1bf75400bae27d2ba349a124a4983af67dc1ec0e50e318bb85d3d82c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.1

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page