diff --git a/app.py b/app.py index 08342c9..f2e6a7d 100644 --- a/app.py +++ b/app.py @@ -10,12 +10,15 @@ import minify_html from urllib.parse import urlparse from flask_socketio import SocketIO +from db import DataBase + app = Flask(__name__) # TODO CHANGE SECRET KEY TO ENVIRONMENT VARIABLE app.config['SECRET_KEY'] = 'secret!' jinja_partials.register_extensions(app) htmx = HTMX(app) socketio = SocketIO(app, cors_allowed_origins='*') +db = DataBase(app) @app.after_request @@ -38,6 +41,7 @@ def handle_message(data): current_time = datetime.now().replace( microsecond=0).isoformat() print('' + current_time + ' ' + json.dumps(data)) + db.insert_cadence(data['rpm'], data['device_id']) @app.route("/api/status", methods=['GET', 'POST']) diff --git a/db.py b/db.py new file mode 100644 index 0000000..6f6176a --- /dev/null +++ b/db.py @@ -0,0 +1,36 @@ +import os +import psycopg2 +from psycopg2.extras import RealDictCursor +from urllib.parse import urlparse + + +class DataBase(): + def __init__(self, app): + db_url = urlparse(os.environ['DATABASE_URL']) + + self.conn = psycopg2.connect( + database=db_url.path[1:], + user=db_url.username, + password=db_url.password, + host=db_url.hostname, + port=db_url.port + ) + + def execute(self, query, args=(), one=False, commit=False): + cur = self.conn.cursor(cursor_factory=RealDictCursor) + cur.execute(query, args) + rv = None + if cur.description is not None: + rv = cur.fetchall() + if commit: + try: + self.conn.commit() + except: + self.conn.rollback() + cur.close() + + return (rv[0] if rv else None) if one else rv + + def insert_cadence(self, rpm, device_id): + self.execute('INSERT INTO cadence (rpm, device_id) VALUES (%s)', + [rpm, device_id], commit=True, one=True)