Skip to main content

Typed settings based on attrs classes

Project description

pipeline status coverage report

Typed Settings

PoC for library for managing (typed) settings – for server processes as well as commandline programms.

Requirements

  • Default settings are defined by app and can be overridden by config files, environment variables and click options.

  • You define settings as attrs class with types, converters and validators.

  • Attributes are basic data types (bool, int, float, str), lists of basic types, or nested settings classes.

  • Settings can be loaded from multiple config files.

  • Config files are allowed to contain settings for multiple apps (like pyproject.toml)

  • Paths to config files have to be explicitly named. Most defaults are not useful in many cases and have to be changed anyways.

  • Additional paths for config files can be specified via an environment variable. As in PATH, multiple paths are separated by a :. The last file in the list has the highest priority.

  • Environment variables with a defined prefix override settings from config files. This can optionally be disabled.

  • Click options for some or all settings can be generated. They are passed to the cli function as a single object (instead of individually).

  • Settings must be explicitly loaded, either via typed_settings.load_settings() or via typed_settings.click_options().

  • Both functions allow you to customize config file paths, prefixes et cetera.

Example

import click

import typed_settings as ts


@ts.settings
class Host:
    name: str
    port: int = ts.option(converter=int)


@ts.settings(kw_only=True)
class Settings:
    url: str
    default: int = 3
    host: Host = ts.option(converter=lambda d: Host(**d))


settings = ts.load_settings(
    settings_cls=Settings, appname='example', config_files=['settings.toml']
)
print(settings)


@click.command()
@ts.click_options(Settings, 'example', ['settings.toml'])
def main(settings):
    print(settings)


if __name__ == '__main__':
    main()

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

typed-settings-0.5.tar.gz (16.8 kB view hashes)

Uploaded Source

Built Distribution

typed_settings-0.5-py3-none-any.whl (10.4 kB view hashes)

Uploaded Python 3

Supported by

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