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