yconf
A wrapper for combining yaml configuration files and command line argument parsing. It builds upon PyYAML for parsing yaml config files and argparse for handling command line arguments and adds the clue produce one unified program configuration.
Requirements
Python 2.7+ or 3.2+
PyYAML >= 3.1
Configuration Environments
Because configuration often differs depending on the environment, e.g. production and testing settings, yconf allows you to define multiple environments in a single configuration. The current supported environemts are production, staging and development. For convenience, yconf is able to merge environment configuration to reduce redundancy, meaning that if the environment is set to staging, the configuration will inherit all settings available in a production environment and override them with staging values where neseccary.
Example
config.yml
production: rundir: /var/run/example database: /var/lib/example/db.sqlite loglevel: warning staging: database: :memory: development: loglevel: debug
Configuration
# production environment config.rundir: /var/run/example config.database: /var/lib/example/db.sqlite config.loglevel: warning # staging environment config.rundir: /var/run/example config.database: :memory: config.loglevel: warning # development environment config.rundir: /var/run/example config.database: :memory: config.loglevel: debug
Both staging and development environments are optional.
If a directory is specified instead of a configuration file, yconf will look for configuration files by convention of <environment>.yml in that directory and merge them accordingly if possible.
Command Line Arguments
Extending the argument list supported by a configuration will require subclassing yconf.BaseConfiguration and overriding the makeParser method.
Example
import sys
from yconf import BaseConfiguration
class MyConfig(BaseConfiguration):
def makeParser(self):
parser = super(MyConfig, self).makeParser()
parser.add_argument("-f", "--foo", dest="foo")
return parser
config = MyConfig()
config.parse(sys.argv[1:])
The following configuration arguments are already preset:
-c Path to configuration file or directory
-e The environment used for configuration (default: production)
When present, command line argument always take precedent over configuration settings. To override nested yaml values, a dotted destination path can be set for the argument.
config.yml
logging: loglevel: debug
Argument
parser.add_argument("--log-level", dest="logging.loglevel")
Accessing Configuration
Configuration can be accessed either by attribute or by key.
config = MyConfig() config.parse(args) config.foo == config['foo'] config.foo.bar == config['foo']['bar']
Release files for yconf 0.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| yconf-0.3.2.tar.gz | 7.6 kB | Details |
Release files / yconf-0.3.2.tar.gz
| Download URL | yconf-0.3.2.tar.gz |
|---|---|
| Size | 7.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8bf53b9917ee6d3315734dffd6e9d459e4f02684ade6e773ce6901b489fd2519
|
|
BLAKE2b-256 checksum How to use checksums |
254b45a37f6a5d4a9ce065ca33ae06e5ffbadddbb01beb43c18024133d12eaeb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |