mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-15 01:32:20 -05:00
take advantage of click's type validation/coercion
(saves us having to write the stuff ourselves). Also adds a small
click plugin to do datetime parsing.
Sample output:
```
[leohemsted:~/dev/api]$ flask command create_provider_rates --help
Usage: flask command create_provider_rates [OPTIONS]
Backfill rates for a given provider
Options:
-p, --provider_name [mmg|firetext|ses]
[required]
-c, --cost FLOAT Cost (pence) per message including decimals
[required]
-d, --valid_from DATE [required]
--help Show this message and exit.
[leohemsted:~/dev/api]$ flask command create_provider_rates -p ses -c 1.234 -d invalid
Usage: flask command create_provider_rates [OPTIONS]
Error: Invalid value for "-d" / "--valid_from": Could not parse datetime string "invalid" formatted as %Y-%m-%dT%H:%M:%S
```
This commit is contained in:
@@ -6,6 +6,7 @@ import functools
|
|||||||
import flask
|
import flask
|
||||||
from flask import current_app
|
from flask import current_app
|
||||||
import click
|
import click
|
||||||
|
from click_datetime import Datetime as click_dt
|
||||||
|
|
||||||
from app import db
|
from app import db
|
||||||
from app.dao.monthly_billing_dao import (
|
from app.dao.monthly_billing_dao import (
|
||||||
@@ -49,17 +50,14 @@ class notify_command:
|
|||||||
|
|
||||||
|
|
||||||
@notify_command()
|
@notify_command()
|
||||||
@click.option('-p', '--provider_name', required=True, help='Provider name', type=click.Choice(PROVIDERS))
|
@click.option('-p', '--provider_name', required=True, type=click.Choice(PROVIDERS))
|
||||||
@click.option('-c', '--cost', required=True, help='Cost (pence) per message including decimals', type=float)
|
@click.option('-c', '--cost', required=True, help='Cost (pence) per message including decimals', type=float)
|
||||||
@click.option('-d', '--valid_from', required=True, help="Date (%Y-%m-%dT%H:%M:%S) valid from")
|
@click.option('-d', '--valid_from', required=True, type=click_dt(format='%Y-%m-%dT%H:%M:%S'))
|
||||||
def create_provider_rates(provider_name, cost, valid_from):
|
def create_provider_rates(provider_name, cost, valid_from):
|
||||||
"""
|
"""
|
||||||
Backfill rates for a given provider
|
Backfill rates for a given provider
|
||||||
"""
|
"""
|
||||||
cost = Decimal(cost)
|
cost = Decimal(cost)
|
||||||
|
|
||||||
valid_from = datetime.strptime('%Y-%m-%dT%H:%M:%S', valid_from)
|
|
||||||
|
|
||||||
dao_create_provider_rates(provider_name, valid_from, cost)
|
dao_create_provider_rates(provider_name, valid_from, cost)
|
||||||
|
|
||||||
|
|
||||||
@@ -194,7 +192,7 @@ def link_inbound_numbers_to_service():
|
|||||||
|
|
||||||
|
|
||||||
@notify_command()
|
@notify_command()
|
||||||
@click.option('-y', '--year', required=True, help="Use for integer value for year, e.g. 2017", type=int)
|
@click.option('-y', '--year', required=True, help="e.g. 2017", type=int)
|
||||||
def populate_monthly_billing(year):
|
def populate_monthly_billing(year):
|
||||||
"""
|
"""
|
||||||
Populate monthly billing table for all services for a given year.
|
Populate monthly billing table for all services for a given year.
|
||||||
@@ -228,14 +226,12 @@ def populate_monthly_billing(year):
|
|||||||
|
|
||||||
|
|
||||||
@notify_command()
|
@notify_command()
|
||||||
@click.option('-s', '--start_date', required=True, help="Date (%Y-%m-%d) start date inclusive")
|
@click.option('-s', '--start_date', required=True, help="start date inclusive", type=click_dt(format='%Y-%m-%d'))
|
||||||
@click.option('-e', '--end_date', required=True, help="Date (%Y-%m-%d) end date inclusive")
|
@click.option('-e', '--end_date', required=True, help="end date inclusive", type=click_dt(format='%Y-%m-%d'))
|
||||||
def backfill_processing_time(start_date, end_date):
|
def backfill_processing_time(start_date, end_date):
|
||||||
"""
|
"""
|
||||||
Send historical performance platform stats.
|
Send historical performance platform stats.
|
||||||
"""
|
"""
|
||||||
start_date = datetime.strptime(start_date, '%Y-%m-%d')
|
|
||||||
end_date = datetime.strptime(end_date, '%Y-%m-%d')
|
|
||||||
|
|
||||||
delta = end_date - start_date
|
delta = end_date - start_date
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ Flask-Marshmallow==0.8.0
|
|||||||
Flask-Migrate==2.1.1
|
Flask-Migrate==2.1.1
|
||||||
Flask-SQLAlchemy==2.3.2
|
Flask-SQLAlchemy==2.3.2
|
||||||
Flask==0.12.2
|
Flask==0.12.2
|
||||||
|
click-datetime==0.2
|
||||||
gunicorn==19.7.1
|
gunicorn==19.7.1
|
||||||
iso8601==0.1.12
|
iso8601==0.1.12
|
||||||
jsonschema==2.6.0
|
jsonschema==2.6.0
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ def test_backfill_processing_time_works_for_correct_dates(mocker, notify_api):
|
|||||||
|
|
||||||
# backfill_processing_time is a click.Command object - if you try invoking the callback on its own, it
|
# backfill_processing_time is a click.Command object - if you try invoking the callback on its own, it
|
||||||
# throws a `RuntimeError: There is no active click context.` - so get at the original function using __wrapped__
|
# throws a `RuntimeError: There is no active click context.` - so get at the original function using __wrapped__
|
||||||
backfill_processing_time.callback.__wrapped__('2017-08-01', '2017-08-03')
|
backfill_processing_time.callback.__wrapped__(datetime(2017, 8, 1), datetime(2017, 8, 3))
|
||||||
|
|
||||||
assert send_mock.call_count == 3
|
assert send_mock.call_count == 3
|
||||||
send_mock.assert_any_call(datetime(2017, 7, 31, 23, 0), datetime(2017, 8, 1, 23, 0))
|
send_mock.assert_any_call(datetime(2017, 7, 31, 23, 0), datetime(2017, 8, 1, 23, 0))
|
||||||
|
|||||||
Reference in New Issue
Block a user