File: README.rst

package info (click to toggle)
pystaticconfiguration 0.11.1-3
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 400 kB
  • sloc: python: 2,569; makefile: 7
file content (130 lines) | stat: -rw-r--r-- 3,482 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
PyStaticConfiguration
=====================

A python library for loading, validating and reading configuration from many
heterogeneous formats. Configuration is split into two phases.

Configuration Loading
---------------------

Configuration is read from files or python objects, flattened, and merged
into a container called a `namespace`. Namespaces are used to separate
unrelated configuration groups.

If configuration is changed frequently, it can also be reloaded easily
with very little change to the existing code.


Configuration Reading
---------------------

A configuration value is looked up in the `namespace`. It is validating and
converted to the requested type.


.. contents:: Contents
    :local:
    :depth: 1
    :backlinks: none



Build Status
------------

.. image:: https://github.com/dnephin/PyStaticConfiguration/actions/workflows/build.yaml/badge.svg
    :target: https://github.com/dnephin/PyStaticConfiguration/actions
    :alt: Build status

.. image:: https://img.shields.io/pypi/v/PyStaticConfiguration.svg
    :target: https://pypi.python.org/pypi/PyStaticConfiguration
    :alt: Latest PyPI version


Install
-------

* PyStaticConfiguration is available on pypi: https://pypi.python.org/pypi/PyStaticConfiguration
* The source is hosted on github: https://github.com/dnephin/PyStaticConfiguration

.. code-block:: bash

    $ pip install PyStaticConfiguration


Also see the 
`release notes <http://pythonhosted.org/PyStaticConfiguration/release_notes.html>`_.

Documentation
-------------

http://pythonhosted.org/PyStaticConfiguration/


Examples
--------

A common minimal use of staticconf would be to use a single yaml configuration
file and read some values from it.

.. code-block:: python

    import staticconf

    filename = 'hosts.yaml'
    namespace = 'hosts'

    # Load configuration from the file into namespace `hosts`
    staticconf.YamlConfiguration(filename, namespace=namespace)
    ...

    # Some time later on, read values from that namespace
    print staticconf.read('database.slave', namespace=namespace)
    print staticconf.read('database.master', namespace=namespace)


`hosts.yaml` might look something like this:

.. code-block:: yaml

    database:
        slave: dbslave_1
        master: dbmaster_1


A more involved example would load configuration from multiple files, create
a watcher for reloading, and read some config values.

.. code-block:: python

    from functools import partial
    import os
    import staticconf


    def load_config(config_path, defaults='~/.myapp.yaml`)
        # First load global defaults if the file exists
        staticconf.INIConfiguration('/etc/myapp.ini', optional=True)

        # Next load user defaults
        staticconf.YamlConfiguration(defaults, optional=True)

        # Next load the specified configuration file
        staticconf.YamlConfiguration(config_path)

        # Now let's override it with some environment settings
        staticconf.DictConfiguration(
            (k[6:].lower(), v) for k, v in os.environ.items() if k.startswith('MYAPP_'))


    def build_watcher(filename):
        return staticconf.ConfigFacade.load(
            filenames, 'DEFAULT', partial(load_config, filename))

    def run(config_path):
        watcher = build_watcher(config_path)
        while is_work():
            watcher.reload_if_changed()

            current_threshold = staticconf.read_float('current_threshold')
            do_some_work(current_thresold)