![Oracle Drags Its Feet in the JavaScript Trademark Dispute](https://cdn.sanity.io/images/cgdhsj6q/production/919c3b22c24f93884c548d60cbb338e819ff2435-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
config-argument-parser
Advanced tools
A package to help automatically create command-line interface from configuration or code.
A package to help automatically create command-line interface from configuration or code.
It contains three modules CAP🧢(ConfigArgumentParser
), TAP🚰(TypeArgumentParser
), and GAP🕳️(GlobalArgumentParser
).
Read the documentation here.
Configuration files are highly readable and useful for specifying options, but sometimes they are not convenient as command-line interface. However, it requires writing a lot of code to produce a CLI. This package automates the building process, by utilizing the Python standard libraries configparser
and argparse
.
The design is to minimize the changes to your original scripts, so as to facilitate maintenance.
If you use class to store arguments, such as the script example.py
below.
import configargparser
class Args:
# Help message of the first argument. Help is optional.
a_string = "abc"
a_float = 1.23 # inline comments are omitted
# Help can span multiple lines.
# This is another line.
a_boolean = False
an_integer = 0
args = Args()
parser = configargparser.ConfigArgumentParser()
parser.parse_obj(args, shorts="sfb")
print(args.a_string)
print(args.a_float)
print(args.a_boolean)
print(args.an_integer)
In fact, only the snippet below is added to the original script. Moreover, removing this minimal modification does not affect the original script. shorts
is optional. If provided, add short options for the first few arguments in order.
import configargparser
parser = configargparser.ConfigArgumentParser()
parser.parse_obj(args)
Default arguments are defined as class attributes, and parsed arguments are stored as instance attributes. The good is that auto-completion can be triggered in editors.
Show help, python example.py -h
:
$ python example.py -h
usage: example.py [-h] [-s A_STRING] [-f A_FLOAT] [-b] [--an-integer AN_INTEGER]
options:
-h, --help show this help message and exit
-s A_STRING, --a-string A_STRING
Help message of the first argument. Help is optional. (default: abc)
-f A_FLOAT, --a-float A_FLOAT
a_float (default: 1.23)
-b, --a-boolean Help can span multiple lines. This is another line. (default: False)
--an-integer AN_INTEGER
an_integer (default: 0)
Run with options, for example, python example.py -b -f 1
:
$ python example.py -b -f 1
abc
1.0
True
0
Note that the values are changed.
For the best practice, see Case 4.
If you use configuration file, create an example script example.py
:
import configargparser
parser = configargparser.ConfigArgumentParser()
parser.read("config.ini")
parser.parse_args(shorts="sfb")
print("Configs:", parser.defaults)
print("Args: ", parser.args)
Create a configuration file config.ini
in the same directory:
[DEFAULT]
# Help message of the first argument. Help is optional.
a_string = 'abc'
a_float = 1.23 # inline comments are omitted
# Help can span multiple lines.
# This is another line.
a_boolean = False
an_integer = 0
Regular run, python example.py
:
$ python example.py
Configs: {'a_string': 'abc', 'a_float': 1.23, 'a_boolean': False, 'an_integer': 0}
Args: {'a_string': 'abc', 'a_float': 1.23, 'a_boolean': False, 'an_integer': 0}
Run with options, such as python example.py -b -f 1
:
$ python example.py -b -f 1
Configs: {'a_string': 'abc', 'a_float': 1.23, 'a_boolean': False, 'an_integer': 0}
Args: {'a_string': 'abc', 'a_float': 1.0, 'a_boolean': True, 'an_integer': 0}
If you use global variables, define the variables at top of file as the script example.py
below:
# [DEFAULT]
# Help message of the first argument. Help is optional.
a_string = "abc"
a_float = 1.23 # inline comments are omitted
# Help can span multiple lines.
# This is another line.
a_boolean = False
an_integer = 0
# [END]
import configargparser
parser = configargparser.ConfigArgumentParser()
parser.read_py("example.py")
parser.parse_args(shorts="sfb")
# update global variables
globals().update(parser.args)
print(a_string)
print(a_float)
print(a_boolean)
print(an_integer)
Use it as in case 1. For example, python example.py -b -f 1
:
$ python example.py -b -f 1
abc
1.0
True
0
Suppose you have a script example.py
below, which uses a dataclass
object to store arguments:
from dataclasses import dataclass
@dataclass
class Args:
# Help message of the first argument. Help is optional.
a_string: str = "abc"
a_float: float = 1.23 # inline comments are omitted
# Help can span multiple lines.
# This is another line.
a_boolean: bool = False
an_integer: int = 0
args = Args()
Add these lines to the script to create CLI:
import configargparser
parser = configargparser.TypeArgumentParser()
parser.parse_obj(args, shorts="sfb")
print(args)
Use it as in case 1. For example, python example.py -b -f 1
to change the values:
$ python example.py -b -f 1
Args(a_string='abc', a_float=1.0, a_boolean=True, an_integer=0)
This requires less code than case 3, but the comments are not parsed, as the script example.py
below:
a_string = "abc"
a_float = 1.23
a_boolean = False
an_integer = 0
import configargparser
parser = configargparser.GlobalArgumentParser()
parser.parse_globals(shorts="sfb")
print(a_string)
print(a_float)
print(a_boolean)
print(an_integer)
Use it as in case 1. For example, python example.py -b -f 1
:
$ python example.py -b -f 1
abc
1.0
True
0
Install from PyPI:
python -m pip install --upgrade pip
pip install config-argument-parser
Alternatively, install from source:
git clone https://github.com/yuanx749/config-argument-parser.git
cd config-argument-parser
then install in development mode:
git checkout main
python -m pip install --upgrade pip
pip install -e .
or:
git checkout dev
python -m pip install --upgrade pip
pip install -e .[dev]
pre-commit install
Uninstall:
pip uninstall config-argument-parser
This package uses Semantic Versioning.
FAQs
A package to help automatically create command-line interface from configuration or code.
We found that config-argument-parser demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.