{ "info": { "author": "Rex Zhang", "author_email": "rex.zhang@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "================\nTreeStructConfig\n================\n\n.. image:: https://img.shields.io/pypi/v/TreeStructConfig.svg\n :target: https://pypi.org/project/TreeStructConfig/\n.. image:: https://img.shields.io/pypi/pyversions/TreeStructConfig.svg\n :target: https://pypi.org/project/TreeStructConfig/\n.. image:: https://img.shields.io/pypi/dm/TreeStructConfig.svg\n :target: https://pypi.org/project/TreeStructConfig/\n\n\nA Tree Struct Configuration module for python, support serialization to/from JSON and TOML.\n\n\nInstall\n=======\n\n.. code-block:: console\n\n pip install -U TreeStructConfig\n\n\nUsage\n=====\n\nDefine class and create object\n\n.. code-block:: python\n :number-lines:\n\n from tree_struct_config import (\n IntLeaf,\n StringLeaf,\n BooleanLeaf,\n ListLeaf,\n\n BranchNode,\n\n RootNode,\n SerializationFormat,\n SerializationDecodeError,\n )\n\n\n class Config(RootNode):\n version = StringLeaf('0.1.0')\n\n class Auth(BranchNode):\n username = StringLeaf('rex')\n password = StringLeaf('password')\n\n class Wireless(BranchNode):\n class AP(BranchNode):\n enabled = BooleanLeaf(True)\n channel = IntLeaf(1)\n password = StringLeaf('password')\n mac_acl_list = ListLeaf([\n '00:00:00:00:00:00',\n ])\n\n\n config = Config()\n\n\nAccess config value\n\n >>> config.Auth.username\n rex\n >>> username = config.Auth.username\n >>> username\n rex\n\n\nUpdate config value\n\n >>> config.Auth.username = 'new_user'\n >>> config.Auth.username\n new_user\n >>> config.Wireless.AP.password = 'new_password'\n >>> config.Wireless.AP.password\n new_password\n\n\nDump config to JSON string\n\n >>> config.dumps()\n {\n \"Auth\": {\n \"password\": \"password\",\n \"username\": \"rex\"\n },\n \"Wireless\": {\n \"AP\": {\n \"channel\": 1,\n \"enabled\": true,\n \"mac_acl_list\": [\n \"00:00:00:00:00:00\"\n ],\n \"password\": \"new_password\"\n }\n },\n \"version\": \"0.1.0\"\n }\n\n\nLoad config from JSON string\n\n >>> json_str = \"\"\"\n ... {\n ... \"Auth\": {\n ... \"username\": \"new_user\"\n ... },\n ... \"Wireless\": {\n ... \"AP\": {\n ... \"channel\": 1,\n ... \"enabled\": true,\n ... \"password\": \"new_password\",\n ... }\n ... }\n ... }\n ... \"\"\"\n ...\n >>> config.Auth.username\n rex\n >>> config.loads(json_str)\n >>> config.Auth.username\n new_user\n\n\nDump config to JSON file\n\n >>> with open('config.json', 'w') as f:\n ... config.dump(f)\n\n\nLoad config from JSON file\n\n >>> with open('config.json') as f:\n ... config.load(f)\n\n\nDump to TOML and load from TOML string and file\n\n >>> config.dumps(serialization_format=SerializationFormat.TOML)\n >>> config.loads(s, serialization_format=SerializationFormat.TOML)\n\n >>> with open('config.toml', 'w') as f:\n ... config.dump(f, serialization_format=SerializationFormat.TOML)\n >>> with open('config.toml') as f:\n ... config.load(f, serialization_format=SerializationFormat.TOML)\n\nconfig.toml\n\n.. code-block:: text\n\n version = \"0.1.0\"\n\n [Auth]\n password = \"password\"\n username = \"rex\"\n\n [Wireless.AP]\n channel = 1\n enabled = true\n mac_acl_list = [ \"00:00:00:00:00:00\",]\n password = \"password\"\n\n\nOverride ``dump()`` and ``load()`` function\n\n.. code-block:: python\n :number-lines:\n\n class AdvancedConfig(Config):\n \"\"\"override dump/load function\"\"\"\n _filename = None\n\n def dump(self, fp=None, serialization_format=None):\n with open(self._filename, 'w') as fp:\n super().dump(fp, serialization_format)\n\n return\n\n def load(self, fp=None, serialization_format=None):\n with open(self._filename) as fp:\n try:\n super().load(fp, serialization_format)\n\n except SerializationDecodeError:\n pass\n\n\n advanced_config = AdvancedConfig()\n advanced_config._filename = 'config.json'\n advanced_config.dump()\n advanced_config.load()\n\n\nDemo\n====\n\nDemo source code: demo.py_\n\n.. _demo.py: demo.py\n\nOutput\n\n.. code-block:: console\n\n ----------\n password\n new_password\n ----------\n {\n \"Auth\": {\n \"password\": \"password\",\n \"username\": \"rex\"\n },\n \"Wireless\": {\n \"AP\": {\n \"channel\": 1,\n \"enabled\": true,\n \"mac_acl_list\": [\n \"00:00:00:00:00:00\"\n ],\n \"password\": \"new_password\"\n }\n },\n \"version\": \"0.1.0\"\n }\n ----------\n xxxxxxxx\n\n\nAlternative\n===========\n\n* https://gitlab.com/alelec/structured_config\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/rexzhang/tree-struct-config", "keywords": "configuration json", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "TreeStructConfig", "package_url": "https://pypi.org/project/TreeStructConfig/", "platform": "", "project_url": "https://pypi.org/project/TreeStructConfig/", "project_urls": { "Homepage": "https://github.com/rexzhang/tree-struct-config" }, "release_url": "https://pypi.org/project/TreeStructConfig/0.2.0/", "requires_dist": [ "toml ; extra == 'toml'" ], "requires_python": ">=3.4", "summary": "A Tree Struct Configuration module for python, support serialization to/from JSON and TOML", "version": "0.2.0" }, "last_serial": 5643539, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "92e569e900884f794705dd02b74c1919", "sha256": "e3e8eabc6925a98cd010a3cee7c92f2ae81738f64b4ca8dd79fbf8bcc1599762" }, "downloads": -1, "filename": "TreeStructConfig-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "92e569e900884f794705dd02b74c1919", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.4", "size": 3554, "upload_time": "2019-08-03T12:14:37", "url": "https://files.pythonhosted.org/packages/00/95/ed949fc8520f2c5c08f032f201616d28f8bfef24e9b5e106e62272536036/TreeStructConfig-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "da19dc3864f80189f395f8c3af246f44", "sha256": "a6fc7421ece9ace8555eaec156993c54f51d733d422039f397a14b1092d5da0a" }, "downloads": -1, "filename": "TreeStructConfig-0.1.0.tar.gz", "has_sig": false, "md5_digest": "da19dc3864f80189f395f8c3af246f44", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 3967, "upload_time": "2019-08-03T12:14:40", "url": "https://files.pythonhosted.org/packages/a9/03/cb0d2575e101feb69d382109c75bcbda70c1ceaaec6d3c7a5a1c88e7e166/TreeStructConfig-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "e52aced39992f2dfc49bd891af72fbf4", "sha256": "0ccb5ae80a4630c4b6504dcb885bb76fa43cf40a96ad25a71ca6bd65adb17f43" }, "downloads": -1, "filename": "TreeStructConfig-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e52aced39992f2dfc49bd891af72fbf4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.4", "size": 4318, "upload_time": "2019-08-07T07:26:36", "url": "https://files.pythonhosted.org/packages/cd/0b/891cae50a3fb4a7636b3d9218e32e0b7d1e1df50087652595e94822b17b9/TreeStructConfig-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c25337b707ffead59cd79817b3c72998", "sha256": "fa815ce07848af2929999b79cde2ed937ef7483c33797dfc8e55508660dcc35a" }, "downloads": -1, "filename": "TreeStructConfig-0.2.0.tar.gz", "has_sig": false, "md5_digest": "c25337b707ffead59cd79817b3c72998", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 4981, "upload_time": "2019-08-07T07:26:40", "url": "https://files.pythonhosted.org/packages/44/86/5ae37f14e4e25716eb9c188b670592eed60f286270849621e1a0ed285b60/TreeStructConfig-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e52aced39992f2dfc49bd891af72fbf4", "sha256": "0ccb5ae80a4630c4b6504dcb885bb76fa43cf40a96ad25a71ca6bd65adb17f43" }, "downloads": -1, "filename": "TreeStructConfig-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e52aced39992f2dfc49bd891af72fbf4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.4", "size": 4318, "upload_time": "2019-08-07T07:26:36", "url": "https://files.pythonhosted.org/packages/cd/0b/891cae50a3fb4a7636b3d9218e32e0b7d1e1df50087652595e94822b17b9/TreeStructConfig-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c25337b707ffead59cd79817b3c72998", "sha256": "fa815ce07848af2929999b79cde2ed937ef7483c33797dfc8e55508660dcc35a" }, "downloads": -1, "filename": "TreeStructConfig-0.2.0.tar.gz", "has_sig": false, "md5_digest": "c25337b707ffead59cd79817b3c72998", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 4981, "upload_time": "2019-08-07T07:26:40", "url": "https://files.pythonhosted.org/packages/44/86/5ae37f14e4e25716eb9c188b670592eed60f286270849621e1a0ed285b60/TreeStructConfig-0.2.0.tar.gz" } ] }