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 for details.
Installation is easily done via pip
. The package is then used as generic_parser
.
python -m pip install generic-parser
One can also install in a conda
environment via the conda-forge
channel with:
conda install -c conda-forge generic_parser
Content of myscript.py
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()
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.
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.
Or call the function directly from python code:
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.
This project is licensed under the MIT License - see the LICENSE.md file for details