Skip to main content

A Tree Struct Configuration module for python, support serialization to/from JSON and TOML

Project description

https://img.shields.io/pypi/v/TreeStructConfig.svg https://img.shields.io/pypi/pyversions/TreeStructConfig.svg https://img.shields.io/pypi/dm/TreeStructConfig.svg

A Tree Struct Configuration module for python, support serialization to/from JSON and TOML.

Install

Serialization with JSON

pip install -U TreeStructConfig

Serialization with TOML

pip install -U TreeStructConfig[toml]

Usage

Define class and create object

from tree_struct_config import (
    IntLeaf,
    StringLeaf,
    BooleanLeaf,
    ListLeaf,

    BranchNode,

    RootNode,
    SerializationFormat,
    SerializationDecodeError,
)


class Config(RootNode):
    version = StringLeaf('0.1.0')

    class Auth(BranchNode):
        username = StringLeaf('rex')
        password = StringLeaf('password')

    class Wireless(BranchNode):
        class AP(BranchNode):
            enabled = BooleanLeaf(True)
            channel = IntLeaf(1)
            password = StringLeaf('password')
            mac_acl_list = ListLeaf([
                '00:00:00:00:00:00',
            ])


config = Config()

Access config value

>>> config.Auth.username
rex
>>> username = config.Auth.username
>>> username
rex

Update config value

>>> config.Auth.username = 'new_user'
>>> config.Auth.username
new_user
>>> config.Wireless.AP.password = 'new_password'
>>> config.Wireless.AP.password
new_password

Dump config to JSON string

>>> config.dumps()
{
  "Auth": {
    "password": "password",
    "username": "rex"
  },
  "Wireless": {
    "AP": {
      "channel": 1,
      "enabled": true,
      "mac_acl_list": [
        "00:00:00:00:00:00"
      ],
      "password": "new_password"
    }
  },
  "version": "0.1.0"
}

Load config from JSON string

>>> json_str = """
...     {
...       "Auth": {
...         "username": "new_user"
...       },
...       "Wireless": {
...         "AP": {
...           "channel": 1,
...           "enabled": true,
...           "password": "new_password",
...         }
...       }
...     }
... """
...
>>> config.Auth.username
rex
>>> config.loads(json_str)
>>> config.Auth.username
new_user

Dump config to JSON file

>>> with open('config.json', 'w') as f:
...     config.dump(f)

Load config from JSON file

>>> with open('config.json') as f:
...     config.load(f)

Dump to TOML and load from TOML string and file

>>> config.dumps(serialization_format=SerializationFormat.TOML)
>>> config.loads(s, serialization_format=SerializationFormat.TOML)
>>> with open('config.toml', 'w') as f:
...     config.dump(f, serialization_format=SerializationFormat.TOML)
>>> with open('config.toml') as f:
...     config.load(f, serialization_format=SerializationFormat.TOML)

config.toml

version = "0.1.0"

[Auth]
password = "password"
username = "rex"

[Wireless.AP]
channel = 1
enabled = true
mac_acl_list = [ "00:00:00:00:00:00",]
password = "password"

Override dump() and load() function

class AdvancedConfig(Config):
    """override dump/load function"""
    _filename = None

    def dump(self, fp=None, serialization_format=None):
        with open(self._filename, 'w') as fp:
            super().dump(fp, serialization_format)

        return

    def load(self, fp=None, serialization_format=None):
        with open(self._filename) as fp:
            try:
                super().load(fp, serialization_format)

            except SerializationDecodeError:
                pass


advanced_config = AdvancedConfig()
advanced_config._filename = 'config.json'
advanced_config.dump()
advanced_config.load()

Demo

Demo source code: https://github.com/rexzhang/tree-struct-config/blob/master/demo.py

Output

----------
password
new_password
----------
{
  "Auth": {
    "password": "password",
    "username": "rex"
  },
  "Wireless": {
    "AP": {
      "channel": 1,
      "enabled": true,
      "mac_acl_list": [
        "00:00:00:00:00:00"
      ],
      "password": "new_password"
    }
  },
  "version": "0.1.0"
}
----------
xxxxxxxx

Alternative

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

TreeStructConfig-0.2.1.tar.gz (5.1 kB view hashes)

Uploaded Source

Built Distribution

TreeStructConfig-0.2.1-py2.py3-none-any.whl (4.4 kB view hashes)

Uploaded Python 2 Python 3

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