Skip to main content

Yet Another Python Configuration

Project description

Yapconf

https://img.shields.io/pypi/v/yapconf.svg https://img.shields.io/travis/loganasherjones/yapconf.svg https://codecov.io/gh/loganasherjones/yapconf/branch/master/graph/badge.svg Documentation Status Updates

Yet Another Python Configuration. A simple way to manage configurations for python applications.

Yapconf allows you to easily manage your python application’s configuration. It handles everything involving your application’s configuration. Often times exposing your configuration in sensible ways can be difficult. You have to consider loading order, and lots of boilerplate code to update your configuration correctly. Now what about CLI support? Migrating old configs to the new config? Yapconf can help you.

Features

Yapconf helps manage your python application’s configuration

  • JSON/YAML config file support

  • Etcd config support

  • Kubernetes ConfigMap support

  • Argparse integration

  • Environment Loading

  • Configuration watching

  • Migrate old configurations to new configurations

  • Generate documentation for your configuration

Quick Start

To install Yapconf, run this command in your terminal:

$ pip install yapconf

Then you can use Yapconf yourself!

Load your first Config

from yapconf import YapconfSpec

# First define a specification
my_spec = YapconfSpec({"foo": {"type": "str", "default": "bar"}}, env_prefix='MY_APP_')

# Now add your sources (order does not matter)
my_spec.add_source('environment', 'environment')
my_spec.add_source('config.yaml', 'yaml', filename='/path/to/config.yaml')

# Then load the configuration in whatever order you want!
# load_config will automatically look for the 'foo' value in
# '/path/to/config.yml', then the environment, finally
# falling back to the default if it was not found elsewhere
config = my_spec.load_config('config.yaml', 'environment')

print(config.foo)
print(config['foo'])

Add CLI arguments based on your configuration

import argparse

parser = argparse.ArgumentParser()

# This will add --foo as an argument to your python program
my_spec.add_arguments(parser)

cli_args = vars(parser.parse_args(sys.argv[1:]))

# Now you can load these via load_config:
config = my_spec.load_config(cli_args, 'config.yaml', 'environment')

Watch your config for changes

def my_handler(old_config, new_config):
    print("TODO: Something interesting goes here.")

my_spec.spawn_watcher('config.yaml', target=my_handler)

Generate documentation for your config

# Show me some sweet Markdown documentation
my_spec(spec.generate_documentation())

# Or write it to a file
spec.generate_documentation(output_file_name='configuration_docs.md')

For more detailed information and better walkthroughs, checkout the documentation!

Documentation

Documentation is available at https://yapconf.readthedocs.io

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

History

0.3.0 TBD

  • Fixed an issue where utf-8 migrations would break (#46)

  • Added support for etcd (#47)

  • Added support for kubernetes (#47)

  • Added support for fallbacks for config values (#45)

  • Added the ability to generate documentation for your configuration (#63)

  • Added config watching capabilities (#36)

0.2.4 (2018-05-21)

  • Flattened configs before loading (#54)

  • Fixed bug where the fq_name was not correctly set for complex objects

  • Added dump_kwargs to migrate_config (#53)

  • Better error message when validation fails (#55)

  • Made all argparse items optional (#42)

  • Added support for long_description on config items (#44)

  • Added support for validator on config items (#43)

0.2.3 (2018-04-03)

  • Fixed Python2 unicode error (#41)

0.2.1 (2018-03-11) 0.2.2 (2018-03-28) —————— * Fixed Python2 compatibility error (#35)

0.2.1 (2018-03-11)

  • Added item to YapconfItemNotFound (#21)

  • Removed pytest-runner from setup_requires (#22)

0.2.0 (2018-03-11)

  • Added auto kebab-case for CLI arguments (#7)

  • Added the flag to apply environment prefixes (#11)

  • Added choices to item specification (#14)

  • Added alt_env_names to item specification (#13)

0.1.1 (2018-02-08)

  • Fixed bug where None was a respected value.

0.1.0 (2018-02-01)

  • First release on PyPI.

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

yapconf-0.3.0.tar.gz (67.1 kB view details)

Uploaded Source

Built Distribution

yapconf-0.3.0-py2.py3-none-any.whl (29.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file yapconf-0.3.0.tar.gz.

File metadata

  • Download URL: yapconf-0.3.0.tar.gz
  • Upload date:
  • Size: 67.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for yapconf-0.3.0.tar.gz
Algorithm Hash digest
SHA256 a481097a227ce9408a02ad1f9d0f71811c21857434b6b10b9c53ad0ebf824cd9
MD5 7c088811c6f4d873810817ad5c6481c4
BLAKE2b-256 7c71bdf60435379027291410a03dced5d0f39bf02daf3967278d4b83da886db4

See more details on using hashes here.

File details

Details for the file yapconf-0.3.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for yapconf-0.3.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 9d6a41eb3e1bf62dcc7d3248bb662e5f944db14a57236c7375caab9cd5f1b496
MD5 34d4e5511a37fb84967ba05d60fbf40f
BLAKE2b-256 5588ecbbcb95bdf02f6cd1a800ef29eb6362f1cbdbeedbd7fb0ca61c577234f2

See more details on using hashes here.

Supported by

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