{ "info": { "author": "Anthon van der Neut", "author_email": "a.van.der.neut@ruamel.eu", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python" ], "description": "argparse extensions\n===================\n\nThis package provides extensions to argparse on two levels:\n\n- basic argparse extensions: default subparser, subparser aliases in\n 2.X\n- additional actions that can be specified for add_argument\n- smart formatter that allows combination of defaults help formatting\n **and** raw desciptions\n- wrapper for argparse using decorators\n\nExtensions to basic argparse\n----------------------------\n\nInsert the following to be able to specify `aliases\n`_ in\nsubparser definitions in 2.6 and 2.7::\n\n from __future__ import print_function\n\n import sys\n from ruamel.std.argparse import ArgumentParser, SubParsersAction\n\n parser = ArgumentParser()\n if sys.version_info < (3,): # add aliases support\n parser.register('action', 'parsers', SubParsersAction)\n subparsers = parser.add_subparsers()\n checkout = subparsers.add_parser('checkout', aliases=['co'])\n checkout.add_argument('foo')\n args = parser.parse_args(['co', 'bar'])\n print(args)\n\n.. example code aliases.py\n\nResulting in::\n\n Namespace(foo='bar')\n\n\n.. example output aliases.py\n\nAdditional actions\n------------------\n\nCountAction\n+++++++++++\n\nCount up and down::\n\n from __future__ import print_function\n\n from ruamel.std.argparse import CountAction\n import argparse\n\n parser = argparse.ArgumentParser()\n parser.add_argument('--verbose', '-v', action=CountAction, const=1, nargs=0)\n parser.add_argument('--quiet', '-q', action=CountAction, dest='verbose',\n const=-1, nargs=0)\n\n print(parser.parse_args(\"--verbose -v -q\".split()))\n\n.. example code countaction.py\n\nresults in::\n\n Namespace(verbose=1)\n\n\n.. example output countaction.py\n\n\nSplitAppend\n+++++++++++\n\nAppend after splitting on \"``,``\". Running::\n\n from __future__ import print_function\n\n from ruamel.std.argparse import SplitAppendAction\n import argparse\n\n parser = argparse.ArgumentParser()\n parser.add_argument('-d', action=SplitAppendAction)\n\n print(parser.parse_args(\"-d ab -d cd -d kl -d mn\".split()))\n print(parser.parse_args(\"-d ab,cd,kl,mn\".split()))\n print(parser.parse_args(\"-d ab,cd -d kl,mn\".split()))\n\n.. example code splitaction.py\n\nresults in::\n\n Namespace(d=['ab', 'cd', 'kl', 'mn'])\n Namespace(d=['ab', 'cd', 'kl', 'mn'])\n Namespace(d=['ab', 'cd', 'kl', 'mn'])\n\n\n.. example output splitaction.py\n\nCheckSingleStoreAction\n++++++++++++++++++++++\n\nComplain if the same option is called multiple times::\n\n from __future__ import print_function\n\n from ruamel.std.argparse import CheckSingleStoreAction\n import argparse\n\n parser = argparse.ArgumentParser()\n parser.add_argument('--check', '-c', action=CheckSingleStoreAction, const=1,\n nargs=0)\n\n print(parser.parse_args(\"--check -c\".split()))\n\n.. example code checksingleaction.py\n\nresults in::\n\n WARNING: previous optional argument \"-c []\" overwritten by \"-c []\"\n Namespace(check=[])\n\n\n.. example output checksingleaction.py\n\nSmart formatting\n----------------\n\nYou can only specify one formatter in standard argparse, so you cannot\nboth have pre-formatted description. using\nRawDescriptionHelpFormatter,as well as default arguments with\nArgumentDefaultsHelpFormatter.\n\nThe ``SmartFormatter`` is a subclass of ``argparse.HelpFormatter`` and\nhas the normal formatter as default. Help text can be marked at the\nbeginning for variations in formatting:\n\n- ``\"R|..\"`` format raw, i.e. don't wrap and fill out, observer newline\n- ``\"*|..\"`` format a password help, never echo password defaults\n- ``\"D|..\"`` add defaults to **all** entries (that is why having ``*|``\n is important)\n\nThe version string is formatted using _split_lines and preserves any\nline breaks in the version string.\n\n::\n\n from __future__ import print_function\n\n from ruamel.std.argparse import SmartFormatter\n import argparse\n\n\n def exit(self, *args, **kw):\n pass\n\n argparse.ArgumentParser.exit = exit\n\n # the 'D|....' in the second pass triggers generating defaults for all entries,\n # while being smart about which one already have a %(default)s\n\n for index, log_s in enumerate(['log to file', 'D|log to file']):\n parser = argparse.ArgumentParser(formatter_class=SmartFormatter)\n\n parser.add_argument('--log', default='abc.log', help=log_s)\n parser.add_argument('--username',\n help='username to login with (default: %(default)s)')\n parser.add_argument('--password', help='*|password to use for login')\n parser.add_argument('--recursive', '-r', action='store_true',\n help=\"R|recurse into subdirectories \\nto find files\")\n parser.set_defaults(username='anthon', password=\"test123\")\n\n if index > 0:\n print('--------------------------------------\\n')\n parser.parse_args([\"--help\"])\n\n.. example code smartformatter.py\n\nresults in::\n\n usage: smartformatter.py [-h] [--log LOG] [--username USERNAME]\n [--password PASSWORD] [--recursive]\n\n optional arguments:\n -h, --help show this help message and exit\n --log LOG log to file\n --username USERNAME username to login with (default: anthon)\n --password PASSWORD password to use for login\n --recursive, -r recurse into subdirectories\n to find files\n --------------------------------------\n\n usage: smartformatter.py [-h] [--log LOG] [--username USERNAME]\n [--password PASSWORD] [--recursive]\n\n optional arguments:\n -h, --help show this help message and exit\n --log LOG log to file (default: abc.log)\n --username USERNAME username to login with (default: anthon)\n --password PASSWORD password to use for login (default: *******)\n --recursive, -r recurse into subdirectories\n to find files (default: False)\n\n\n.. example output smartformatter.py\n\n\nWrapping argparse\n-----------------\n\nWhen using argparse with subparser, each of which have their own\nfunction ( using ``.set_defaults(func=function``) that can be called,\nthere is a lot of repetitive code.\n\nAn alternative is provided by the ``ProgramBase`` class that should be\nsubclassed and the ``sub_parser``, ``option`` and ``version``\ndecorators that can be applied to methods of that subclass.\n\nA typical use case is::\n\n from __future__ import print_function\n\n import sys\n import os\n\n from ruamel.std.argparse import ProgramBase, option, sub_parser, version, \\\n SmartFormatter\n\n\n class TestCmd(ProgramBase):\n def __init__(self):\n super(TestCmd, self).__init__(\n formatter_class=SmartFormatter\n )\n\n # you can put these on __init__, but subclassing TestCmd\n # will cause that to break\n @option('--quiet', '-q', help='suppress verbosity', action='store_true',\n global_option=True)\n @version('version: 1.2.3')\n def _pb_init(self):\n # special name for which attribs are included in help\n pass\n\n def run(self):\n if self._args.func:\n return self._args.func()\n\n def parse_args(self, *args):\n self._parse_args(*args)\n\n @sub_parser(help='specific help for readit')\n @option('--name', default='abc')\n def readit(self):\n print('calling readit')\n\n @sub_parser('writeit', help='help for writeit')\n @option('--target')\n def other_name(self):\n print('calling writeit')\n\n\n n = TestCmd()\n n.parse_args(['--help'])\n n.run()\n\n.. example code testcmd.py\n\nand output::\n\n usage: testcmd.py [-h] [--quiet] [--version] {readit,writeit} ...\n\n positional arguments:\n {readit,writeit}\n readit specific help for readit\n writeit help for writeit\n\n optional arguments:\n -h, --help show this help message and exit\n --quiet, -q suppress verbosity\n --version show program's version number and exit\n\n\n.. example output testcmd.py\n\n\n\nThe method name is by default the name of the sub_parser. This can be\noverriden by providing a non-keyword argument to ``sub_parser``. The\nkeyword arguments are passed to the ``add_parser`` method.\n\nThe ``option`` functions as ``add_argument``. If ``option`` is put on\na method that is not a sub_parser, such an option will be a global\noption. These have to be specified before any sub_parser argument when\ninvoking the script. Often it is handy to specify such an option with\nan ``global_option=True`` keyword argument. This makes sure that\noption is added to all the sub_parsers as well. This allows you to\ninvoke both ``prog --quiet writeit`` and ``prog writeit --quiet``).\nYou can assing these options to ``__init__``, but when sub classing\n``TestCmd`` this will lead to problems. It is therefore better to pu\nthem on the special handled method ``_pb_init`` if subclassing might\nhappen.\n\nCare should be taken that all attributes on ``TestCmd`` are accessed\nduring scanning for sub parsers. In particular any property method\nwill be accessedi and its code executed.\n\nDefault command\n---------------\n\nIn case you want to have specific sub_parser be invoked as the default, you\ncan use::\n\n self._parse_args(default_sub_parser='show')\n\nto have the following invocations on the commandline of a program called\n``pass`` be the same::\n\n pass\n pass show\n\nHelp on all subcommands\n-----------------------\n\nIf you provide a True value to the optional help_all parameter for\n``self._parse_args()``::\n\n self._parse_args(help_all=True)\n\nthen the commandline is checked for the option ``--help-all`` and the global\nhelp is printed, follow by the help for each sub parsers, separated by a dashed\nline.\n\nTesting\n-------\n\nTesting is done using the `tox `_, which\nuses `virtualenv `_ and\n`pytest `_.\n\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/ruamel/std.argparse", "keywords": "argparse enhanced", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "ruamel.std.argparse", "package_url": "https://pypi.org/project/ruamel.std.argparse/", "platform": "", "project_url": "https://pypi.org/project/ruamel.std.argparse/", "project_urls": { "Homepage": "https://bitbucket.org/ruamel/std.argparse" }, "release_url": "https://pypi.org/project/ruamel.std.argparse/0.8.1/", "requires_dist": null, "requires_python": "", "summary": "Enhancements to argparse: extra actions, subparser aliases, smart formatter, a decorator based wrapper", "version": "0.8.1" }, "last_serial": 3030634, "releases": { "0.3.2": [ { "comment_text": "", "digests": { "md5": "8943a7518af6be5c29511e8deca1bac8", "sha256": "3f8e2b0af3eca5a0b4f6f128d4663c563b01a879737a963ef18dbd0aae6de521" }, "downloads": -1, "filename": "ruamel.std.argparse-0.3.2.tar.gz", "has_sig": false, "md5_digest": "8943a7518af6be5c29511e8deca1bac8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13051, "upload_time": "2014-10-16T06:44:39", "url": "https://files.pythonhosted.org/packages/8d/37/faef1f559ed53d22c9617859cf2c58b64000fc55c36360c3a140d4840d76/ruamel.std.argparse-0.3.2.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "a94c60622db35259339ede9c69e5db12", "sha256": "fb6a5272c7775b15d93c52e829d297ceb2982dc95a79d209877647de4ceb8aa1" }, "downloads": -1, "filename": "ruamel.std.argparse-0.4.1.tar.gz", "has_sig": false, "md5_digest": "a94c60622db35259339ede9c69e5db12", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16437, "upload_time": "2014-12-20T13:55:18", "url": "https://files.pythonhosted.org/packages/04/a1/833bbb079a9b4db9145d69dbc2bb0a408feacd935b0529c53608ab420f95/ruamel.std.argparse-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "a3d75bb4fc9320159971fb566203ac55", "sha256": "dac57ea95ee82799e2218d2e4cc119c0ec639bd6221fce8330dd5b961c9199b0" }, "downloads": -1, "filename": "ruamel.std.argparse-0.4.2.tar.gz", "has_sig": false, "md5_digest": "a3d75bb4fc9320159971fb566203ac55", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16639, "upload_time": "2015-01-12T17:03:41", "url": "https://files.pythonhosted.org/packages/41/50/f4b38b8a33be5c35eb39a347b491bef0062217bcc718ecd575a263ab016e/ruamel.std.argparse-0.4.2.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "a20b7f6b3f1400e54b1ccd00f9df82bc", "sha256": "64512e1251844fa8b1795095c1f42feed1d131132a1bf06d94788e6b1a92b47f" }, "downloads": -1, "filename": "ruamel.std.argparse-0.5.tar.gz", "has_sig": false, "md5_digest": "a20b7f6b3f1400e54b1ccd00f9df82bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16926, "upload_time": "2015-01-14T20:14:07", "url": "https://files.pythonhosted.org/packages/11/68/4e93432334da1a2c0c7de2256642fa90223a1263d10a83cfe4991e05b277/ruamel.std.argparse-0.5.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "59f5ef4d951084c21165a9408d88a3d7", "sha256": "e379971c854495ee51a85046f1e35f26d36bcd4dac69f800b041dadb6ef24b08" }, "downloads": -1, "filename": "ruamel.std.argparse-0.5.1.tar.gz", "has_sig": false, "md5_digest": "59f5ef4d951084c21165a9408d88a3d7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16933, "upload_time": "2015-01-14T20:17:01", "url": "https://files.pythonhosted.org/packages/1f/25/02e4a244dd12029193ec99a13098687207f235179ac8ed3cd3c7a7b8ca6c/ruamel.std.argparse-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "361b756b5ac6352b1a51dc3d72e51300", "sha256": "404dc973d1722ffdabbb5185b5ed2e9c2319547d0877c1984be3f50d60962048" }, "downloads": -1, "filename": "ruamel.std.argparse-0.5.2.tar.gz", "has_sig": false, "md5_digest": "361b756b5ac6352b1a51dc3d72e51300", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16640, "upload_time": "2015-08-27T09:01:59", "url": "https://files.pythonhosted.org/packages/fe/26/ebb1681a5d81a7fd27743eaa7e78e654a67d7ac3e70ebc916348589319a7/ruamel.std.argparse-0.5.2.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "d56f6c6e6a4751a39990fd4901e728cf", "sha256": "2c75cf48f025e20fdcdd4ad21d0f9b9a3c18c2bc0bc42a5a1b313e3868edc722" }, "downloads": -1, "filename": "ruamel.std.argparse-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d56f6c6e6a4751a39990fd4901e728cf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17912, "upload_time": "2015-08-27T18:17:31", "url": "https://files.pythonhosted.org/packages/6c/53/536dcc7733b6f606c55ca753a0efd4fd9faf9ff3f4a7be209545f8a81b91/ruamel.std.argparse-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d51145759e852e8dcb8e63de72ca2991", "sha256": "c159b2613f20160f1fdb203d799597e2f78de5da69fc4df69b6dd498ac417450" }, "downloads": -1, "filename": "ruamel.std.argparse-0.6.0.tar.gz", "has_sig": false, "md5_digest": "d51145759e852e8dcb8e63de72ca2991", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17595, "upload_time": "2015-08-27T18:17:25", "url": "https://files.pythonhosted.org/packages/b1/fe/91eccef54136ea6b3bdb17ee7c9270e3f9196387cc516244171a8ba62477/ruamel.std.argparse-0.6.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "334e699a03b25fd40cac99e9cf027ccc", "sha256": "a3f699e8702761dd4aefcafe3df6cf5742e3541b2637f021d638bd6b095c031b" }, "downloads": -1, "filename": "ruamel.std.argparse-0.7.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "334e699a03b25fd40cac99e9cf027ccc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18001, "upload_time": "2017-01-13T08:36:19", "url": "https://files.pythonhosted.org/packages/c6/66/f4da5ebaf02bb276eee385af63e0ca8a574d8497b55a84a895146605e2f6/ruamel.std.argparse-0.7.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b536066581011ac1812ac09b2c883704", "sha256": "0ad36090cce289f10c52b5d5594b8685b6df6035eb5ba23ce5fd1d8448eb2ac0" }, "downloads": -1, "filename": "ruamel.std.argparse-0.7.1.tar.gz", "has_sig": false, "md5_digest": "b536066581011ac1812ac09b2c883704", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22537, "upload_time": "2017-01-13T08:36:20", "url": "https://files.pythonhosted.org/packages/57/f1/40991c69d23654860ba3a73f0712e592f3b8eb49c2748f5253e9e9cbfa5d/ruamel.std.argparse-0.7.1.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "1265a18bdd1312a0833b095927cca037", "sha256": "aa35cdde164e1ab463279ca3a6797e17b1bc1c939671c405d271d0f7cbaf1c5e" }, "downloads": -1, "filename": "ruamel.std.argparse-0.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1265a18bdd1312a0833b095927cca037", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17939, "upload_time": "2017-06-23T14:06:08", "url": "https://files.pythonhosted.org/packages/0a/92/af9cedab7012ad10120517cef438a4056ca520d2a797a422390bb314bf52/ruamel.std.argparse-0.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "625a83196706f7043151818fd8eca8b7", "sha256": "bee3c55f2d8b9bd8ae929a2b10bfae81661e9fcf0278b18b85d63d98d0e2db12" }, "downloads": -1, "filename": "ruamel.std.argparse-0.8.0.tar.gz", "has_sig": false, "md5_digest": "625a83196706f7043151818fd8eca8b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23718, "upload_time": "2017-06-23T14:06:09", "url": "https://files.pythonhosted.org/packages/7d/d0/063320a6279558ea3e71f8f954212961ac3cbc7a6b1361f96e6b3ebafa31/ruamel.std.argparse-0.8.0.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "594b67cb3008cb45c19e060883aec3d2", "sha256": "5c85a7d442888a290d311ec809cbd9588045c9f9a145a2955ce7803efd60fd35" }, "downloads": -1, "filename": "ruamel.std.argparse-0.8.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "594b67cb3008cb45c19e060883aec3d2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17995, "upload_time": "2017-07-18T07:57:10", "url": "https://files.pythonhosted.org/packages/7e/f1/4148b62a1f92c5d7a46eb79046bcbf11be3c419f64677b12c3cac3b5ab9e/ruamel.std.argparse-0.8.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "37e4853c0add4f7389b6a21e8c6392b7", "sha256": "d5ba6534706dc7953c070768135d3fb11557681f86770ba877aa852bcf11c9d1" }, "downloads": -1, "filename": "ruamel.std.argparse-0.8.1.tar.gz", "has_sig": false, "md5_digest": "37e4853c0add4f7389b6a21e8c6392b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23934, "upload_time": "2017-07-18T07:57:12", "url": "https://files.pythonhosted.org/packages/e5/7f/8d07d4bf29c81f34242374a8b5d5983eed34f91c6266fd8cfdce226c26e0/ruamel.std.argparse-0.8.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "594b67cb3008cb45c19e060883aec3d2", "sha256": "5c85a7d442888a290d311ec809cbd9588045c9f9a145a2955ce7803efd60fd35" }, "downloads": -1, "filename": "ruamel.std.argparse-0.8.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "594b67cb3008cb45c19e060883aec3d2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17995, "upload_time": "2017-07-18T07:57:10", "url": "https://files.pythonhosted.org/packages/7e/f1/4148b62a1f92c5d7a46eb79046bcbf11be3c419f64677b12c3cac3b5ab9e/ruamel.std.argparse-0.8.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "37e4853c0add4f7389b6a21e8c6392b7", "sha256": "d5ba6534706dc7953c070768135d3fb11557681f86770ba877aa852bcf11c9d1" }, "downloads": -1, "filename": "ruamel.std.argparse-0.8.1.tar.gz", "has_sig": false, "md5_digest": "37e4853c0add4f7389b6a21e8c6392b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23934, "upload_time": "2017-07-18T07:57:12", "url": "https://files.pythonhosted.org/packages/e5/7f/8d07d4bf29c81f34242374a8b5d5983eed34f91c6266fd8cfdce226c26e0/ruamel.std.argparse-0.8.1.tar.gz" } ] }