diff --git a/src/config.py b/src/config.py index 5be610896a7ef7ab5d2725075c60d9bf48147947..f8c6670413022ff2dd5bf300991479141a1384ab 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 93824397a3ae419a15cea9fdb32c073a6752d690..546f6be3a04b5266e8de529e2dace132d0d3fa9b 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 3b08e3c83753a03bc21f7595efa11cfc92db66ec..0c8964d0ce63be794d0b09b982b3e71c769bf936 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 bad08bcb713bdee99f58f2c9dcb3028623cd015d..657bfe442e03b1c567b4d6e33fb13817604374f3 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 997f1d16ab483ebe7f6710cbe65ae3563abce439..142e368ec77bed21345ed5059b6a5b439cd8553f 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 4299366f5df12ad8ff932451f92c9e836d68b38f..a33905906322e145c274714c4b582d4ae0f86f9d 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 e9f24fe4a3673c0c8d267d2b465f4877cbfd4f5c..99636e434baa86f8b547738b7c95121fc1c51f73 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,