Skip to main content

Config starter for my local projects

Project description

yi-config-starter

A lightweight YAML configuration loader with automatic config discovery, placeholder substitution, and a thread-safe singleton interface.

This library is intended to centralize configuration loading logic while keeping application code clean and portable across environments.


Installation

pip install yi-config-starter

Quick Start

from yi_config_starter import ApplicationConfiguration

cfg = ApplicationConfiguration.get_instance()
config = cfg.get_config()

db_host = cfg.get_config_value("db.datasource.config.host")
print(db_host)

You may also initialize it explicitly (still resolves to a singleton internally):

from yi_config_starter import ApplicationConfiguration
cfg = ApplicationConfiguration(
    filename="config.yml",
    env_var="MY_APP_CONFIG",
    app_name="my-app",
    # path="/absolute/or/~/path/to/config.yml",
    # extra_placeholders={"PROJECT_ROOT": "/some/path"},
)

Configuration File Discovery

By default, the loader searches for config.yml in the following order:

  1. Explicit path passed to the constructor (path=...)

  2. Path provided via environment variable

  3. Current working directory, then parent directories (walking upward)

  4. User configuration directory

    • Windows: %APPDATA%\<app_name>\config.yml
    • Linux/macOS: ~/.config/<app_name>/config.yml
  5. Entries on sys.path (recursive search)

If no configuration file is found, a FileNotFoundError is raised.


Placeholder Substitution

Before parsing YAML, placeholders in the configuration file are substituted.

Built-in Placeholders

Placeholder Description
{{HOME}} User home directory
{{separator}} OS path separator (/ or \)
{{APPDATA}} Windows %APPDATA% or fallback to ~/.config
{{XDG_CONFIG}} $XDG_CONFIG_HOME or ~/.config
{{ENV:VAR_NAME}} Value of environment variable VAR_NAME

Custom placeholders may be supplied via extra_placeholders.

Example

paths:
  data_dir: "{{HOME}}{{separator}}data"
  cache_dir: "{{XDG_CONFIG}}{{separator}}my-app{{separator}}cache"
  api_key: "{{ENV:MY_API_KEY}}"

API Reference

ApplicationConfiguration.get_instance(...)

Returns the singleton configuration instance (thread-safe).


cfg.get_config() -> dict

Returns the entire configuration as a dictionary.


cfg.get_config_value("a.b.c")

Returns a nested configuration value using dot-separated keys.


ApplicationConfiguration.get_value_from_config(config: dict, key: str)

Static helper for retrieving nested values from an arbitrary dictionary.


Versioning

The package version is resolved dynamically from:

import yi_config_starter
yi_config_starter.__version__

Defined in:

/yi_config_starter/__init__.py

License

MIT License — see the LICENSE file.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yi_config_starter-0.2.0.tar.gz (6.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yi_config_starter-0.2.0-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

Details for the file yi_config_starter-0.2.0.tar.gz.

File metadata

  • Download URL: yi_config_starter-0.2.0.tar.gz
  • Upload date:
  • Size: 6.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for yi_config_starter-0.2.0.tar.gz
Algorithm Hash digest
SHA256 5d1e5121ee4ff8c73df211cb74a2f8fa980b3959c3aaf5079c104f06ef7cfc40
MD5 4e6e7995586a0ca7941c2fb3cfb08b56
BLAKE2b-256 9107964a786253afc9d02cee36be01c8b6e7211bd7842658669b33536a5c2f37

See more details on using hashes here.

File details

Details for the file yi_config_starter-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for yi_config_starter-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3c5b27269c13f70b311c14f76261a6070e74fee4070d7192b82dd99541523036
MD5 7ba360b2898c333772100bb8f3888041
BLAKE2b-256 e2d04f2dbdb13079b0fa05e46ee73558a14ff1de749d7d5566ad5860cf931d6d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page