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