diff --git a/classes.py b/classes.py index 4d265de..3cc2462 100644 --- a/classes.py +++ b/classes.py @@ -1,6 +1,16 @@ from sqlite3 import Connection +import json +from flask.json.provider import DefaultJSONProvider -class Payement: + +class CustomJSONProvider(DefaultJSONProvider): + @staticmethod + def default(obj) -> dict : + if isinstance(obj,Payment): + return obj.to_json() + return DefaultJSONProvider.default(obj) + +class Payment(json.JSONEncoder): id : int amount: float name : str @@ -28,6 +38,13 @@ class Payement: return def __repr__(self) -> str: return '{} - {}€- {}'.format(self.name,self.amount/100,self.message) + def to_json(self) -> dict: + return { + "name":self.name, + "amount": self.amount/100, + "message": self.message + } + class Client: def __init__(self,sock) -> None: diff --git a/serv.py b/serv.py index 2fcca3e..ac16de2 100755 --- a/serv.py +++ b/serv.py @@ -1,22 +1,22 @@ #!/bin/env python3 import os import sqlite3 -from flask import Flask, make_response, render_template,request,jsonify,g +from flask import Flask, make_response, render_template,request,g,jsonify from flask_sock import Sock -from classes import Payement, Client +from classes import Payment, Client, CustomJSONProvider clients_list = [] -payements_list : list[Payement] = [] +payments_list : list[Payment] = [] app = Flask(__name__, instance_relative_config=True) app.config.from_mapping( DATABASE=os.path.join(app.instance_path,'db.sqlite') ) - +app.json = CustomJSONProvider(app) sock = Sock(app) @@ -32,6 +32,13 @@ def close(exception): if db is not None: db.close() +def notify_client_payment(msg): + for c in clients_list: + try: + c.send_event(app.json.dumps(msg)) + except: + clients_list.remove(c) + @app.route('/') def index(): return render_template('index.html') @@ -49,24 +56,16 @@ def show(): @app.route('/test') def test(): - p = Payement(1,5000,'TEST','TEST') - for c in clients_list: - try: - c.send_event(repr(p)) - except: - clients_list.remove(c) - return make_response('Test',200) + p = Payment(1,5000,'TEST','TEST') + notify_client_payment(p) + return jsonify(p), 200 @app.route('/last') def last(): print(len(clients_list)) - if(len(payements_list) > 0): - p = payements_list[0] - for c in clients_list: - try: - c.send_event(repr(p)) - except: - clients_list.remove(c) + if(len(payments_list) > 0): + p = payments_list[0] + notify_client_payment(p) return make_response('last',200) @sock.route('/notify') @@ -82,17 +81,13 @@ def notifications(): if request.json is not None: print(request.json) if request.json['eventType'] == 'Order': - p = Payement(request.json['data']['id'], + p = Payment(request.json['data']['id'], request.json['data']['amount']['total'], request.json['data']['items'][0]['customFields'][0]['answer'], request.json['data']['payer']['firstName']) p.save(get_db()); - payements_list.append(p) - for c in clients_list: - try: - c.send_event(repr(p)) - except: - clients_list.remove(c) + payments_list.append(p) + notify_client_payment(p) return make_response('OK',200) return make_response('Not Handled',400) diff --git a/templates/index.html b/templates/index.html index f40f453..7d031ce 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1,19 +1,36 @@