Metadata-Version: 2.0
Name: argparse-prompt
Version: 0.0.2
Summary: Wrapper for the built-in Argparse, allowing missing command-line arguments to be filled in by the user via interactive prompts
Home-page: https://github.com/MelbourneGenomics/ArgparsePrompt
Author: Michael Milton
Author-email: michael.r.milton@gmail.com
License: GPL
Keywords: argparse prompt interactive argument
Platform: UNKNOWN

ArgparsePrompt
==============

Wrapper for the built-in Argparse, allowing missing command-line
arguments to be filled in by the user via interactive prompts

Installation
============

ArgparsePrompt has not yet been published to PYPI, but in the meantime,
you can install it using pip+git:

.. code:: bash

    pip install git+https://github.com/MelbourneGenomics/ArgparsePrompt

Usage
=====

Basic Usage
-----------

The only public interface of this module is the ``PromptParser`` class,
which is a subclass of Python's
`ArgumentParser <https://docs.python.org/3/library/argparse.html>`__.
Use this class in exactly the same way that you would use
ArgumentParser, except that, if any argument does not have a specified
``default`` value, and a value is not provided for it on the
commandline, the ``PromptParser`` will prompt for a value for this
argument using ``input()``, which is read from stdin.

Consider the code below (taken from one of the unit tests):

.. code:: python

    from argparse_prompt import PromptParser

    parser = PromptParser()
    parser.add_argument('--argument', '-a', help='An argument you could provide', default='foo')
    print(parser.parse_args().argument)

If you run this script with a value for ``argument``, the parsing will
run as normal:

::

    $ python test/default_parser.py --argument 12
    12

However if you don't specify a value for ``arg``, the parser will prompt
you for one

::

    $ python test/default_parser.py
    argument: An argument you could provide
    > (foo) car
    car

Default Values
--------------

Since this argument has a default value, you can also just hit enter and
this value will be used automatically:

::

    python test/default_parser.py
    argument: An argument you could provide
    > (foo) 
    foo

Type Checking
-------------

You can also specify a type for the argument in the normal way:

.. code:: python

    from argparse_prompt import PromptParser

    parser = PromptParser()
    parser.add_argument('--argument', '-a', help='An argument you could provide', type=int)
    print(parser.parse_args().argument)

If you do, this type checking will be used for the value you enter at
the prompt:

::

    $ python test/typed_parser.py  
    argument: An argument you could provide
    abc
    Argument "argument" was given a value not of type <class 'int'>

Situationally Disabling the Prompt
----------------------------------

If you use the ``prompt`` argument to ``add_argument``, parsing will be
disabled:

.. code:: python

    parser.add_argument('--argument', '-a', help='An argument you could provide', default='foo', prompt=False)

Also, if you want to disable all prompting (for an automated script, for
example), just set the ``ARGPARSE_PROMPT_AUTO`` to a truthy value:

.. code:: bash

    ARGPARSE_PROMPT_AUTO=1 python test/default_parser.py


