From 2eb308bbdb89c5b11ac4e561515527b3442b5fc5 Mon Sep 17 00:00:00 2001 From: Charles Tapley Hoyt Date: Wed, 11 May 2016 18:17:13 +0200 Subject: [PATCH 1/3] added cli script --- setup.py | 8 +++- src/pushover_complete/pushover_api.py | 3 ++ src/pushover_complete/pushover_cli.py | 59 +++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 src/pushover_complete/pushover_cli.py diff --git a/setup.py b/setup.py index c36638c..63b5cf8 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ 'Programming Language :: Python :: 3.5', 'Topic :: Communications' ] -INSTALL_REQUIRES = ['requests'] +INSTALL_REQUIRES = ['requests', 'click'] EXTRAS_REQUIRE = {} TESTS_REQUIRE = ['tox'] @@ -69,5 +69,9 @@ def get_long_description(): package_dir={'': 'src'}, install_requires=INSTALL_REQUIRES, extras_require=EXTRAS_REQUIRE, - tests_require=TESTS_REQUIRE + tests_require=TESTS_REQUIRE, + entry_points=''' + [console_scripts] + pushover=pushover_complete.pushover_cli:cli + ''' ) diff --git a/src/pushover_complete/pushover_api.py b/src/pushover_complete/pushover_api.py index dd382be..cbfb4e8 100644 --- a/src/pushover_complete/pushover_api.py +++ b/src/pushover_complete/pushover_api.py @@ -21,6 +21,9 @@ class PushoverAPI(object): def __init__(self, token): self.token = token + def __repr__(self): + return "PushoverAPI(token={})".format(self.token) + def _generic_get(self, endpoint, url_parameter=None, payload=None, session=None): """A method for abstracting GET requests to the Pushover API. diff --git a/src/pushover_complete/pushover_cli.py b/src/pushover_complete/pushover_cli.py new file mode 100644 index 0000000..7c6b870 --- /dev/null +++ b/src/pushover_complete/pushover_cli.py @@ -0,0 +1,59 @@ +from .pushover_api import PushoverAPI +import click +import os +import configparser + +PUSHOVER_CONFIG = os.path.expanduser("~/.config/pushover_complete/config.ini") + + +@click.group() +@click.option('--config', '-c') +@click.option('--config-preset', '-p') +@click.option('--token', '-t') +@click.pass_context +def cli(ctx, config, config_preset, token): + cf = dict() + has_global_config = os.path.exists(PUSHOVER_CONFIG) + + if has_global_config or config: + cfp = configparser.ConfigParser() + cfp.read(PUSHOVER_CONFIG if has_global_config and config is None else config) + cf = dict(cfp['DEFAULT']) + if config_preset is not None: + cf.update(cfp[config_preset]) + + token = cf.pop('token') + + if token is None: + ctx.fail("missing TOKEN") + + pushover = PushoverAPI(token) + + ctx.obj = pushover, cf + + +@cli.command() +@click.argument('message') +@click.option('--user') +@click.option('--device') +@click.option('--title') +@click.option('--url') +@click.option('--url-title') +@click.option('--priority') +@click.option('--retry', type=int) +@click.option('--expire', type=int) +@click.option('--callback-url') +@click.option('--timestamp', type=int) +@click.option('--sound') +@click.option('--html', type=int) +@click.pass_obj +def send(obj, message, **kwargs): + pushover, cf = obj + cf.update({k: v for k, v in kwargs.items() if v is not None}) + + if 'user' not in cf: + click.fail('missing USER') + user = cf.pop('user') + + response = pushover.send_message(user, message, **cf) + click.echo(response) From 461ff3327efb5f3a37743f6b68ab492337d5674a Mon Sep 17 00:00:00 2001 From: Charles Tapley Hoyt Date: Thu, 12 May 2016 10:38:40 +0200 Subject: [PATCH 2/3] added cli function signatures --- src/pushover_complete/pushover_cli.py | 89 +++++++++++++++++++++++++-- 1 file changed, 84 insertions(+), 5 deletions(-) diff --git a/src/pushover_complete/pushover_cli.py b/src/pushover_complete/pushover_cli.py index 7c6b870..b5389d9 100644 --- a/src/pushover_complete/pushover_cli.py +++ b/src/pushover_complete/pushover_cli.py @@ -23,7 +23,6 @@ def cli(ctx, config, config_preset, token): cf.update(cfp[config_preset]) token = cf.pop('token') - if token is None: ctx.fail("missing TOKEN") @@ -46,14 +45,94 @@ def cli(ctx, config, config_preset, token): @click.option('--timestamp', type=int) @click.option('--sound') @click.option('--html', type=int) -@click.pass_obj -def send(obj, message, **kwargs): - pushover, cf = obj +@click.pass_context +def send(ctx, message, **kwargs): + pushover, cf = ctx.obj cf.update({k: v for k, v in kwargs.items() if v is not None}) if 'user' not in cf: - click.fail('missing USER') + ctx.fail('missing USER') user = cf.pop('user') response = pushover.send_message(user, message, **cf) click.echo(response) + + +@cli.command() +@click.argument('user') +@click.argument('device') +@click.pass_obj +def validate(obj, user, device): + pushover, cf = obj + response = pushover.validate(user, device) + click.echo(response) + + +@cli.command() +@click.argument('receipt') +@click.pass_obj +def check_receipt(obj, receipt): + pushover, cf = obj + response = pushover.check_receipt(receipt) + click.echo(response) + + +@cli.command() +@click.argument('receipt') +@click.pass_obj +def cancel_receipt(obj, receipt): + pushover, cf = obj + response = pushover.cancel_receipt(receipt) + click.echo(response) + + +@cli.command() +def migrate(): + pass + + +@cli.command() +@click.argument('user') +def assign(user): + pass + + +@cli.group() +@click.option('group-key') +def group(group_key): + pass + + +@group.command() +@click.argument('group') +@click.argument('user') +def add(group, user): + pass + + +@group.command() +@click.argument('group') +@click.argument('user') +def delete(group, user): + pass + + +@group.command() +@click.argument('group') +@click.argument('user') +def enable(group, user): + pass + + +@group.command() +@click.argument('group') +@click.argument('user') +def disable(group, user): + pass + + +@group.command() +@click.argument('group') +@click.argument('name') +def rename(group, name): + pass From 6b49d6433293dc021bf3317a360ba4bd93f31853 Mon Sep 17 00:00:00 2001 From: Charles Tapley Hoyt Date: Thu, 12 May 2016 10:41:08 +0200 Subject: [PATCH 3/3] fix entry points in setup.py changed from ini style to straight up mf dictionary --- setup.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/setup.py b/setup.py index 63b5cf8..401616b 100644 --- a/setup.py +++ b/setup.py @@ -70,8 +70,8 @@ def get_long_description(): install_requires=INSTALL_REQUIRES, extras_require=EXTRAS_REQUIRE, tests_require=TESTS_REQUIRE, - entry_points=''' - [console_scripts] - pushover=pushover_complete.pushover_cli:cli - ''' + entry_points={ + 'console_scripts': + ['pushover=pushover_complete.pushover_cli:cli'] + } )