From 060cad9372b02af96105251ae2d268a109908976 Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Tue, 14 Apr 2020 13:12:14 +0200 Subject: [PATCH] App: Reset DB transactions properly Otherwise we can serve stale data. --- app/zoom.py | 13 ++++++++++++- requirements.txt | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/app/zoom.py b/app/zoom.py index 2970535..41d611f 100644 --- a/app/zoom.py +++ b/app/zoom.py @@ -1,5 +1,5 @@ import json -from flask import Flask, render_template, request, g +from flask import Flask, render_template, request, g, request_tearing_down import psycopg2 import psycopg2.extras import time @@ -42,6 +42,17 @@ def db_query(query, args=()): db_connect() db.execute(query, args) +def db_reset_signal(sender, **extra): + # At the end of every request, we have to close the implicitly opened + # transaction. Otherwise we end up with serving stale data. + if db_connection is not None: + try: + db_connection.rollback() + except: + pass + +request_tearing_down.connect(db_reset_signal, app) + ### Schedule ### def get_date(): diff --git a/requirements.txt b/requirements.txt index 6e41d40..df5d5e7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,3 +2,4 @@ zoomus psycopg2 python-dateutil Flask +blinker -- GitLab