From 7686b11f12fcebe96d76a2c617dcb1229e50c33e Mon Sep 17 00:00:00 2001 From: Nikolai R Kristiansen Date: Sun, 9 Aug 2015 21:59:58 +0200 Subject: [PATCH] Adds per day sale stats --- tekstmelding.py | 18 +++++++++++++++++- utils.py | 10 ++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/tekstmelding.py b/tekstmelding.py index e03923c..4ffc62e 100644 --- a/tekstmelding.py +++ b/tekstmelding.py @@ -7,7 +7,7 @@ import datetime import logging import logging.config -from utils import generate_activation_code +from utils import generate_activation_code, MyJSONEncoder import sendega import inside @@ -15,6 +15,7 @@ import config app = Flask(__name__) app.config.from_object('config') +app.json_encoder = MyJSONEncoder if not app.debug: logging.config.dictConfig(app.config['LOGGING']) @@ -582,6 +583,21 @@ def dlr(): app.logger.error('Unhandled DLR, dlr_id=%s', dlr_id) +@app.route('/stats/memberships/', methods=['GET']) +def stats_memberships(): + start_datetime = request.args.get('start', '2015-08-01') + sale_events = query_db(""" + SELECT DATE_FORMAT(timestamp, '%%Y-%%m-%%d') as date,count(*) as sales FROM event + WHERE action IN ('new_membership_delivered', 'renew_membership_delivered') + AND timestamp > %s + GROUP BY DATE_FORMAT(timestamp, '%%Y-%%m-%%d') + ORDER BY timestamp""", [start_datetime]) + + result = {'meta': {'num_results': len(sale_events)}, 'memberships': sale_events} + headers = {'Access-Control-Allow-Origin': '*'} + return (jsonify(**result), 200, headers) + + @app.route('/') def main(): return 'Tekstmelding!' diff --git a/utils.py b/utils.py index b455af9..8795441 100644 --- a/utils.py +++ b/utils.py @@ -1,5 +1,7 @@ import string import random +from datetime import datetime +from flask.json import JSONEncoder def generate_activation_code(length=5): @@ -7,3 +9,11 @@ def generate_activation_code(length=5): # remove easily misinterpreted chars chars = chars.translate(None, '0oil1wv') return ''.join(random.choice(chars) for _ in range(length)) + + +class MyJSONEncoder(JSONEncoder): + def default(self, o): + if isinstance(o, datetime): + return o.isoformat() + + return super(MyJSONEncoder, self).default(o)