{ "info": { "author": "Cologler", "author_email": "skyoflw@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "# click-anno\n\n![GitHub](https://img.shields.io/github/license/Cologler/click-anno-python.svg)\n[![Build Status](https://travis-ci.com/Cologler/click-anno-python.svg?branch=master)](https://travis-ci.com/Cologler/click-anno-python)\n[![PyPI](https://img.shields.io/pypi/v/click_anno.svg)](https://pypi.org/project/click-anno/)\n\nuse annotation to create click app.\n\n## Compare with click api\n\n### Basic Arguments\n\n``` py\n# click\nimport click\n\n@click.command()\n@click.argument('filename')\ndef touch(filename):\n click.echo(filename)\n\n# click_anno\nimport click\nimport click_anno\n\n@click_anno.command\ndef touch(filename):\n click.echo(filename)\n```\n\n### Variadic Arguments\n\n``` py\n# click\nimport click\n\n@click.command()\n@click.argument('src', nargs=-1)\n@click.argument('dst', nargs=1)\ndef copy(src, dst):\n for fn in src:\n click.echo('move %s to folder %s' % (fn, dst))\n\n# click_anno\nimport click\nimport click_anno\n\n@click_anno.command\ndef copy(src: tuple, dst):\n for fn in src:\n click.echo('move %s to folder %s' % (fn, dst))\n```\n\n### Basic Value Options\n\n``` py\n# click\nimport click\n\n@click.command()\n@click.option('--n', default=1)\ndef dots(n):\n click.echo('.' * n)\n\n# click_anno\nimport click\nimport click_anno\n\n@click_anno.command\ndef dots(n=1):\n click.echo('.' * n)\n```\n\n### Required Value Options\n\n``` py\n# click\nimport click\n\n@click.command()\n@click.option('--n', required=True, type=int)\ndef dots(n):\n click.echo('.' * n)\n\n# click_anno\nimport click\nimport click_anno\n\n@click_anno.command\ndef dots(*, n: int):\n click.echo('.' * n)\n```\n\n### Multi Value Options\n\n``` py\n# click\nimport click\n\n@click.command()\n@click.option('--pos', nargs=2, type=float)\ndef findme(pos):\n click.echo('%s / %s' % pos)\n\n# click_anno\nfrom typing import Tuple\nimport click\nimport click_anno\n\n@click_anno.command\ndef findme(*, pos: Tuple[float, float]):\n click.echo('%s / %s' % pos)\n```\n\n### Tuples as Multi Value Options\n\n``` py\n# click\nimport click\n\n@click.command()\n@click.option('--item', type=(str, int))\ndef putitem(item):\n click.echo('name=%s id=%d' % item)\n\n# click_anno\nfrom typing import Tuple\nimport click\nimport click_anno\n\n@click_anno.command\ndef putitem(*, item: (str, int)):\n click.echo('name=%s id=%d' % item)\n```\n\n### Boolean Flags\n\n``` py\n# click\nimport click\n\n@click.command()\n@click.option('--shout', is_flag=True)\ndef info(shout):\n click.echo(f'{shout!r}')\n\n# click_anno\nimport click\nfrom click_anno import command\nfrom click_anno.types import flag\n\n@command\ndef func(shout: flag):\n click.echo(f'{shout!r}')\n```\n\n### Inject Context\n\n``` py\n# click\n@command()\n@click.pass_context\ndef sync(ctx): # `ctx` must be the 1st arg\n click.echo(str(type(ctx)))\n\n# click_anno\n@command\ndef sync(a, ctx: click.Context, b): # `ctx` can be any location\n click.echo(str(type(ctx)))\n```\n\n### Group\n\n``` py\n# click\n@click.group()\ndef cli():\n click.echo('Running')\n\n@cli.command()\ndef sync():\n click.echo('Syncing')\n\n# click_anno\n@click_app\nclass App:\n def __init__(self):\n click.echo('Running')\n\n def sync(self):\n click.echo('Syncing')\n```\n\n## Extensions\n\n### Enum\n\nEnum is **NOT** `Choice`.\n\n``` py\n# click\n# does not support\n\n# click_anno\nimport click\nfrom click_anno import command\nfrom enum import Enum, auto\n\nclass HashTypes(Enum):\n md5 = auto()\n sha1 = auto()\n\n@command\ndef digest(hash_type: HashTypes):\n assert isinstance(hash_type, HashTypes)\n click.echo(hash_type)\n```\n\n### Alias\n\n``` py\n# click\n# does not support\n\n# click_anno\n@click_app\nclass App:\n def sync(self):\n click.echo('Syncing')\n\n alias = sync\n```\n\n### show default in argument\n\nby default, `click.argument` did not accept `show_default` option.\n\nclick_anno was modify this.\n\n``` py\n@command\ndef func(a=10, *_):\n pass\n\n# with --help\n# Usage: func [OPTIONS] [A=10]\n# ...\n```\n\n## Arguments vs Options\n\nclick only has two kinds of parameters:\n\n* Options\n* Arguments - work similarly to options but are positional.\n\nBy default in python, arguments like `*args` and options like `**kwargs`.\n\nIn example `func(a, b=1, *args, d, e=2)`, `a` `b` `args` are arguments, `d` `e` are options.\n\nIf you don't want the args `*args`, rename it to `*_`.\n**click_anno will ignore all args named `_`**\n\nIn example `func(a, b=1)`, `*args` did not exists. so `a` is argument, `b` is option.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Cologler/click-anno-python", "keywords": "click", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "click-anno", "package_url": "https://pypi.org/project/click-anno/", "platform": "", "project_url": "https://pypi.org/project/click-anno/", "project_urls": { "Homepage": "https://github.com/Cologler/click-anno-python" }, "release_url": "https://pypi.org/project/click-anno/0.0.8/", "requires_dist": [ "click" ], "requires_python": "", "summary": "", "version": "0.0.8" }, "last_serial": 5220825, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "1d55eddc5bced88d4ca53c9c49b193f1", "sha256": "fd805a3f4926d989f7eb088a8b5dfb17b0dfcb530545860c2bbcb475a3daa604" }, "downloads": -1, "filename": "click_anno-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "1d55eddc5bced88d4ca53c9c49b193f1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4261, "upload_time": "2019-01-21T08:48:45", "url": "https://files.pythonhosted.org/packages/79/e6/125c0233ae2ae9b9af2dbc8d37042f76d601be46f4207df3992caf47a4f5/click_anno-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9cdd6a2aad62e49889f1b9d794a7e551", "sha256": "1bca6c946171c9b6b81951ce8fd8aee49640265c697b48ad7e3bac07ef2ee61a" }, "downloads": -1, "filename": "click_anno-0.0.1.tar.gz", "has_sig": false, "md5_digest": "9cdd6a2aad62e49889f1b9d794a7e551", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3063, "upload_time": "2019-01-21T08:48:47", "url": "https://files.pythonhosted.org/packages/31/72/0d7703cc5fd131605fbb10d9251544a552c1c60df2fcb67ac1f7e1b4dc1c/click_anno-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "8c1777e20164f9e9f7544c2caa2156c0", "sha256": "40935bd0834b380fef79978ee2d2a550bf2edda5da3c27ebd6ce7ab2dac3404f" }, "downloads": -1, "filename": "click_anno-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "8c1777e20164f9e9f7544c2caa2156c0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5334, "upload_time": "2019-04-02T05:53:49", "url": "https://files.pythonhosted.org/packages/e8/98/4b07062992b0ad5e77c4c69b32d5c38845c7ca5c4ccbb869eff3e4befed9/click_anno-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ef08cda136a12546bc152620a6c5715a", "sha256": "565e72bf20c73435dea14b18596050330a0c3c34362287c5d3404f8a1022b641" }, "downloads": -1, "filename": "click_anno-0.0.2.tar.gz", "has_sig": false, "md5_digest": "ef08cda136a12546bc152620a6c5715a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4215, "upload_time": "2019-04-02T05:53:50", "url": "https://files.pythonhosted.org/packages/c4/a0/57f1c0fd480171ace8579e18eeec17ab70067508e32dbd75aeb362ac6123/click_anno-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "09dcc859799293ccd207072e682d3a28", "sha256": "e6408706f6af1ea60a341f9e9f82e7b4d14d0ab7033508725d700f2796b629c1" }, "downloads": -1, "filename": "click_anno-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "09dcc859799293ccd207072e682d3a28", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6337, "upload_time": "2019-04-02T21:30:35", "url": "https://files.pythonhosted.org/packages/6f/25/3214678a043585b843f410b6fb3f8a0399bcff93112bfbbfb0a90cf3550d/click_anno-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "004fe8e832f4116a53bf1a5d3cb99b5a", "sha256": "8f272afae38ee5539d87ba7246f536e47c02bfcc6a62638a5293e63897ac3176" }, "downloads": -1, "filename": "click_anno-0.0.3.tar.gz", "has_sig": false, "md5_digest": "004fe8e832f4116a53bf1a5d3cb99b5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4707, "upload_time": "2019-04-02T21:30:36", "url": "https://files.pythonhosted.org/packages/68/e5/905e6489ce30575516da8210ba7554181b1a63b0c7598568e7bde94bbe41/click_anno-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "c00f1db3b4d3570c31567c6e175b3b19", "sha256": "a2b8cd3e10045ec059056f8b81acffc03667d6cc34518401c27b733ab709ce7f" }, "downloads": -1, "filename": "click_anno-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "c00f1db3b4d3570c31567c6e175b3b19", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6794, "upload_time": "2019-04-13T06:28:54", "url": "https://files.pythonhosted.org/packages/a3/43/c0ffd8fe6d9651b44a54b770bbf48852fb0e3f39e8e3002d6ec2a322b0d5/click_anno-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6b69670768c604e13f68273fbe01ea37", "sha256": "61de12af303c3e948957977ef4f5eaa92b4c094a5b0435f65122dfa2f9014ec3" }, "downloads": -1, "filename": "click_anno-0.0.4.tar.gz", "has_sig": false, "md5_digest": "6b69670768c604e13f68273fbe01ea37", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5170, "upload_time": "2019-04-13T06:28:55", "url": "https://files.pythonhosted.org/packages/ee/d3/ba86dee5d5f5ec112652a9f46bb9de4133c1a8ba105e7bb4db506c9cb5ca/click_anno-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "32b045a582a456a220b189a8d9dfc853", "sha256": "71494ee1d5c06c87d6c133e8ab3345700d22f9438f04893498b3559701295a3d" }, "downloads": -1, "filename": "click_anno-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "32b045a582a456a220b189a8d9dfc853", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7179, "upload_time": "2019-04-15T13:21:30", "url": "https://files.pythonhosted.org/packages/39/cb/c7fb662ff5345aa34b8010cace4b8e01e9c7d48e940f86a8cc4dfcd11cde/click_anno-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "892efe78b2c90f02dd8e095d0e950bdb", "sha256": "5b1aec890c0a685faca1d2c0b9fc7111d37286a3a0be82261181b06008e2c349" }, "downloads": -1, "filename": "click_anno-0.0.5.tar.gz", "has_sig": false, "md5_digest": "892efe78b2c90f02dd8e095d0e950bdb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5402, "upload_time": "2019-04-15T13:21:31", "url": "https://files.pythonhosted.org/packages/ec/d3/688d8debb5a0860b2cda78e677b08751349697a7370f653a031950e2c7d0/click_anno-0.0.5.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "ab3c8c78da4dae941549dd914eb0ae36", "sha256": "fdeff909b8f12bb5234e7a77ba5b5dafe6f31fc70be170be0d7ccdb43409322e" }, "downloads": -1, "filename": "click_anno-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "ab3c8c78da4dae941549dd914eb0ae36", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7566, "upload_time": "2019-05-02T11:09:21", "url": "https://files.pythonhosted.org/packages/43/1a/9af158a38b7fe4ca013dd2b123ee30abc7124bd4e14de662095c3e5e743d/click_anno-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0cafc077ccd36cdb22ab73abdc92b273", "sha256": "408856bbf8374e4c94db572c103aa29a5375e9ada32fcf20f3ba9aa4330d6135" }, "downloads": -1, "filename": "click_anno-0.0.7.tar.gz", "has_sig": false, "md5_digest": "0cafc077ccd36cdb22ab73abdc92b273", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5743, "upload_time": "2019-05-02T11:09:22", "url": "https://files.pythonhosted.org/packages/7e/59/3cc6ab4d3126cbe269fa80ed9d9949ed57e2f978acd1b24cbed53ece071d/click_anno-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "054ccc82cc85a2f26295ec28690c9d48", "sha256": "8f037398b2b99afe420fca9eeda03fe60facbb016b5e34e240f608cc1b016ce4" }, "downloads": -1, "filename": "click_anno-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "054ccc82cc85a2f26295ec28690c9d48", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8647, "upload_time": "2019-05-03T08:11:25", "url": "https://files.pythonhosted.org/packages/04/53/cccb94a790341fb617827c71a201293ef7070e69a3126d3e144e746c30f1/click_anno-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7e73305c9abdd78cb43004bf39ca2aaa", "sha256": "94493a3582e927958503d5732a00f7a36d028196b840d966198125c88de282a8" }, "downloads": -1, "filename": "click_anno-0.0.8.tar.gz", "has_sig": false, "md5_digest": "7e73305c9abdd78cb43004bf39ca2aaa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7472, "upload_time": "2019-05-03T08:11:27", "url": "https://files.pythonhosted.org/packages/6c/2c/27fb7adf0d9934097bb937c7fa17679936f1d2a920fec4d837a6db9f3f65/click_anno-0.0.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "054ccc82cc85a2f26295ec28690c9d48", "sha256": "8f037398b2b99afe420fca9eeda03fe60facbb016b5e34e240f608cc1b016ce4" }, "downloads": -1, "filename": "click_anno-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "054ccc82cc85a2f26295ec28690c9d48", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8647, "upload_time": "2019-05-03T08:11:25", "url": "https://files.pythonhosted.org/packages/04/53/cccb94a790341fb617827c71a201293ef7070e69a3126d3e144e746c30f1/click_anno-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7e73305c9abdd78cb43004bf39ca2aaa", "sha256": "94493a3582e927958503d5732a00f7a36d028196b840d966198125c88de282a8" }, "downloads": -1, "filename": "click_anno-0.0.8.tar.gz", "has_sig": false, "md5_digest": "7e73305c9abdd78cb43004bf39ca2aaa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7472, "upload_time": "2019-05-03T08:11:27", "url": "https://files.pythonhosted.org/packages/6c/2c/27fb7adf0d9934097bb937c7fa17679936f1d2a920fec4d837a6db9f3f65/click_anno-0.0.8.tar.gz" } ] }