Parser with automatic creation of parsers and subparsers for paths.
Project description
argparse-autogen
================
|PyPI| |PyPI| |PyPI version| |GitHub release| |Build Status| |codecov|
|GitHub license|
Parser with automatic creation of parsers and subparsers for paths.
Installation
------------
Supported versions of python: **``3.3+``** (because of
inspect.Signature, which was introduced in python 3.3)
.. code:: shell
pip install argparse-autogen
Usage
-----
``argparse_autogen.EndpointParser`` is intended to replace basic
``argparse.ArgumentParser``. It extends subparsers creation logic, and
adds a new special method ``add_endpoint``.
Simple example:
.. code:: python
import argparse_autogen
class MyCli():
def do_stuff(self, target, force=False):
"""
This does cool stuff!
:param str target: Target to execute a cool stuff
:param bool force: Force doing cool stuff
"""
print(target, force)
cli = MyCli()
parser = argparse_autogen.EndpointParser()
parser.add_endpoint('do_stuff', cli.do_stuff)
parser.parse_and_call(['do_stuff', 'my target']) # this will print "my target false"
parser.parse_and_call(['do_stuff', '--force', 'my target']) # this will print "my target true"
``add_endpoint`` method is clever enough to parse methods docstring and
add corresponding helps in arguments. For example,
``parser.parse_args(['do_stuff', '--help'])`` in above example will show
something like
::
usage: example.py do_stuff [-h] [--force]
This does cool stuff!
optional arguments:
-h, --help show this help message and exit
--force Force doing cool stuff
This magic is done by ``argparse_autogen.autospec`` function. It
introspects function signature, and adds corresponding argparse
arguments to parser. ``**kwargs`` are supported and can be passed as
``[key=value [key=value ...]]``. You can override argument settings by
passing ``argument_overrides`` option to ``add_endpoint``. This must be
a ``dict[str, dict]`` where keys are parameter name, and values are
parameters to override defaults passed to ``parser.add_argument``
More endpoint examples
----------------------
Nested class and complex paths:
.. code:: python
import argparse_autogen
class MyCli():
def __init__(self):
self.users = self.Users()
self.groups = self.Groups()
class Users():
def get(self, user_id): pass
def list(self, **filter): pass
def set_roles(self, user_id, *role): pass
def update(self, user_id, **fields): pass
class Groups():
def get(self, group_id): pass
cli = MyCli()
parser = argparse_autogen.EndpointParser()
parser.add_endpoint('users.get', cli.users.get, argument_overrides={'user_id': {'help': 'Users id'}})
parser.add_endpoint('users.list', cli.users.list)
parser.add_endpoint(cli.users.update)
# this will use __qualname__ of update func as path, lowercased and trailing and ending underscores removed.
# The first item of qualname is skipped, so it would be `users.update`, not `mycli.users.update`
# Alternatively, you can use autogeneration of paths and endpoints:
# parser.generate_endpoints(cli.users, root_path='users', endpoint_kwargs={'users.get': {'argument_overrides': {'user_id': {'help': 'Users id'}}}})
# Will create endpoints from class methods.
groups_get_parser = parser.add_endpoint('groups get', cli.groups.get, autospec=False)
groups_get_parser.add_argument('group_id', help='Group id')
users_parser = parser.get_endpoint_parser('users')
users_parser.description = 'Users operations'
parser.parse_and_call()
History
-------
1.2 (2017-03-01)
~~~~~~~~~~~~~~~~
- Ability to automatically generate path from func's qualname
1.1 (2017-02-28)
~~~~~~~~~~~~~~~~
- Filter args from func signature in call method #1
1.0 (2017-02-26)
~~~~~~~~~~~~~~~~
- First release
0.1 (2017-02-25)
~~~~~~~~~~~~~~~~
- Initial commit
.. |PyPI| image:: https://img.shields.io/pypi/status/argparse-autogen.svg
:target: https://github.com/sashgorokhov/argparse-autogen
.. |PyPI| image:: https://img.shields.io/pypi/pyversions/argparse-autogen.svg
:target: https://github.com/sashgorokhov/argparse-autogen
.. |PyPI version| image:: https://badge.fury.io/py/argparse-autogen.svg
:target: https://badge.fury.io/py/argparse-autogen
.. |GitHub release| image:: https://img.shields.io/github/release/sashgorokhov/argparse-autogen.svg
:target: https://github.com/sashgorokhov/argparse-autogen
.. |Build Status| image:: https://travis-ci.org/sashgorokhov/argparse-autogen.svg?branch=master
:target: https://travis-ci.org/sashgorokhov/argparse-autogen
.. |codecov| image:: https://codecov.io/gh/sashgorokhov/argparse-autogen/branch/master/graph/badge.svg
:target: https://codecov.io/gh/sashgorokhov/argparse-autogen
.. |GitHub license| image:: https://img.shields.io/badge/license-MIT-blue.svg
:target: https://raw.githubusercontent.com/sashgorokhov/argparse-autogen/master/LICENSE
================
|PyPI| |PyPI| |PyPI version| |GitHub release| |Build Status| |codecov|
|GitHub license|
Parser with automatic creation of parsers and subparsers for paths.
Installation
------------
Supported versions of python: **``3.3+``** (because of
inspect.Signature, which was introduced in python 3.3)
.. code:: shell
pip install argparse-autogen
Usage
-----
``argparse_autogen.EndpointParser`` is intended to replace basic
``argparse.ArgumentParser``. It extends subparsers creation logic, and
adds a new special method ``add_endpoint``.
Simple example:
.. code:: python
import argparse_autogen
class MyCli():
def do_stuff(self, target, force=False):
"""
This does cool stuff!
:param str target: Target to execute a cool stuff
:param bool force: Force doing cool stuff
"""
print(target, force)
cli = MyCli()
parser = argparse_autogen.EndpointParser()
parser.add_endpoint('do_stuff', cli.do_stuff)
parser.parse_and_call(['do_stuff', 'my target']) # this will print "my target false"
parser.parse_and_call(['do_stuff', '--force', 'my target']) # this will print "my target true"
``add_endpoint`` method is clever enough to parse methods docstring and
add corresponding helps in arguments. For example,
``parser.parse_args(['do_stuff', '--help'])`` in above example will show
something like
::
usage: example.py do_stuff [-h] [--force]
This does cool stuff!
optional arguments:
-h, --help show this help message and exit
--force Force doing cool stuff
This magic is done by ``argparse_autogen.autospec`` function. It
introspects function signature, and adds corresponding argparse
arguments to parser. ``**kwargs`` are supported and can be passed as
``[key=value [key=value ...]]``. You can override argument settings by
passing ``argument_overrides`` option to ``add_endpoint``. This must be
a ``dict[str, dict]`` where keys are parameter name, and values are
parameters to override defaults passed to ``parser.add_argument``
More endpoint examples
----------------------
Nested class and complex paths:
.. code:: python
import argparse_autogen
class MyCli():
def __init__(self):
self.users = self.Users()
self.groups = self.Groups()
class Users():
def get(self, user_id): pass
def list(self, **filter): pass
def set_roles(self, user_id, *role): pass
def update(self, user_id, **fields): pass
class Groups():
def get(self, group_id): pass
cli = MyCli()
parser = argparse_autogen.EndpointParser()
parser.add_endpoint('users.get', cli.users.get, argument_overrides={'user_id': {'help': 'Users id'}})
parser.add_endpoint('users.list', cli.users.list)
parser.add_endpoint(cli.users.update)
# this will use __qualname__ of update func as path, lowercased and trailing and ending underscores removed.
# The first item of qualname is skipped, so it would be `users.update`, not `mycli.users.update`
# Alternatively, you can use autogeneration of paths and endpoints:
# parser.generate_endpoints(cli.users, root_path='users', endpoint_kwargs={'users.get': {'argument_overrides': {'user_id': {'help': 'Users id'}}}})
# Will create endpoints from class methods.
groups_get_parser = parser.add_endpoint('groups get', cli.groups.get, autospec=False)
groups_get_parser.add_argument('group_id', help='Group id')
users_parser = parser.get_endpoint_parser('users')
users_parser.description = 'Users operations'
parser.parse_and_call()
History
-------
1.2 (2017-03-01)
~~~~~~~~~~~~~~~~
- Ability to automatically generate path from func's qualname
1.1 (2017-02-28)
~~~~~~~~~~~~~~~~
- Filter args from func signature in call method #1
1.0 (2017-02-26)
~~~~~~~~~~~~~~~~
- First release
0.1 (2017-02-25)
~~~~~~~~~~~~~~~~
- Initial commit
.. |PyPI| image:: https://img.shields.io/pypi/status/argparse-autogen.svg
:target: https://github.com/sashgorokhov/argparse-autogen
.. |PyPI| image:: https://img.shields.io/pypi/pyversions/argparse-autogen.svg
:target: https://github.com/sashgorokhov/argparse-autogen
.. |PyPI version| image:: https://badge.fury.io/py/argparse-autogen.svg
:target: https://badge.fury.io/py/argparse-autogen
.. |GitHub release| image:: https://img.shields.io/github/release/sashgorokhov/argparse-autogen.svg
:target: https://github.com/sashgorokhov/argparse-autogen
.. |Build Status| image:: https://travis-ci.org/sashgorokhov/argparse-autogen.svg?branch=master
:target: https://travis-ci.org/sashgorokhov/argparse-autogen
.. |codecov| image:: https://codecov.io/gh/sashgorokhov/argparse-autogen/branch/master/graph/badge.svg
:target: https://codecov.io/gh/sashgorokhov/argparse-autogen
.. |GitHub license| image:: https://img.shields.io/badge/license-MIT-blue.svg
:target: https://raw.githubusercontent.com/sashgorokhov/argparse-autogen/master/LICENSE
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
argparse-autogen-1.4.tar.gz
(5.8 kB
view details)
File details
Details for the file argparse-autogen-1.4.tar.gz
.
File metadata
- Download URL: argparse-autogen-1.4.tar.gz
- Upload date:
- Size: 5.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 46f83e11f0e3fb0456b3561c0e5acc6cdc0ae931c92dbc9bd0bb0878a07c30e5 |
|
MD5 | 960f48c2216d3726570f6a96c1a02a9a |
|
BLAKE2b-256 | 1007cc6ca682a7919b57cd42e73bba8052bce4de110bf586c2d18843ddb9782b |