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

Changelog

0.2.2

  • Fix not exist branch crash

0.2.1

  • Fix bug

0.2.0

  • Support TOML format file

0.1.0

  • First release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for TreeStructConfig, version 0.2.2
Filename, size File type Python version Upload date Hashes
Filename, size TreeStructConfig-0.2.2-py2.py3-none-any.whl (4.4 kB) File type Wheel Python version py2.py3 Upload date Hashes View
Filename, size TreeStructConfig-0.2.2.tar.gz (5.2 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page