From e658d2bbd0ce461cb2571874b8dffacf3897d56f Mon Sep 17 00:00:00 2001
From: Patrick Jentsch <p.jentsch@uni-bielefeld.de>
Date: Mon, 2 Sep 2019 10:42:28 +0200
Subject: [PATCH] Don't create new app instance for background tasks. Reuse the
 old one!

---
 app/__init__.py    |  6 +-----
 app/main/events.py | 13 ++++---------
 2 files changed, 5 insertions(+), 14 deletions(-)

diff --git a/app/__init__.py b/app/__init__.py
index 19bfa517..bd42c79c 100644
--- a/app/__init__.py
+++ b/app/__init__.py
@@ -13,16 +13,12 @@ mail = Mail()
 socketio = SocketIO()
 
 
-def create_app(config_name, main=True):
+def create_app(config_name):
     app = Flask(__name__)
     app.config.from_object(config[config_name])
 
     config[config_name].init_app(app)
     db.init_app(app)
-
-    if not main:
-        return app
-
     login_manager.init_app(app)
     mail.init_app(app)
     socketio.init_app(app, message_qeue='redis://')
diff --git a/app/main/events.py b/app/main/events.py
index b0f2ce04..89a3d7cd 100644
--- a/app/main/events.py
+++ b/app/main/events.py
@@ -1,6 +1,6 @@
-from flask import request
+from flask import current_app, request
 from flask_login import current_user, login_required
-from .. import create_app, db, socketio
+from .. import db, socketio
 from ..models import User
 import json
 import jsonpatch
@@ -23,6 +23,7 @@ def connect():
     ' task associated with the sid.
     '''
     socketio.start_background_task(background_task,
+                                   current_app._get_current_object(),
                                    current_user.id,
                                    request.sid)
 
@@ -37,7 +38,7 @@ def disconnect():
     disconnected.append(request.sid)
 
 
-def background_task(user_id, session_id):
+def background_task(app, user_id, session_id):
     '''
     ' Sends initial corpus and job lists to the client. Afterwards it checks
     ' every 3 seconds if changes to the initial values appeared. If changes are
@@ -48,12 +49,6 @@ def background_task(user_id, session_id):
     '
     '       > where '*' is either 'corpora' or 'jobs'
     '''
-    '''
-    ' Create an app instance to get access to an app_context with which db
-    ' operations are fulfilled.
-    '''
-    app = create_app(os.getenv('FLASK_CONFIG') or 'default', main=False)
-
     with app.app_context():
         user = db.session.query(User).filter_by(id=user_id).first()
         ''' Get current values from the database. '''
-- 
GitLab