Skip to main content

ConfigParser meets marshmallow

Project description

# Overview



Ever wanted to load plain `.ini` config files and then validate loaded config?

Ever wanted to load config from multiple locations (`/etc/appconfig.conf`, `~/.appconfig.conf`) into single object and then validate that?

Worry no more!

Python's [ConfigParser] met [marshmallow] and now they get along just fine - without any JSON in sight to spoil the fun.

## Installation

~~~sh
pip install marshmallow_configparser
~~~

## Example

Having config file `/tmp/example_config.conf` looking like this:

~~~ini
[Section1]
option1 = mandatory string
option2 = optional string
option3 = 42
option4 = 24

[Section2]
option1 = mandatory string
option2 = optional string
option3 = 42
option4 = 24
~~~

And wanting to load it into our config object:

~~~python
class ConfigObject(object):
MANDATORY_STRING1 = None
OPTIONAL_STRING1 = None
MANDATORY_INTEGER1 = None
OPTIONAL_INTEGER1 = None
MANDATORY_STRING2 = None
OPTIONAL_STRING2 = None
MANDATORY_INTEGER2 = None
OPTIONAL_INTEGER2 = None
~~~

We can define [marshmallow] schema:

~~~python
from marshmallow.validate import Range

from marshmallow_configparser import (ConfigBoolean, ConfigInteger,
ConfigParserSchema, ConfigString,
IsNotBlank)

class ConfigSchema(ConfigParserSchema):
class Meta:
model = ConfigObject

MANDATORY_STRING1 = ConfigString(
section='Section1', load_from='option1', dump_to='option1',
validate=[IsNotBlank()]
)
OPTIONAL_STRING1 = ConfigString(
section='Section1', load_from='option2', dump_to='option2',
)
MANDATORY_INTEGER1 = ConfigInteger(
section='Section1', load_from='option3', dump_to='option3',
validate=[Range(min=24, max=42)]
)
OPTIONAL_INTEGER1 = ConfigInteger(
section='Section1', load_from='option4', dump_to='option4',
)

MANDATORY_STRING2 = ConfigString(
section='Section2', load_from='option1', dump_to='option1',
validate=[IsNotBlank()]
)
OPTIONAL_STRING2 = ConfigString(
section='Section2', load_from='option2', dump_to='option2',
)
MANDATORY_INTEGER2 = ConfigInteger(
section='Section2', load_from='option3', dump_to='option3',
validate=[Range(min=24, max=42)]
)
OPTIONAL_INTEGER2 = ConfigInteger(
section='Section2', load_from='option4', dump_to='option4',
)
~~~

Which can then load and validate our config:

~~~python
schema = ConfigSchema()
obj, errors = schema.load(['/tmp/example_config.conf'])
~~~

In the end we have:

~~~python
obj.__dict_

{'MANDATORY_INTEGER1': 42,
'MANDATORY_INTEGER2': 42,
'MANDATORY_STRING1': 'mandatory string',
'MANDATORY_STRING2': 'mandatory string',
'OPTIONAL_INTEGER1': 24,
'OPTIONAL_INTEGER2': 24,
'OPTIONAL_STRING1': 'optional string',
'OPTIONAL_STRING2': 'optional string'}
~~~

Instead of using convenience classes like `ConfigString`, there are also classes in `marshmallow_configparser.fields` module that expose full [marshmallow] API. Check the docs for details.

## Documentation

http://marshmallow-configparser.readthedocs.io/en/latest/index.html

[marshmallow]: https://github.com/marshmallow-code/marshmallow
[ConfigParser]: https://docs.python.org/3/library/configparser.html#configparser.ConfigParser



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

marshmallow_configparser-0.4.0.tar.gz (24.1 kB view details)

Uploaded Source

Built Distribution

marshmallow_configparser-0.4.0-py2.py3-none-any.whl (7.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file marshmallow_configparser-0.4.0.tar.gz.

File metadata

  • Download URL: marshmallow_configparser-0.4.0.tar.gz
  • Upload date:
  • Size: 24.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.6

File hashes

Hashes for marshmallow_configparser-0.4.0.tar.gz
Algorithm Hash digest
SHA256 e5eec3f6c581ef3cd3fecdbdc86cb834c4c8d71d79475409644d15f69094d050
MD5 b65f770987e6e75ee39a4a03303aa7b5
BLAKE2b-256 c691e392b112d4b93289b6a4e89190d3f57f93f0259be2343b8b05dea87896c3

See more details on using hashes here.

File details

Details for the file marshmallow_configparser-0.4.0-py2.py3-none-any.whl.

File metadata

  • Download URL: marshmallow_configparser-0.4.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 7.3 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.6

File hashes

Hashes for marshmallow_configparser-0.4.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 09ed3a99a7a38d3ee8be8cdafeab493cc89a0380f8426554a04fcfa9c9ef464d
MD5 e7b94154f9fbba09ba517e8a9d89f1ae
BLAKE2b-256 ea3aebe3f46bdde8f35c3ff593d78e93b7f73362b948111c55b73c42e95ae7ed

See more details on using hashes here.

Supported by

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