Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Aparse is a python argparse extension with support for typing. It has support for argparse
and click
libraries. It uses function signatures to automatically register arguments to parsers.
Please refer to the documentation.
The following features are currently supported:
int
, float
, str
, bool
values both with and without default value.int
, float
, str
, bool
types.from_str
method.dataclass
arguments, where the dataclass is expanded into individual parametersdataclass
arguments.argparse
and click
libraries are fully supported.argparse
, when classes are used, it supports traversing inheritance chain.argparse
, custom prefixes can be used for groups of parameters.Why not argparse? Aparse does not force you to replace your argparse code. In fact, it was designed to extend argparse. You can combine the original argparse code and in some parts of the code, you can let aparse generate the arguments automatically.
Furthermore, aparse allows you to use conditional parameter parsing, which cannot be achieved with pure argparse.
Why not click? Same as with argparse, aparse extends click in such a way, that you can combine the original code with aparse. With aparse, you don't have to decorate your commands with all options, but you can let aparse manage them for you.
Why not docopt? With docopt you have to keep documentation in sync with your code. Aparse uses the signatures instead, which allows you to validate your code with a typechecker.
Install the library from pip:
$ pip install aparse
Extend a function with @add_argparse_arguments
decorator to add arguments automatically:
import argparse
from aparse import add_argparse_arguments
@add_argparse_arguments()
def example(arg1: str, arg2: int = 5):
pass
parser = argparse.ArgumentParser()
parser = example.add_argparse_arguments(parser)
args = parser.parse_args()
# Call example with args
example.from_argparse_arguments(args)
Extend a class with @add_argparse_arguments
decorator to construct it automatically:
import argparse
from aparse import add_argparse_arguments
@add_argparse_arguments()
class Example:
def __init__(self, arg1: str, arg2: int = 5):
pass
parser = argparse.ArgumentParser()
parser = Example.add_argparse_arguments(parser)
args = parser.parse_args()
# Construct Example with args
instance = Example.from_argparse_arguments(args)
Import aparse.click
instead of click
and let aparse
register all
the arguments and options:
# python main.py --arg1 test --arg2 4
from aparse import click
@click.command()
def example(arg1: str, arg2: int = 5):
pass
example()
When using click.groups
:
# python main.py example --arg1 test --arg2 4
from aparse import click
@click.group()
def main():
pass
@main.command('example')
def example(arg1: str, arg2: int = 5):
pass
main()
For further details please look at the documentation.
FAQs
Unknown package
We found that aparse 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
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.