https://github.com/pylhc/generic_parser
A parser for arguments and config files that also allows direct Python input and recursive parsing
https://github.com/pylhc/generic_parser
commandline-calls generic-parser ini-parser parser python
Last synced: about 2 months ago
JSON representation
A parser for arguments and config files that also allows direct Python input and recursive parsing
- Host: GitHub
- URL: https://github.com/pylhc/generic_parser
- Owner: pylhc
- License: mit
- Created: 2019-08-07T16:13:55.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2025-07-25T10:35:25.000Z (3 months ago)
- Last Synced: 2025-09-05T08:13:03.965Z (2 months ago)
- Topics: commandline-calls, generic-parser, ini-parser, parser, python
- Language: Python
- Homepage: https://pylhc.github.io/generic_parser/
- Size: 6.73 MB
- Stars: 2
- Watchers: 10
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Zenodo: .zenodo.json
Awesome Lists containing this project
README
# Generic Parser
[](https://github.com/pylhc/generic_parser/actions?query=workflow%3A%22Cron+Testing%22)
[](https://codeclimate.com/github/pylhc/generic_parser)
[](https://codeclimate.com/github/pylhc/generic_parser)
[](https://pypi.org/project/generic_parser/)
[](https://github.com/pylhc/generic_parser/)
[](https://anaconda.org/conda-forge/generic_parser)
[](https://zenodo.org/badge/latestdoi/201085116)
The package provides an all-around parser for arguments and config-files.
The creation of the arguments is similar to the ones from argparse, but the input can then be either from command line, a config file or directly from python.
See the [API documentation](https://pylhc.github.io/generic_parser/) for details.
## Installing
Installation is easily done via `pip`. The package is then used as `generic_parser`.
```bash
python -m pip install generic-parser
```
One can also install in a `conda` environment via the `conda-forge` channel with:
```bash
conda install -c conda-forge generic_parser
```
## Example Usage:
Content of `myscript.py`
```python
from generic_parser import entrypoint, EntryPointParameters
def get_arguments():
args = EntryPointParameters()
args.add_parameter(name="first",
flags=["-f", "--first"],
help="First Parameter, an int",
choices=[1, 2, 3],
type=int,
required=True,
)
args.add_parameter(name="second",
flags=["-s", "--second"],
help="Second Parameter, a string",
type=str,
default="default",
required=False,
)
return args
@entrypoint(get_arguments())
def main(opt, unknown):
print(opt.first == 1)
print(opt.second == "default")
if __name__ == '__main__':
main()
```
### Commandline
Calling that script with ``python myscript.py -f 1 -s "test"`` will result in:
```
True
False
```
It is assumed, that this is the standard mode of operation for your functions.
#### Config File
Further, one can also use a config file `config.ini` containing:
```
[Section]
first = 2
second = "Hello"
```
and run the script with `python myscript.py --entry_cfg config.ini` leading to
```
False
False
```
Config files are very useful if you want to rerun your code with the same or similar parameters.
Especially the declaration of a `[DEFAULT]` section can be helpful.
For further information about config files, check the python [Config Parser](https://docs.python.org/3/library/configparser.html).
### Python
Or call the function directly from python code:
```python
if __name__ == '__main__':
main(first=1, second="World")
```
```
True
False
```
This is incredibly helpful if one wants to write python-wrappers around entrypoint-functions,
and does not want to resort to commandline calls from python.
Note that also in this case all variables are validated, courtesy of the `dict_parser`.
`dict_parser` provides even multi-level dictionary checking functionality,
which is not used in the `Entrypoint`, but can be handy in other use-cases.
## License
This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details