C41811.Config


NameC41811.Config JSON
Version 0.1.4 PyPI version JSON
download
home_pageNone
SummarySimplifies config management with flexible API and formats.
upload_time2025-01-12 20:02:09
maintainerNone
docs_urlNone
authorNone
requires_python>=3.12
licenseMIT License Copyright (c) 2024 C418____11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords config yaml toml json
VCS
bugtrack_url
requirements pydantic wrapt pyrsistent tox PyYAML ruamel.yaml toml
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # C41811.Config

[English](README_EN.md) | 中文

---

[![PyPI pyversions](https://img.shields.io/pypi/pyversions/c41811.config.svg)](https://pypi.python.org/pypi/C41811.Config/)
[![PyPI - License](https://img.shields.io/pypi/l/C41811.Config?color=blue)](https://github.com/C418-11/C41811_Config/blob/main/LICENSE)

|  文档  |           [![Documentation Status](https://readthedocs.org/projects/c41811config/badge/?version=latest)](https://C41811Config.readthedocs.io) [![Common Usage](https://img.shields.io/badge/%E5%B8%B8%E8%A7%81-%E7%94%A8%E6%B3%95-green?logo=googledocs&logoColor=white)](https://c41811config.readthedocs.io/zh-cn/latest/CommonUsage.html)  [![made-with-sphinx-doc](https://img.shields.io/badge/Made%20with-Sphinx-1f425f.svg)](https://www.sphinx-doc.org/)           |
|:----:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
| PyPI |                                                           [![PyPI - Version](https://img.shields.io/pypi/v/C41811.Config)](https://pypi.python.org/pypi/C41811.Config/) [![PyPI - Wheel](https://img.shields.io/pypi/wheel/C41811.Config)](https://pypi.python.org/pypi/C41811.Config/) [![PyPI download month](https://img.shields.io/pypi/dm/c41811.config.svg)](https://pypi.python.org/pypi/C41811.Config/)                                                            |
|  仓库  |                                                             [![Github](https://img.shields.io/badge/Github-C41811.Config-green?logo=github)](https://github.com/C418-11/C41811_Config/) [![Publish](https://img.shields.io/github/actions/workflow/status/C418-11/C41811_Config/python-publish.yml?logo=github&label=Pubilsh)](https://github.com/C418-11/C41811_Config/actions/workflows/python-publish.yml)                                                              |
| 代码质量 | [![pytest](https://img.shields.io/github/actions/workflow/status/C418-11/C41811_Config/python-pytest.yml?logo=github&label=pytest)](https://github.com/C418-11/C41811_Config/actions/workflows/python-pytest.yml) [![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/C418-11/C41811_Config/python-flake8.yml?branch=develop&logo=github&label=flake8)](https://github.com/C418-11/C41811_Config/actions/workflows/python-flake8.yml) |

## 简介

C41811.Config 旨在通过提供一套简洁的 API
和灵活的配置处理机制,来简化配置文件的管理。无论是简单的键值对配置,还是复杂的嵌套结构,都能轻松应对。它不仅支持多种配置格式,还提供了丰富的错误处理和验证功能,确保配置数据的准确性和一致性。

## 特性

* 多格式支持:支持多种流行的配置格式,包括 JSON、YAML、TOML 和 Pickle,满足不同项目的需求。
* 模块化设计:通过模块化的设计,提供了灵活地扩展机制,开发者可以根据需要添加自定义的配置处理器。
* 验证功能:支持通过验证器来验证配置数据的合法性,确保配置数据的正确性。
* 易于使用:提供了一套简洁的 API,开发者可以轻松地加载、修改和保存配置文件。

## 适用场景

C41811.Config 适用于多种配置管理场景,特别是以下几种情况:

* 大型项目:允许通过命名空间或配置池隔离项目各部分的配置,使得配置管理更加清晰和有序。
* 分散的配置文件:通过提供统一的接口和灵活的处理机制,使得分散的配置文件能够被集中管理和访问,提高了配置的效率和一致性。
* 复杂的数据模型:会自动填充缺失的键默认值,并对配置数据进行类型验证,确保配置数据的完整性和准确性。
* 需要对配置进行复杂操作:提供了 get、set_default、unset 等方法,简化了对配置数据的复杂操作。
* 多种配置格式混搭:支持根据文件后缀自动从注册的处理器中推断合适的配置格式,使得不同格式的配置文件可以无缝混用。
* 动态配置更新:支持在运行时动态更新配置,无需重启应用即可应用新的配置。

## 安装

```commandline
pip install C41811.Config
```

## 一个简单的示例

```python
from C41811.Config import ConfigData
from C41811.Config import JsonSL
from C41811.Config import requireConfig
from C41811.Config import saveAll

JsonSL().register_to()

cfg: ConfigData = requireConfig(
    '', "Hello World.json",
    {  # 简单且强大的配置数据验证器
        "Hello": "World",
        "foo": dict,  # 包含foo下的所有键
        "foo\\.bar": {  # foo.bar仅包含baz键
            "baz": "qux"
        }
    }
).check()
saveAll()

print(f"{cfg=}")
print()
print("与dict完全相同的数据访问方式")
print(f"{cfg["Hello"]=}")
print(f"{cfg["foo"]["bar"]=}")
print()
print("通过属性访问数据")
print(f"{cfg.foo=}")
print(f"{cfg.foo.bar.baz=}")
print()
print("通过特殊语法访问数据")
print(f"{cfg.retrieve("foo\\.bar\\.baz")=}")
print()
print("一些常用方法")
print(f"{cfg.unset("foo\\.bar\\.baz").exists("foo\\.bar\\.baz")=}")
print(f"{cfg.get("foo\\.bar\\.baz")=}")
print(f"{cfg.set_default("foo\\.bar\\.baz", "qux")=}")
print(f"{cfg.get("foo\\.bar\\.baz", default="default")=}")
print(f"{cfg.modify("foo\\.bar\\.baz", [1, 2, 3]).retrieve("foo\\.bar\\.baz\\[1\\]")=}")
print(f"{cfg.delete("foo\\.bar\\.baz").get("foo\\.bar\\.baz", default="default")=}")
```

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "C41811.Config",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.12",
    "maintainer_email": null,
    "keywords": "config, yaml, toml, json",
    "author": null,
    "author_email": "C418____11 <C418-11@qq.com>",
    "download_url": "https://files.pythonhosted.org/packages/40/b0/e5c593649a1d456ff8615ffe0f2a9ab82bf247ba35b330c554aab5b4809b/c41811_config-0.1.4.tar.gz",
    "platform": null,
    "description": "# C41811.Config\n\n[English](README_EN.md) | \u4e2d\u6587\n\n---\n\n[![PyPI pyversions](https://img.shields.io/pypi/pyversions/c41811.config.svg)](https://pypi.python.org/pypi/C41811.Config/)\n[![PyPI - License](https://img.shields.io/pypi/l/C41811.Config?color=blue)](https://github.com/C418-11/C41811_Config/blob/main/LICENSE)\n\n|  \u6587\u6863  |           [![Documentation Status](https://readthedocs.org/projects/c41811config/badge/?version=latest)](https://C41811Config.readthedocs.io) [![Common Usage](https://img.shields.io/badge/%E5%B8%B8%E8%A7%81-%E7%94%A8%E6%B3%95-green?logo=googledocs&logoColor=white)](https://c41811config.readthedocs.io/zh-cn/latest/CommonUsage.html)  [![made-with-sphinx-doc](https://img.shields.io/badge/Made%20with-Sphinx-1f425f.svg)](https://www.sphinx-doc.org/)           |\n|:----:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|\n| PyPI |                                                           [![PyPI - Version](https://img.shields.io/pypi/v/C41811.Config)](https://pypi.python.org/pypi/C41811.Config/) [![PyPI - Wheel](https://img.shields.io/pypi/wheel/C41811.Config)](https://pypi.python.org/pypi/C41811.Config/) [![PyPI download month](https://img.shields.io/pypi/dm/c41811.config.svg)](https://pypi.python.org/pypi/C41811.Config/)                                                            |\n|  \u4ed3\u5e93  |                                                             [![Github](https://img.shields.io/badge/Github-C41811.Config-green?logo=github)](https://github.com/C418-11/C41811_Config/) [![Publish](https://img.shields.io/github/actions/workflow/status/C418-11/C41811_Config/python-publish.yml?logo=github&label=Pubilsh)](https://github.com/C418-11/C41811_Config/actions/workflows/python-publish.yml)                                                              |\n| \u4ee3\u7801\u8d28\u91cf | [![pytest](https://img.shields.io/github/actions/workflow/status/C418-11/C41811_Config/python-pytest.yml?logo=github&label=pytest)](https://github.com/C418-11/C41811_Config/actions/workflows/python-pytest.yml) [![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/C418-11/C41811_Config/python-flake8.yml?branch=develop&logo=github&label=flake8)](https://github.com/C418-11/C41811_Config/actions/workflows/python-flake8.yml) |\n\n## \u7b80\u4ecb\n\nC41811.Config \u65e8\u5728\u901a\u8fc7\u63d0\u4f9b\u4e00\u5957\u7b80\u6d01\u7684 API\n\u548c\u7075\u6d3b\u7684\u914d\u7f6e\u5904\u7406\u673a\u5236\uff0c\u6765\u7b80\u5316\u914d\u7f6e\u6587\u4ef6\u7684\u7ba1\u7406\u3002\u65e0\u8bba\u662f\u7b80\u5355\u7684\u952e\u503c\u5bf9\u914d\u7f6e\uff0c\u8fd8\u662f\u590d\u6742\u7684\u5d4c\u5957\u7ed3\u6784\uff0c\u90fd\u80fd\u8f7b\u677e\u5e94\u5bf9\u3002\u5b83\u4e0d\u4ec5\u652f\u6301\u591a\u79cd\u914d\u7f6e\u683c\u5f0f\uff0c\u8fd8\u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684\u9519\u8bef\u5904\u7406\u548c\u9a8c\u8bc1\u529f\u80fd\uff0c\u786e\u4fdd\u914d\u7f6e\u6570\u636e\u7684\u51c6\u786e\u6027\u548c\u4e00\u81f4\u6027\u3002\n\n## \u7279\u6027\n\n* \u591a\u683c\u5f0f\u652f\u6301\uff1a\u652f\u6301\u591a\u79cd\u6d41\u884c\u7684\u914d\u7f6e\u683c\u5f0f\uff0c\u5305\u62ec JSON\u3001YAML\u3001TOML \u548c Pickle\uff0c\u6ee1\u8db3\u4e0d\u540c\u9879\u76ee\u7684\u9700\u6c42\u3002\n* \u6a21\u5757\u5316\u8bbe\u8ba1\uff1a\u901a\u8fc7\u6a21\u5757\u5316\u7684\u8bbe\u8ba1\uff0c\u63d0\u4f9b\u4e86\u7075\u6d3b\u5730\u6269\u5c55\u673a\u5236\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u6839\u636e\u9700\u8981\u6dfb\u52a0\u81ea\u5b9a\u4e49\u7684\u914d\u7f6e\u5904\u7406\u5668\u3002\n* \u9a8c\u8bc1\u529f\u80fd\uff1a\u652f\u6301\u901a\u8fc7\u9a8c\u8bc1\u5668\u6765\u9a8c\u8bc1\u914d\u7f6e\u6570\u636e\u7684\u5408\u6cd5\u6027\uff0c\u786e\u4fdd\u914d\u7f6e\u6570\u636e\u7684\u6b63\u786e\u6027\u3002\n* \u6613\u4e8e\u4f7f\u7528\uff1a\u63d0\u4f9b\u4e86\u4e00\u5957\u7b80\u6d01\u7684 API\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u8f7b\u677e\u5730\u52a0\u8f7d\u3001\u4fee\u6539\u548c\u4fdd\u5b58\u914d\u7f6e\u6587\u4ef6\u3002\n\n## \u9002\u7528\u573a\u666f\n\nC41811.Config \u9002\u7528\u4e8e\u591a\u79cd\u914d\u7f6e\u7ba1\u7406\u573a\u666f\uff0c\u7279\u522b\u662f\u4ee5\u4e0b\u51e0\u79cd\u60c5\u51b5\uff1a\n\n* \u5927\u578b\u9879\u76ee\uff1a\u5141\u8bb8\u901a\u8fc7\u547d\u540d\u7a7a\u95f4\u6216\u914d\u7f6e\u6c60\u9694\u79bb\u9879\u76ee\u5404\u90e8\u5206\u7684\u914d\u7f6e\uff0c\u4f7f\u5f97\u914d\u7f6e\u7ba1\u7406\u66f4\u52a0\u6e05\u6670\u548c\u6709\u5e8f\u3002\n* \u5206\u6563\u7684\u914d\u7f6e\u6587\u4ef6\uff1a\u901a\u8fc7\u63d0\u4f9b\u7edf\u4e00\u7684\u63a5\u53e3\u548c\u7075\u6d3b\u7684\u5904\u7406\u673a\u5236\uff0c\u4f7f\u5f97\u5206\u6563\u7684\u914d\u7f6e\u6587\u4ef6\u80fd\u591f\u88ab\u96c6\u4e2d\u7ba1\u7406\u548c\u8bbf\u95ee\uff0c\u63d0\u9ad8\u4e86\u914d\u7f6e\u7684\u6548\u7387\u548c\u4e00\u81f4\u6027\u3002\n* \u590d\u6742\u7684\u6570\u636e\u6a21\u578b\uff1a\u4f1a\u81ea\u52a8\u586b\u5145\u7f3a\u5931\u7684\u952e\u9ed8\u8ba4\u503c\uff0c\u5e76\u5bf9\u914d\u7f6e\u6570\u636e\u8fdb\u884c\u7c7b\u578b\u9a8c\u8bc1\uff0c\u786e\u4fdd\u914d\u7f6e\u6570\u636e\u7684\u5b8c\u6574\u6027\u548c\u51c6\u786e\u6027\u3002\n* \u9700\u8981\u5bf9\u914d\u7f6e\u8fdb\u884c\u590d\u6742\u64cd\u4f5c\uff1a\u63d0\u4f9b\u4e86 get\u3001set_default\u3001unset \u7b49\u65b9\u6cd5\uff0c\u7b80\u5316\u4e86\u5bf9\u914d\u7f6e\u6570\u636e\u7684\u590d\u6742\u64cd\u4f5c\u3002\n* \u591a\u79cd\u914d\u7f6e\u683c\u5f0f\u6df7\u642d\uff1a\u652f\u6301\u6839\u636e\u6587\u4ef6\u540e\u7f00\u81ea\u52a8\u4ece\u6ce8\u518c\u7684\u5904\u7406\u5668\u4e2d\u63a8\u65ad\u5408\u9002\u7684\u914d\u7f6e\u683c\u5f0f\uff0c\u4f7f\u5f97\u4e0d\u540c\u683c\u5f0f\u7684\u914d\u7f6e\u6587\u4ef6\u53ef\u4ee5\u65e0\u7f1d\u6df7\u7528\u3002\n* \u52a8\u6001\u914d\u7f6e\u66f4\u65b0\uff1a\u652f\u6301\u5728\u8fd0\u884c\u65f6\u52a8\u6001\u66f4\u65b0\u914d\u7f6e\uff0c\u65e0\u9700\u91cd\u542f\u5e94\u7528\u5373\u53ef\u5e94\u7528\u65b0\u7684\u914d\u7f6e\u3002\n\n## \u5b89\u88c5\n\n```commandline\npip install C41811.Config\n```\n\n## \u4e00\u4e2a\u7b80\u5355\u7684\u793a\u4f8b\n\n```python\nfrom C41811.Config import ConfigData\nfrom C41811.Config import JsonSL\nfrom C41811.Config import requireConfig\nfrom C41811.Config import saveAll\n\nJsonSL().register_to()\n\ncfg: ConfigData = requireConfig(\n    '', \"Hello World.json\",\n    {  # \u7b80\u5355\u4e14\u5f3a\u5927\u7684\u914d\u7f6e\u6570\u636e\u9a8c\u8bc1\u5668\n        \"Hello\": \"World\",\n        \"foo\": dict,  # \u5305\u542bfoo\u4e0b\u7684\u6240\u6709\u952e\n        \"foo\\\\.bar\": {  # foo.bar\u4ec5\u5305\u542bbaz\u952e\n            \"baz\": \"qux\"\n        }\n    }\n).check()\nsaveAll()\n\nprint(f\"{cfg=}\")\nprint()\nprint(\"\u4e0edict\u5b8c\u5168\u76f8\u540c\u7684\u6570\u636e\u8bbf\u95ee\u65b9\u5f0f\")\nprint(f\"{cfg[\"Hello\"]=}\")\nprint(f\"{cfg[\"foo\"][\"bar\"]=}\")\nprint()\nprint(\"\u901a\u8fc7\u5c5e\u6027\u8bbf\u95ee\u6570\u636e\")\nprint(f\"{cfg.foo=}\")\nprint(f\"{cfg.foo.bar.baz=}\")\nprint()\nprint(\"\u901a\u8fc7\u7279\u6b8a\u8bed\u6cd5\u8bbf\u95ee\u6570\u636e\")\nprint(f\"{cfg.retrieve(\"foo\\\\.bar\\\\.baz\")=}\")\nprint()\nprint(\"\u4e00\u4e9b\u5e38\u7528\u65b9\u6cd5\")\nprint(f\"{cfg.unset(\"foo\\\\.bar\\\\.baz\").exists(\"foo\\\\.bar\\\\.baz\")=}\")\nprint(f\"{cfg.get(\"foo\\\\.bar\\\\.baz\")=}\")\nprint(f\"{cfg.set_default(\"foo\\\\.bar\\\\.baz\", \"qux\")=}\")\nprint(f\"{cfg.get(\"foo\\\\.bar\\\\.baz\", default=\"default\")=}\")\nprint(f\"{cfg.modify(\"foo\\\\.bar\\\\.baz\", [1, 2, 3]).retrieve(\"foo\\\\.bar\\\\.baz\\\\[1\\\\]\")=}\")\nprint(f\"{cfg.delete(\"foo\\\\.bar\\\\.baz\").get(\"foo\\\\.bar\\\\.baz\", default=\"default\")=}\")\n```\n",
    "bugtrack_url": null,
    "license": "MIT License  Copyright (c) 2024 C418____11  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ",
    "summary": "Simplifies config management with flexible API and formats.",
    "version": "0.1.4",
    "project_urls": {
        "Bug Tracker": "https://github.com/C418-11/C41811_Config/issues",
        "Documentation": "https://C41811Config.readthedocs.io",
        "Source Code": "https://github.com/C418-11/C41811_Config"
    },
    "split_keywords": [
        "config",
        " yaml",
        " toml",
        " json"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9b6b84f61afc437da7e2f7e28e4b6dc358dfa3db5cb4ed01619336df9f8f7ffd",
                "md5": "bc9d735aff014c2785318674cc7a7853",
                "sha256": "bad9ac52126e6b7171c956b11e2eee2ba9f92189471999aefd42f98667811615"
            },
            "downloads": -1,
            "filename": "C41811.Config-0.1.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "bc9d735aff014c2785318674cc7a7853",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.12",
            "size": 35144,
            "upload_time": "2025-01-12T20:02:07",
            "upload_time_iso_8601": "2025-01-12T20:02:07.450877Z",
            "url": "https://files.pythonhosted.org/packages/9b/6b/84f61afc437da7e2f7e28e4b6dc358dfa3db5cb4ed01619336df9f8f7ffd/C41811.Config-0.1.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "40b0e5c593649a1d456ff8615ffe0f2a9ab82bf247ba35b330c554aab5b4809b",
                "md5": "cfd2658717b055d2700fb18c3b5338c2",
                "sha256": "8b59693fda390084a402474a21f06d9bbad3d2465afab440381eb02554319453"
            },
            "downloads": -1,
            "filename": "c41811_config-0.1.4.tar.gz",
            "has_sig": false,
            "md5_digest": "cfd2658717b055d2700fb18c3b5338c2",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.12",
            "size": 26517,
            "upload_time": "2025-01-12T20:02:09",
            "upload_time_iso_8601": "2025-01-12T20:02:09.625504Z",
            "url": "https://files.pythonhosted.org/packages/40/b0/e5c593649a1d456ff8615ffe0f2a9ab82bf247ba35b330c554aab5b4809b/c41811_config-0.1.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-12 20:02:09",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "C418-11",
    "github_project": "C41811_Config",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "pydantic",
            "specs": [
                [
                    "~=",
                    "2.10.3"
                ]
            ]
        },
        {
            "name": "wrapt",
            "specs": [
                [
                    "~=",
                    "1.17.0"
                ]
            ]
        },
        {
            "name": "pyrsistent",
            "specs": [
                [
                    "~=",
                    "0.20.0"
                ]
            ]
        },
        {
            "name": "tox",
            "specs": [
                [
                    "~=",
                    "4.23.2"
                ]
            ]
        },
        {
            "name": "PyYAML",
            "specs": [
                [
                    "~=",
                    "6.0.2"
                ]
            ]
        },
        {
            "name": "ruamel.yaml",
            "specs": [
                [
                    "~=",
                    "0.18.6"
                ]
            ]
        },
        {
            "name": "toml",
            "specs": [
                [
                    "~=",
                    "0.10.2"
                ]
            ]
        }
    ],
    "lcname": "c41811.config"
}
        
Elapsed time: 0.37889s