{"id":18790985,"url":"https://github.com/hansbug/argsloader","last_synced_at":"2025-06-29T09:02:50.488Z","repository":{"id":42079539,"uuid":"463146513","full_name":"HansBug/argsloader","owner":"HansBug","description":"Configuration Parsing and Management Based on ChainLoader","archived":false,"fork":false,"pushed_at":"2022-04-13T13:51:20.000Z","size":12554,"stargazers_count":0,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-29T09:02:27.671Z","etag":null,"topics":["configuration","python3","version-control"],"latest_commit_sha":null,"homepage":"https://hansbug.github.io/argsloader/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HansBug.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-02-24T12:49:56.000Z","updated_at":"2022-02-24T13:15:17.000Z","dependencies_parsed_at":"2022-08-12T04:20:25.639Z","dependency_job_id":null,"html_url":"https://github.com/HansBug/argsloader","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/HansBug/argsloader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HansBug%2Fargsloader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HansBug%2Fargsloader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HansBug%2Fargsloader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HansBug%2Fargsloader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HansBug","download_url":"https://codeload.github.com/HansBug/argsloader/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HansBug%2Fargsloader/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262566830,"owners_count":23329680,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["configuration","python3","version-control"],"created_at":"2024-11-07T21:14:18.566Z","updated_at":"2025-06-29T09:02:50.464Z","avatar_url":"https://github.com/HansBug.png","language":"Python","readme":"# argsloader\n\n[![PyPI](https://img.shields.io/pypi/v/argsloader)](https://pypi.org/project/argsloader/)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/argsloader)](https://pypi.org/project/argsloader/)\n![Loc](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/HansBug/71f7be2801b7777b3708a0bc278d43c2/raw/loc.json)\n![Comments](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/HansBug/71f7be2801b7777b3708a0bc278d43c2/raw/comments.json)\n\n[![Docs Deploy](https://github.com/HansBug/argsloader/workflows/Docs%20Deploy/badge.svg)](https://github.com/HansBug/argsloader/actions?query=workflow%3A%22Docs+Deploy%22)\n[![Code Test](https://github.com/HansBug/argsloader/workflows/Code%20Test/badge.svg)](https://github.com/HansBug/argsloader/actions?query=workflow%3A%22Code+Test%22)\n[![Badge Creation](https://github.com/HansBug/argsloader/workflows/Badge%20Creation/badge.svg)](https://github.com/HansBug/argsloader/actions?query=workflow%3A%22Badge+Creation%22)\n[![Package Release](https://github.com/HansBug/argsloader/workflows/Package%20Release/badge.svg)](https://github.com/HansBug/argsloader/actions?query=workflow%3A%22Package+Release%22)\n[![codecov](https://codecov.io/gh/HansBug/argsloader/branch/main/graph/badge.svg?token=XJVDP4EFAT)](https://codecov.io/gh/HansBug/argsloader)\n\n[![GitHub stars](https://img.shields.io/github/stars/HansBug/argsloader)](https://github.com/HansBug/argsloader/stargazers)\n[![GitHub forks](https://img.shields.io/github/forks/HansBug/argsloader)](https://github.com/HansBug/argsloader/network)\n![GitHub commit activity](https://img.shields.io/github/commit-activity/m/HansBug/argsloader)\n[![GitHub issues](https://img.shields.io/github/issues/HansBug/argsloader)](https://github.com/HansBug/argsloader/issues)\n[![GitHub pulls](https://img.shields.io/github/issues-pr/HansBug/argsloader)](https://github.com/HansBug/argsloader/pulls)\n[![Contributors](https://img.shields.io/github/contributors/HansBug/argsloader)](https://github.com/HansBug/argsloader/graphs/contributors)\n[![GitHub license](https://img.shields.io/github/license/HansBug/argsloader)](https://github.com/HansBug/argsloader/blob/master/LICENSE)\n\nConfiguration Parsing and Management Based on [chainloader](https://github.com/HansBug/chainloader).\n\nThe argsloader library's main goal is to extract and change configuration data before implementing it using its computational mechanism:\n\n* Reusability of local configuration modules\n\n* Scalability and composition of configuration components\n\n* Constructing complicated configuration data validation quickly\n\n\n## Installation\n\nYou can simply install it with `pip` command line from the official PyPI site.\n\n```shell\npip install argsloader\n```\n\nFor more information about installation, you can refer to [Installation](https://HansBug.github.io/argsloader/main/tutorials/installation/index.html).\n\n## Quick Start\n\n### Painless Try\n\nA simple usage is like above\n\n```python\nfrom argsloader.units import yesno, number, is_type, interval\n\nif __name__ == '__main__':\n    yn = yesno()  # yes-no option\n    print(yn('yes'))  # True\n    print(yn('no'))  # False\n    print(yn(True))  # True\n    print(yn(False))  # False\n\n    num = number()  # any number\n    print(num(1))  # 1\n    print(num('1.2'))  # 1.2\n    print(num('0x4f'))  # 79\n\n    int_ = number() \u003e\u003e is_type(int)  # any int number\n    print(num(1))  # 1\n    print(num('0x4f'))  # 79\n    print(num(1.2))  # TypeError\n\n    val_ = number() \u003e\u003e interval.LR(0, 10)  # number within [0, 10]\n    print(num(1))  # 1\n    print(num(1.2))  # 1.2\n    print(num(11))  # ValueError\n\n```\n\nAfter the unit is built, it can be used to transform and validate the given value.\n\n### Full Validation\n\nSometimes, there may be multiple errors in the given value, but if you directly call corresponding loader (i.e. call the pre-defined `__call__` method), only the first error will be raised.\n\n```python\nfrom argsloader.units import is_type, interval\n\nif __name__ == '__main__':\n    in_ = is_type(int) \u0026 interval.LR(0, 10)  # int within [0, 10]\n    print(in_(1))  # OK\n    print(in_(10))  # OK\n    print(in_(11.2))  # not an int, not in [0, 10] neither\n```\n\nThe output should be\n\n```\n1\n10\nTraceback (most recent call last):\n  File \"test_main.py\", line 7, in \u003cmodule\u003e\n    print(in_(11.2))  # not an int, not in [0, 10] neither\n  File \"/home/hansbug/projects/argsloader/argsloader/units/base.py\", line 237, in __call__\n    return self.call(v, 'FIRST')\n  File \"/home/hansbug/projects/argsloader/argsloader/units/base.py\", line 249, in call\n    return self._process(PValue(v, ())).act(err_mode)\n  File \"/home/hansbug/projects/argsloader/argsloader/base/result.py\", line 264, in act\n    raise self._first_error()\n  File \"/home/hansbug/projects/argsloader/argsloader/units/build.py\", line 80, in _easy_process\n    pres = self._transform(v, pvalues)\n  File \"/home/hansbug/projects/argsloader/argsloader/units/build.py\", line 105, in _transform\n    v.value, nested_map(lambda x: x.value, pres)\n  File \"/home/hansbug/projects/argsloader/argsloader/units/type.py\", line 43, in _calculate\n    raise TypeError(f'Value type not match - {_tname(type_)} expected but {_tname(type(v))} found.')\nTypeParseError: Value type not match - int expected but float found.\n```\n\n\n\nTo resolve this problem, you can use method `call` to show them all.\n\n```python\nfrom argsloader.units import is_type, interval\n\nif __name__ == '__main__':\n    in_ = is_type(int) \u0026 interval.LR(0, 10)  # int within [0, 10]\n    print(in_.call(1))  # OK\n    print(in_.call(10))  # OK\n    print(in_.call(11.2))  # not an int, not in [0, 10] neither\n\n```\n\nThe output should be\n\n```\n1\n10\nTraceback (most recent call last):\n  File \"test_main.py\", line 7, in \u003cmodule\u003e\n    print(in_.call(11.2))\n  File \"/home/hansbug/projects/argsloader/argsloader/units/base.py\", line 249, in call\n    return self._process(PValue(v, ())).act(err_mode)\n  File \"/home/hansbug/projects/argsloader/argsloader/base/result.py\", line 268, in act\n    raise self._full_error()\nargsloader.base.exception.MultipleParseError: (2 errors)\n  \u003croot\u003e: TypeParseError: Value type not match - int expected but float found.\n  \u003croot\u003e: ValueParseError: Value not in interval - [0, 10] expected but 11.2 found.\n```\n\n\n\nFor further examples and best practice, see\n\n* [Cheat Sheet of Units (still under developing)](https://hansbug.github.io/argsloader/main/tutorials/cheat_sheet/index.html)\n* [Example of C51 Configuration](https://hansbug.github.io/argsloader/main/best_practice/c51/index.html)\n* [Example of Subprocess Env Manager](https://hansbug.github.io/argsloader/main/best_practice/subprocess_env_manager/index.html)\n* [Example of One vs One Configuration](https://hansbug.github.io/argsloader/main/best_practice/one_vs_one/index.html)\n\n## Contributing\n\nWe appreciate all contributions to improve `argsloader`, both logic and system designs. Please refer to CONTRIBUTING.md for more guides.\n\n## License\n\n`argsloader` released under the Apache 2.0 license.\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhansbug%2Fargsloader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhansbug%2Fargsloader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhansbug%2Fargsloader/lists"}