No project description provided
Project description
click-anno
use annotation to create click app.
Compare with click api
Basic Arguments
# click
import click
@click.command()
@click.argument('filename')
def touch(filename):
click.echo(filename)
# click_anno
import click
import click_anno
@click_anno.command
def touch(filename):
click.echo(filename)
Variadic Arguments
# click
import click
@click.command()
@click.argument('src', nargs=-1)
@click.argument('dst', nargs=1)
def copy(src, dst):
for fn in src:
click.echo('move %s to folder %s' % (fn, dst))
# click_anno
import click
import click_anno
@click_anno.command
def copy(src: tuple, dst):
for fn in src:
click.echo('move %s to folder %s' % (fn, dst))
Basic Value Options
# click
import click
@click.command()
@click.option('--n', default=1)
def dots(n):
click.echo('.' * n)
# click_anno
import click
import click_anno
@click_anno.command
def dots(n=1):
click.echo('.' * n)
Required Value Options
# click
import click
@click.command()
@click.option('--n', required=True, type=int)
def dots(n):
click.echo('.' * n)
# click_anno
import click
import click_anno
@click_anno.command
def dots(*, n: int):
click.echo('.' * n)
Multi Value Options
# click
import click
@click.command()
@click.option('--pos', nargs=2, type=float)
def findme(pos):
click.echo('%s / %s' % pos)
# click_anno
from typing import Tuple
import click
import click_anno
@click_anno.command
def findme(*, pos: Tuple[float, float]):
click.echo('%s / %s' % pos)
Tuples as Multi Value Options
# click
import click
@click.command()
@click.option('--item', type=(str, int))
def putitem(item):
click.echo('name=%s id=%d' % item)
# click_anno
from typing import Tuple
import click
import click_anno
@click_anno.command
def putitem(*, item: (str, int)):
click.echo('name=%s id=%d' % item)
Boolean Flags
# click
import click
@click.command()
@click.option('--shout', is_flag=True)
def info(shout):
click.echo(f'{shout!r}')
# click_anno
import click
from click_anno import command
from click_anno.types import flag
@command
def func(shout: flag):
click.echo(f'{shout!r}')
Inject Context
# click
@command()
@click.pass_context
def sync(ctx): # `ctx` must be the 1st arg
click.echo(str(type(ctx)))
# click_anno
@command
def sync(a, ctx: click.Context, b): # `ctx` can be any location
click.echo(str(type(ctx)))
Group
# click
@click.group()
def cli():
click.echo('Running')
@cli.command()
def sync():
click.echo('Syncing')
# click_anno
@click_app
class App:
def __init__(self):
click.echo('Running')
def sync(self):
click.echo('Syncing')
Extensions
Enum
Enum is NOT Choice
.
# click
# does not support
# click_anno
import click
from click_anno import command
from enum import Enum, auto
class HashTypes(Enum):
md5 = auto()
sha1 = auto()
@command
def digest(hash_type: HashTypes):
assert isinstance(hash_type, HashTypes)
click.echo(hash_type)
Alias
# click
# does not support
# click_anno
@click_app
class App:
def sync(self):
click.echo('Syncing')
alias = sync
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
click_anno-0.0.7.tar.gz
(5.7 kB
view hashes)
Built Distribution
Close
Hashes for click_anno-0.0.7-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fdeff909b8f12bb5234e7a77ba5b5dafe6f31fc70be170be0d7ccdb43409322e |
|
MD5 | ab3c8c78da4dae941549dd914eb0ae36 |
|
BLAKE2b-256 | 431a9af158a38b7fe4ca013dd2b123ee30abc7124bd4e14de662095c3e5e743d |