From 6f64a1765b4a601ff9d6a7c2995f7524d0af9fbf Mon Sep 17 00:00:00 2001
From: thomaswoehlke <thomas.woehlke@gmail.com>
Date: Sat, 20 Feb 2021 09:38:50 +0100
Subject: [PATCH] ### 0.0.18 Release

---
 src/config.py                                 | 16 ++--
 src/covid19/__init__.py                       |  5 +-
 .../application/application_workers.py        | 36 +++++----
 src/covid19/web.py                            | 10 +--
 src/covid19_worker/__init__.py                | 12 +--
 src/covid19_worker/mq.py                      | 17 +++--
 src/database.py                               | 73 ++++++++++++++-----
 7 files changed, 105 insertions(+), 64 deletions(-)

diff --git a/src/config.py b/src/config.py
index 5be61089..f8c66704 100644
--- a/src/config.py
+++ b/src/config.py
@@ -1,12 +1,14 @@
-POSTGRES_USER = 'covid19data'
-POSTGRES_PW = 'covid19datapwd'
-POSTGRES_URL = 'localhost'
-POSTGRES_DB = 'covid19data'
-ITEMS_PER_PAGE = 10
-CELERY_BROKER_URL = 'redis://localhost:6379/0'
 SECRET_KEY = 'vfdjv423ndf654&%%'
-APP_DEBUGGER_ACTIVE = True
+CELERY_BROKER_URL = 'redis://localhost:6379/0'
+CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
 CELERY_CONF_WORKER_SEND_TASK_EVENTS = True
 CELERY_CONF_TASK_SEND_SENT_EVENT = True
+SQLALCHEMY_POSTGRES_USER = 'covid19data'
+SQLALCHEMY_POSTGRES_PW = 'covid19datapwd'
+SQLALCHEMY_POSTGRES_URL = 'localhost'
+SQLALCHEMY_POSTGRES_DB = 'covid19data'
+SQLALCHEMY_ITEMS_PER_PAGE = 10
 SQLALCHEMY_TRACK_MODIFICATIONS = True
+FLASK_ADMIN_SWATCH = 'superhero'
+FLASK_APP_DEBUGGER_ACTIVE = True
 PORT = 9090
diff --git a/src/covid19/__init__.py b/src/covid19/__init__.py
index 93824397..546f6be3 100644
--- a/src/covid19/__init__.py
+++ b/src/covid19/__init__.py
@@ -9,4 +9,7 @@ def run_web():
     app.logger.info("#                Covid19 Data - WEB                         #")
     app.logger.info("#############################################################")
     app.logger.info(" ")
-    app.run(debug=run_run_with_debug, port=port)
+    app.run(
+        debug=run_run_with_debug,
+        port=port
+    )
diff --git a/src/covid19/blueprints/application/application_workers.py b/src/covid19/blueprints/application/application_workers.py
index 3b08e3c8..0c8964d0 100644
--- a/src/covid19/blueprints/application/application_workers.py
+++ b/src/covid19/blueprints/application/application_workers.py
@@ -1,13 +1,23 @@
-from database import app
-from celery import Celery
-
-############################################################################################
-#
-# Celery
-#
-celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
-celery.conf.update(app.config)
-celery.conf.result_backend = app.config['CELERY_BROKER_URL']
-celery.conf.broker_transport_options = {'visibility_timeout': 18000, 'max_retries': 5}
-celery.conf.worker_send_task_events = app.config['CELERY_CONF_WORKER_SEND_TASK_EVENTS']
-celery.conf.task_send_sent_event = app.config['CELERY_CONF_TASK_SEND_SENT_EVENT']
+import sys
+import subprocess
+from covid19 import app
+from database import create_celery
+
+
+def run_mq(my_app, my_celery):
+    if sys.platform != 'linux':
+        my_app.logger.info("-------------------------------------------------------------")
+        my_app.logger.info("#                start REDIS-Server                         #")
+        my_app.logger.info("-------------------------------------------------------------")
+        redis_cmd = ['redis-server']
+        subprocess.Popen(redis_cmd, shell=True)
+    my_app.logger.info(" ")
+    my_app.logger.info("#############################################################")
+    my_app.logger.info("#                Covid19 Data - WORKER                      #")
+    my_app.logger.info("#############################################################")
+    my_app.logger.info(" ")
+    args = ['worker', '-l', 'INFO']
+    my_celery.start(args)
+
+
+celery = create_celery(app)
diff --git a/src/covid19/web.py b/src/covid19/web.py
index bad08bcb..657bfe44 100644
--- a/src/covid19/web.py
+++ b/src/covid19/web.py
@@ -1,14 +1,12 @@
 from database import app, run_run_with_debug, port
-
+import covid19
 import covid19.blueprints.application.application_views
 
 from covid19 import run_web
 
+# ---------------------------------------------------------------------------------
+#  MAIN
+# ---------------------------------------------------------------------------------
 
-#################################################################################################################
-#
-# MAIN
-#
-#################################################################################################################
 if __name__ == '__main__':
     run_web()
