Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

Yet another configuration library

Project description

# yaconf

yet another Python configuration library

## Features

No frills, no fuss:

* Python 3.6+ and no external dependencies.
* Single file implementation: Import the package or just copy `yaconf.py` into your project.
* Use any configuration source: any function that returns a `dict` will do.
* Reads JSON files by default, but `configparser` or any other parser can be dropped in with a keyword argument.
* Hierarchical configuration: Look for configuration keys in one config source after another, e.g.,
- first check `.myappconf` file,
- then `~/.config/myapp/.myappconf`,
- finally fall back on defaults.
* Sane defaults for config file paths:
- `~/.config/myapp/.myappconf` on Linux and MacOS
- `%LOCALAPPDATA%\myapp\.myappconf` on Windows
* Optionally register a modifier function to arbitrarily change values after loading (e.g., change datatypes, check consistency, etc).

## Examples

### Basic setup

```python
import yaconf

conf = yaconf.get_file_reader('myapp')
conf.load()

# reading from .myappconf if available, then ~/.config/myapp/.myappconf
conf['ready to go']
conf.get('ready to go', default='fallback')
```

### Add more configuration sources

```python
def get_default_config():
return {'i': 123, 'b': 'default string'}

# Add this configuration with lowest priority
conf.loaders.append(get_default_config)

def get_top_priority_config():
return {'b': 'other string'}

# And this one with highest priority
conf.loaders.push(get_top_priority_config)

# To include the new configuration source
conf.load()
assert conf['i'] == 123
assert conf['b'] == 'other string'

```

### The ConfigReader is a Mapping

```python
assert dict(conf) == {'i': 123, 'b': 'other string'}
```


### Add a modify function

```python
def modify(d):
d['i'] += 3
del d['b']
d['x'] = 'new'

conf.modify = modify
conf.load()

assert dict(conf) == {'i': 126, 'x': 'new'}
```

## License

Free software: MIT license

## Credits

This package was created with [Cookiecutter][1] and the [`audreyr/cookiecutter-pypackage`][2] project template.

[1]: https://github.com/audreyr/cookiecutter
[2]: https://github.com/audreyr/cookiecutter-pypackage


=======
History
=======


0.2.0 (2019-04-10)
------------------

* Allow for a modify function to be added to ConfigReader.
* Remove the levels property on ConfigReader.
* Make ConfigReader follow the Mapping protocol.
* Rename Decoder -> Parser.

0.1.0 (2019-04-09)
------------------

* 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.

Files for yaconf, version 0.2.0
Filename, size File type Python version Upload date Hashes
Filename, size yaconf-0.2.0-py2.py3-none-any.whl (4.9 kB) File type Wheel Python version py2.py3 Upload date Hashes View hashes
Filename, size yaconf-0.2.0.tar.gz (9.9 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page