Skip to main content
Help us improve PyPI by participating in user testing. All experience levels needed!

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

Project details


Release history Release notifications

This version
History Node

1.4

History Node

1.3.3

History Node

1.3.2

History Node

1.3.1

History Node

1.3

History Node

1.2.1

History Node

1.2

History Node

1.1

History Node

1.0.1

History Node

1.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
argparse-autogen-1.4.tar.gz (5.8 kB) Copy SHA256 hash SHA256 Source None Mar 27, 2017

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page