diff --git a/src/covid19_worker/__init__.py b/src/covid19_worker/__init__.py
index 997f1d16..142e368e 100644
--- a/src/covid19_worker/__init__.py
+++ b/src/covid19_worker/__init__.py
@@ -4,14 +4,4 @@ from covid19 import app
 from covid19.blueprints.application.application_workers import celery
 
 
-def run_mq():
-    app.logger.info(" ")
-    app.logger.info("#############################################################")
-    app.logger.info("#                Covid19 Data - WORKER                      #")
-    app.logger.info("#############################################################")
-    app.logger.info(" ")
-    if sys.platform != 'linux':
-        redis_cmd = ['redis-server']
-        subprocess.Popen(redis_cmd, shell=True)
-    args = ['worker', '-l', 'INFO']
-    celery.start(args)
+
diff --git a/src/covid19_worker/mq.py b/src/covid19_worker/mq.py
index 4299366f..a3390590 100644
--- a/src/covid19_worker/mq.py
+++ b/src/covid19_worker/mq.py
@@ -1,13 +1,14 @@
 import sys
 import subprocess
+import covid19
+import covid19_worker
 from covid19 import app
-from covid19.blueprints.application.application_workers import celery
-from covid19_worker import run_mq
+from covid19.blueprints.application.application_workers import celery, run_mq
+
+
+# ---------------------------------------------------------------------------------
+#  MAIN
+# ---------------------------------------------------------------------------------
 
-#################################################################################################################
-#
-# MAIN
-#
-#################################################################################################################
 if __name__ == '__main__':
-    run_mq()
+    run_mq(app, celery)
diff --git a/src/database.py b/src/database.py
index e9f24fe4..99636e43 100644
--- a/src/database.py
+++ b/src/database.py
@@ -4,32 +4,69 @@ from flask_bs4 import Bootstrap
 from flask_sqlalchemy import SQLAlchemy
 from logging.config import dictConfig
 from flask_admin import Admin
+from celery import Celery
 
 
 def create_app():
-    app = Flask('app')
-    CORS(app)
-    Bootstrap(app)
-    app.config.from_object("config")
-    DB_URL = 'postgresql+psycopg2://{user}:{pw}@{url}/{db}'.format(
-        user=app.config['POSTGRES_USER'],
-        pw=app.config['POSTGRES_PW'],
-        url=app.config['POSTGRES_URL'],
-        db=app.config['POSTGRES_DB'])
-    app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
-    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # silence the deprecation warning
-    app.config['FLASK_ADMIN_SWATCH'] = 'superhero'
-    return app
+    my_app = Flask('app')
+    CORS(my_app)
+    Bootstrap(my_app)
+    my_app.config.from_object("config")
+    db_url = 'postgresql+psycopg2://{user}:{pw}@{url}/{db}'.format(
+        user=app.config['SQLALCHEMY_POSTGRES_USER'],
+        pw=app.config['SQLALCHEMY_POSTGRES_PW'],
+        url=app.config['SQLALCHEMY_POSTGRES_URL'],
+        db=app.config['SQLALCHEMY_POSTGRES_DB'])
+    my_app.config['SQLALCHEMY_DATABASE_URI'] = db_url
+    my_app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # silence the deprecation warning
+    my_app.config['FLASK_ADMIN_SWATCH'] = 'superhero'
+    return my_app
+
+
+def create_celery(my_app):
+    celery = Celery(
+        my_app.import_name,
+        backend=my_app.config['CELERY_RESULT_BACKEND'],
+        broker=my_app.config['CELERY_BROKER_URL'],
+        worker_send_task_events=my_app.config['CELERY_CONF_WORKER_SEND_TASK_EVENTS'],
+        task_send_sent_event=my_app.config['CELERY_CONF_TASK_SEND_SENT_EVENT'],
+        broker_transport_options={'visibility_timeout': 18000, 'max_retries': 5}
+    )
+    celery.conf.update(my_app.config)
+
+    class ContextTask(celery.Task):
+        def __call__(self, *args, **kwargs):
+            with my_app.app_context():
+                return self.run(*args, **kwargs)
+
+    celery.Task = ContextTask
+    return celery
+
+
+def create_admin(my_app):
+    my_admin = Admin(
+        my_app,
+        name='covid19 | admin',
+        template_mode='bootstrap4')
+    return my_admin
+
+
+def create_db(my_app):
+    my_db = SQLAlchemy(my_app)
+    my_db.create_all()
+    return my_db
 
 
 app = create_app()
-admin = Admin(app, name='covid19admin', template_mode='bootstrap4')
-db = SQLAlchemy(app)
-db.create_all()
+db = create_db(app)
+admin = create_admin
 
+# TODO: deprecated
 port = app.config['PORT']
-run_run_with_debug = app.config['APP_DEBUGGER_ACTIVE']
-ITEMS_PER_PAGE = app.config['ITEMS_PER_PAGE']
+# TODO: deprecated
+run_run_with_debug = app.config['FLASK_APP_DEBUGGER_ACTIVE']
+# TODO: deprecated
+ITEMS_PER_PAGE = app.config['SQLALCHEMY_ITEMS_PER_PAGE']
 
 my_logging_config = {
         'version': 1,
-- 
GitLab