Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Pyning

A quick and extensible configuration management library

https://pypi.org/project/pyning/

Pyning lets you take configuration entries in key/value pairs, and query by key. For example, you might just use a dict (or any Mapping type):

args = { 'stop-on-error': True }
registry = pyning.config.Registry()
config = registry.add( args ).resolve()

print( config[ 'stop-on-error' ] )
# True

Keys are used as attributes on the resolved object, and can be used in the usual way:

args = { 'stop_on_error': True }
registry = pyning.config.Registry()
config = registry.add( args ).resolve()

print( config.stop_on_error )
# True

NB: keys with spaces, or other python syntax elements (like '-') will cause this syntax to fail, but such keys can still be found with the dictionary-key lookup.

Multiple levels of handler are possible, with later handlers override same-key settings in earlier handlers.

args = { 'stop_on_error': True }
overrides = { 'stop_on_error': False }
registry = pyning.config.Registry()
config = registry.add( args ).add( overrides ).resolve()

print( config.stop_on_error )
# False

You might use this to have some configuration in a file, and override with the argparse.ArgumentParser values.

args = { 'stop_on_error': True }
parser = argparse.ArgumentParser()
parser.add_argument( '--stop_on_error' ) 

cmdline = parser.parse_args()
registry = pyning.config.Registry()
config = registry.add( args ).add( vars( cmdline ) ).resolve()

print( config.stop_on_error )
# False

Values can use a limited variable substitution to swap in values from different keys. This is especially useful when using the overrides feature. At present, it only works for strings.

public_args = { 'password': '${private_password}' }
overrides = { 'private_password': 'a good strong password' }
registry = pyning.config.Registry()
config = registry.add( public_args ).add( overrides ).resolve()

print( config.password )
# a good strong password

The syntax used to match a variable substitution can be changed by passing in a different regular expression pattern to the Registry constructor. The default is '${variable name}', matched against r'(\$\{(.*?)\})'

Values don't have to be single items: they can be sequences or even nested Mapping objects. A convenient short-hand can be used to refer to nested keys, and works with variable substitution, too.

    import json

    args = { 'url': '${remotes.endpoint}' }
    overrides = json.loads( '''
        { "remotes": {
            "endpoint": "http://nowhere"
        } } '''
                            )

    cfg = Registry().add( args ).add( overrides ).resolve()
    print( cfg.url )

Also, nested mapping objects can still use a nested attribute lookup, too:

    import json

    args = { 'url': '${remotes.endpoint}' }
    overrides = json.loads( '''
        { "remotes": {
            "endpoint": "http://nowhere"
        } } '''
                            )

    cfg = Registry().add( args ).add( overrides ).resolve()
    print( cfg.remotes.endpoint )

Metadata

Release files for pyning 0.1a10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyning 0.1a10
File Size Uploaded
pyning-0.1a10.tar.gz 4.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyning 0.1a10
File Interpreter ABI Platform
pyning-0.1a10-py3-none-any.whl Python 3 none any Details

Total release size: 9.5 kB

Release files / pyning-0.1a10.tar.gz

Download URL pyning-0.1a10.tar.gz
Size 4.1 kB
Tags Source
SHA-256 checksum
How to use checksums
9aa0ea6d42ad0916d203cb605e0e4ebbabc019f3d766032f2f759fff22cd0685
BLAKE2b-256 checksum
How to use checksums
a257649757e2ab32241b1afaba511cadcfb9f3537d2f3d03ca759a26a2518103
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.0

Release files / pyning-0.1a10-py3-none-any.whl

Download URL pyning-0.1a10-py3-none-any.whl
Size 5.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ba4bfa763c0e237891015e150456bb26eef7454cb9632f9a59c605d337a7bc38
BLAKE2b-256 checksum
How to use checksums
da0e1f7097e169fa5f355ca61509645a71ddab983545cd56e67a91d85cf37a52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.0
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page