From 4db2e2db1b6f1682728c454da34a1122aa4b83de Mon Sep 17 00:00:00 2001
From: thomaswoehlke <thomas.woehlke@gmail.com>
Date: Sun, 24 Jan 2021 19:25:36 +0100
Subject: [PATCH] work

---
 covid19python.py                              |   0
 covid19python/__init__.py                     | 577 +++++++++++++++++-
 covid19python/blueprints/__init__.py          |   0
 covid19python/views.py                        | 559 -----------------
 .../__init__.py                               |   2 -
 run.sh                                        |   2 +-
 run_mq.sh                                     |   5 +
 setup.cfg                                     |   2 +-
 setup.py                                      |   2 +-
 start_server_mq.sh                            |   0
 10 files changed, 584 insertions(+), 565 deletions(-)
 delete mode 100644 covid19python.py
 delete mode 100644 covid19python/blueprints/__init__.py
 rename covid19python_mq.py => covid19python_mq/__init__.py (99%)
 mode change 100644 => 100755 run.sh
 create mode 100755 run_mq.sh
 mode change 100644 => 100755 start_server_mq.sh

diff --git a/covid19python.py b/covid19python.py
deleted file mode 100644
index e69de29b..00000000
diff --git a/covid19python/__init__.py b/covid19python/__init__.py
index 3638a0a5..a79557bc 100644
--- a/covid19python/__init__.py
+++ b/covid19python/__init__.py
@@ -1,9 +1,23 @@
 from logging.config import dictConfig
+from flask import render_template, redirect, url_for, flash
+from sqlalchemy.exc import OperationalError
 from database import db, app, my_logging_config, run_run_with_debug
+from org.woehlke.covid19.who.who_model import WhoGlobalDataImportTable
+from org.woehlke.covid19.who.who_model import WhoRegion, WhoCountry, WhoDateReported, WhoGlobalData
+from org.woehlke.covid19.europe.europe_model import EuropeDataImportTable, EuropeDateReported, EuropeContinent
+from org.woehlke.covid19.europe.europe_model import EuropeCountry, EuropeData
 from org.woehlke.covid19.who.who_service import WhoService
 from org.woehlke.covid19.europe.europe_service import EuropeService
 from org.woehlke.covid19.vaccination.vaccination_service import VaccinationService
 from org.woehlke.covid19.admin.admin_service import AdminService
+from org.woehlke.covid19.vaccination.vaccination_model import VaccinationDataImportTable
+
+from covid19python_mq import who_run_update_task, who_update_short_task, who_update_initial_task
+from covid19python_mq import alive_message_task
+from covid19python_mq import europe_update_initial_task
+from covid19python_mq import vaccination_update_initial_task
+from covid19python_mq import admin_database_drop_create_task
+
 
 drop_and_create_data_again = True
 
@@ -12,6 +26,567 @@ europe_service = None
 vaccination_service = None
 admin_service = None
 
+
+class ApplicationPage:
+
+    def __init__(self, default_title, default_subtitle=None, default_subtitle_info=None):
+        self.title = default_title
+        self.subtitle = default_subtitle
+        self.subtitle_info = default_subtitle_info
+        if self.subtitle is None:
+            self.subtitle = """This is a simple hero unit, a simple jumbotron-style component 
+                            for calling extra attention to featured content or information."""
+        if self.subtitle_info is None:
+            self.subtitle_info = """It uses utility classes for typography and spacing 
+                    to space content out within the larger container."""
+
+
+@app.route('/home')
+def home():
+    page_info = ApplicationPage('Home', "Covid19 Data")
+    return render_template(
+        'page_home.html',
+        page_info=page_info)
+
+
+@app.route('/')
+def url_root():
+    return redirect(url_for('home'))
+
+
+##################################################################################################################
+#
+# WHO
+#
+##################################################################################################################
+@app.route('/who/info')
+def url_who_info():
+    page_info = ApplicationPage('WHO', "Info")
+    return render_template(
+        'who/who_info.html',
+        page_info=page_info)
+
+
+@app.route('/who/tasks')
+def url_who_tasks():
+    page_info = ApplicationPage('WHO', "Tasks")
+    return render_template(
+        'who/who_tasks.html',
+        page_info=page_info)
+
+
+@app.route('/who/imported/page/<int:page>')
+@app.route('/who/imported')
+def url_who_imported(page=1):
+    page_info = ApplicationPage('WHO', "Last Import")
+    try:
+        page_data = WhoGlobalDataImportTable.get_all_as_page(page)
+    except OperationalError:
+        flash("No data in the database.")
+        page_data = None
+    return render_template(
+        'who/who_imported.html',
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/who/date_reported/all/page/<int:page>')
+@app.route('/who/date_reported/all')
+def url_who_date_reported_all(page=1):
+    page_info = ApplicationPage('WHO', "Date Reported", "All")
+    try:
+        page_data = WhoDateReported.get_all_as_page(page)
+    except OperationalError:
+        flash("No regions in the database.")
+        page_data = None
+    return render_template(
+        'who/who_date_reported_all.html',
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/who/date_reported/<int:date_reported_id>/page/<int:page>')
+@app.route('/who/date_reported/<int:date_reported_id>')
+def url_who_date_reported(date_reported_id, page=1):
+    date_reported = WhoDateReported.get_by_id(date_reported_id)
+    page_info = ApplicationPage(
+        "Date Reported: " + date_reported.date_reported,
+        'WHO',
+        "data of all reported countries for WHO date reported " + date_reported.date_reported + " "
+    )
+    try:
+        page_data = WhoGlobalData.get_data_for_day(date_reported, page)
+    except OperationalError:
+        flash("No data in the database.")
+        page_data = None
+    return render_template(
+        'who/who_date_reported_one.html',
+        who_date_reported=date_reported,
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/who/region/all/page/<int:page>')
+@app.route('/who/region/all')
+def url_who_region_all(page=1):
+    page_info = ApplicationPage('WHO', "Region", "All")
+    try:
+        page_data = WhoRegion.get_all_as_page(page)
+    except OperationalError:
+        flash("No regions in the database.")
+        page_data = None
+    return render_template(
+        'who/who_region_all.html',
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/who/region/<int:region_id>/page/<int:page>')
+@app.route('/who/region/<int:region_id>')
+def url_who_region(region_id, page=1):
+    who_region = None
+    page_info = ApplicationPage("Countries", "WHO Region")
+    try:
+        who_region = WhoRegion.get_by_id(region_id)
+        page_data = WhoCountry.get_who_countries_for_region(who_region, page)
+        page_info.title = who_region.region
+        page_info.subtitle = "WHO Region"
+        page_info.subtitle_info = "Countries of WHO Region " + who_region.region
+    except OperationalError:
+        flash("No countries of that region in the database.")
+        page_data = None
+    return render_template(
+        'who/who_region_one.html',
+        who_region=who_region,
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/who/country/all/page/<int:page>')
+@app.route('/who/country/all')
+def url_who_country_all(page=1):
+    page_info = ApplicationPage('WHO', "Countries", "All")
+    try:
+        page_data = WhoCountry.get_all_as_page(page)
+    except OperationalError:
+        flash("No regions in the database.")
+        page_data = None
+    return render_template(
+        'who/who_country_all.html',
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/who/country/<int:country_id>/page/<int:page>')
+@app.route('/who/country/<int:country_id>')
+def url_who_country(country_id, page=1):
+    who_country = WhoCountry.get_by_id(country_id)
+    page_data = WhoGlobalData.get_data_for_country(who_country, page)
+    page_info = ApplicationPage(who_country.country,
+           "Country "+who_country.country_code,
+           "Data per Day in Country "+who_country.country+" of WHO Region "+who_country.region.region)
+    return render_template(
+        'who/who_country_one.html',
+        who_country=who_country,
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/who/germany/page/<int:page>')
+@app.route('/who/germany')
+def url_who_germany(page=1):
+    page_info = ApplicationPage('WHO', "Germany")
+    who_country_germany = WhoCountry.get_germany()
+    page_data = WhoGlobalData.get_data_for_country(who_country_germany, page)
+    return render_template(
+        'who/who_country_germany.html',
+        who_country=who_country_germany,
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/who/update')
+def url_who_update_run():
+    app.logger.info("url_who_update_run [start]")
+    who_service.who_service_download.download_file()
+    who_run_update_task.apply_async()
+    flash("who_service.run_update started")
+    flash(message="long running background task started", category="warning")
+    app.logger.info("url_who_update_run [done]")
+    return redirect(url_for('home'))
+
+
+@app.route('/who/update/short')
+def url_who_update_short_run():
+    who_service.who_service_download.download_file()
+    who_update_short_task.apply_async()
+    flash("who_service.run_update_short started")
+    flash(message="long running background task started", category="warning")
+    return redirect(url_for('home'))
+
+
+@app.route('/who/update/initial')
+def url_who_update_initial_run():
+    who_service.who_service_download.download_file()
+    who_update_initial_task.apply_async()
+    flash("who_service.run_update_short started")
+    flash(message="long running background task started", category="warning")
+    return redirect(url_for('home'))
+
+
+@app.route('/test/who/update/countries')
+def url_update_data_countries():
+    who_service.run_update_countries()
+    flash("who_service.run_update_countries started")
+    return redirect(url_for('home'))
+
+
+##################################################################################################################
+#
+# Europe
+#
+##################################################################################################################
+@app.route('/europe/info')
+def url_europe_info():
+    page_info = ApplicationPage('Europe', "Info")
+    return render_template(
+        'europe/europe_info.html',
+        title='Europe',
+        page_info=page_info)
+
+
+@app.route('/europe/tasks')
+def url_europe_tasks():
+    page_info = ApplicationPage('Europe', "Tasks")
+    return render_template(
+        'europe/europe_tasks.html',
+        title='Europe Tasks',
+        page_info=page_info)
+
+
+@app.route('/europe/update/initial')
+def europe_update_data():
+    europe_service.download()
+    europe_update_initial_task.apply_async()
+    flash("europe_service.run_update started")
+    return redirect(url_for('home'))
+
+
+@app.route('/europe/imported/page/<int:page>')
+@app.route('/europe/imported')
+def url_europe_data_imported(page=1):
+    page_info = ApplicationPage('Europe', "Last Import")
+    page_data = EuropeDataImportTable.get_all_as_page(page)
+    return render_template(
+        'europe/europe_imported.html',
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/europe/date_reported/all/page/<int:page>')
+@app.route('/europe/date_reported/all')
+def url_europe_date_reported_all(page=1):
+    page_info = ApplicationPage('Europe', "date_reported")
+    page_data = EuropeDateReported.get_all_as_page(page)
+    return render_template(
+        'europe/europe_date_reported_all.html',
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/europe/date_reported/<int:europe_date_reported_id>/page/<int:page>')
+@app.route('/europe/date_reported/<int:europe_date_reported_id>')
+@app.route('/europe/date_reported/notification_rate/<int:europe_date_reported_id>/page/<int:page>')
+@app.route('/europe/date_reported/notification_rate/<int:europe_date_reported_id>')
+def url_europe_date_reported_one_notification_rate(europe_date_reported_id, page=1):
+    page_info = ApplicationPage('Europe', "date_reported")
+    europe_date_reported = EuropeDateReported.get_by_id(europe_date_reported_id)
+    page_data = EuropeData.find_by_date_reported_notification_rate(europe_date_reported, page)
+    return render_template(
+        'europe/europe_date_reported_one_notification_rate.html',
+        europe_date_reported=europe_date_reported,
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/europe/date_reported/deaths_weekly/<int:europe_date_reported_id>/page/<int:page>')
+@app.route('/europe/date_reported/deaths_weekly/<int:europe_date_reported_id>')
+def url_europe_date_reported_one_deaths_weekly(europe_date_reported_id, page=1):
+    page_info = ApplicationPage('Europe', "date_reported")
+    europe_date_reported = EuropeDateReported.get_by_id(europe_date_reported_id)
+    page_data = EuropeData.find_by_date_reported_deaths_weekly(europe_date_reported, page)
+    return render_template(
+        'europe/europe_date_reported_one_deaths_weekly.html',
+        europe_date_reported=europe_date_reported,
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/europe/date_reported/cases_weekly/<int:europe_date_reported_id>/page/<int:page>')
+@app.route('/europe/date_reported/cases_weekly/<int:europe_date_reported_id>')
+def url_europe_date_reported_one_cases_weekly(europe_date_reported_id, page=1):
+    page_info = ApplicationPage('Europe', "date_reported")
+    europe_date_reported = EuropeDateReported.get_by_id(europe_date_reported_id)
+    page_data = EuropeData.find_by_date_reported_cases_weekly(europe_date_reported, page)
+    return render_template(
+        'europe/europe_date_reported_one_cases_weekly.html',
+        europe_date_reported=europe_date_reported,
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/europe/continent/all/page/<int:page>')
+@app.route('/europe/continent/all')
+def url_europe_continent_all(page=1):
+    page_info = ApplicationPage('Europe', "continent")
+    page_data = EuropeContinent.get_all_as_page(page)
+    return render_template(
+        'europe/europe_continent_all.html',
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/europe/continent/<int:continent_id>/page/<int:page>')
+@app.route('/europe/continent/<int:continent_id>')
+def url_europe_continent_one(continent_id, page=1):
+    page_info = ApplicationPage('Europe', "continent")
+    continent = EuropeContinent.get_by_id(continent_id)
+    page_data = EuropeCountry.find_by_continent(continent, page)
+    return render_template(
+        'europe/europe_continent_one.html',
+        continent=continent,
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/europe/country/all/page/<int:page>')
+@app.route('/europe/country/all')
+def url_europe_country_all(page=1):
+    page_info = ApplicationPage('Europe', "country")
+    page_data = EuropeCountry.get_all_as_page(page)
+    return render_template(
+        'europe/europe_country_all.html',
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/europe/country/<int:country_id>/page/<int:page>')
+@app.route('/europe/country/<int:country_id>')
+def url_europe_country_one(country_id, page=1):
+    page_info = ApplicationPage('Europe', "country")
+    europe_country = EuropeCountry.get_by_id(country_id)
+    page_data = EuropeData.find_by_country(europe_country, page)
+    return render_template(
+        'europe/europe_country_one.html',
+        europe_country=europe_country,
+        page_data=page_data,
+        page_info=page_info)
+
+
+@app.route('/europe/country/germany/page/<int:page>')
+@app.route('/europe/country/germany')
+def url_europe_country_germany(page=1):
+    page_info = ApplicationPage('Europe', "country: Germany")
+    europe_country = EuropeCountry.get_germany()
+    page_data = EuropeData.find_by_country(europe_country, page)
+    return render_template(
+        'europe/europe_country_germany.html',
+        europe_country=europe_country,
+        page_data=page_data,
+        page_info=page_info)
+
+
+##################################################################################################################
+#
+# Vaccination
+#
+##################################################################################################################
+@app.route('/vaccination/info')
+def url_vaccination_info():
+    page_info = ApplicationPage('Vaccination', "Info")
+    return render_template(
+        'vaccination/vaccination_info.html',
+        page_info=page_info)
+
+
+@app.route('/vaccination/tasks')
+def url_vaccination_tasks():
+    page_info = ApplicationPage('Vaccination', "Tasks")
+    return render_template(
+        'vaccination/vaccination_tasks.html',
+        page_info=page_info)
+
+
+@app.route('/vaccination/update/initial')
+def url_vaccination_update_data():
+    vaccination_service.run_download()
+    vaccination_update_initial_task.apply_async()
+    flash("vaccination_service.run_update started")
+    return redirect(url_for('url_vaccination_tasks'))
+
+
+@app.route('/vaccination/imported/page/<int:page>')
+@app.route('/vaccination/imported')
+def url_vaccination_data_imported(page=1):
+    page_info = ApplicationPage('Vaccination', "Last Import")
+    page_data = VaccinationDataImportTable.get_all_as_page(page)
+    return render_template(
+        'vaccination/vaccination_imported.html',
+        page_data=page_data,
+        page_info=page_info)
+
+
+##################################################################################################################
+#
+# RKI
+#
+##################################################################################################################
+@app.route('/rki/info')
+def url_rki_info():
+    page_info = ApplicationPage('RKI', "Info")
+    return render_template(
+        'rki/rki_info.html',
+        page_info=page_info)
+
+
+@app.route('/rki/tasks')
+def url_rki_tasks():
+    page_info = ApplicationPage('RKI', "Tasks")
+    return render_template(
+        'rki/rki_tasks.html',
+        page_info=page_info)
+
+
+@app.route('/rki/imported/page/<int:page>')
+@app.route('/rki/imported')
+def url_rki_imported(page=1):
+    page_info = ApplicationPage('RKI', "Last Import")
+    try:
+        page_data = WhoGlobalDataImportTable.get_all_as_page(page)
+    except OperationalError:
+        flash("No data in the database.")
+        page_data = None
+    return render_template(
+        'rki/rki_imported.html',
+        page_data=page_data,
+        page_info=page_info)
+
+
+##################################################################################################################
+#
+# NRW
+#
+##################################################################################################################
+@app.route('/nrw/info')
+def url_nrw_info():
+    page_info = ApplicationPage('NRW', "Info")
+    return render_template(
+        'nrw/nrw_info.html',
+        page_info=page_info)
+
+
+@app.route('/nrw/tasks')
+def url_nrw_tasks():
+    page_info = ApplicationPage('NRW', "Tasks")
+    return render_template(
+        'nrw/nrw_tasks.html',
+        page_info=page_info)
+
+
+@app.route('/nrw/imported/<int:page>')
+@app.route('/nrw/imported')
+def url_nrw_imported(page=1):
+    page_info = ApplicationPage('NRW', "Last Import")
+    try:
+        who_imported_all = WhoGlobalDataImportTable.get_all_as_page(page)
+    except OperationalError:
+        flash("No data in the database.")
+        who_imported_all = None
+    return render_template(
+        'nrw/nrw_imported.html',
+        page_data=who_imported_all,
+        page_info=page_info)
+
+
+@app.route('/nrw/bochum/<int:page>')
+@app.route('/nrw/bochum')
+def url_nrw_bochum(page=1):
+    page_info = ApplicationPage('NRW', "Bochum")
+    who_country = WhoCountry.get_germany()
+    list_who_global_data = WhoGlobalData.get_data_for_country(who_country, page)
+    return render_template(
+        'nrw/nrw_stadt.html',
+        who_country=who_country,
+        page_data=list_who_global_data,
+        page_info=page_info)
+
+
+#################################################################################################################
+#
+# Admin
+#
+#################################################################################################################
+@app.route('/admin/tasks')
+def url_admin_tasks():
+    page_info = ApplicationPage('Admin', "Tasks")
+    return render_template(
+        'admin/admin_tasks.html',
+        page_info=page_info)
+
+
+@app.route('/admin/info')
+def url_admin_info():
+    page_info = ApplicationPage('Admin', "Info")
+    return render_template(
+        'admin/admin_info.html',
+        page_info=page_info)
+
+
+@app.route('/admin/alive_message')
+def url_alive_message_start():
+    app.logger.info("url_alive_message_start [start]")
+    alive_message_task.apply_async()
+    flash("alive_message_task started")
+    app.logger.info("url_alive_message_start [done]")
+    return redirect(url_for('url_admin_tasks'))
+
+
+@app.route('/admin/database/dump')
+def url_admin_database_dump():
+    app.logger.info("url_admin_database_dump [start]")
+    admin_service.run_admin_database_dump()
+    flash("admin_service.run_admin_database_dump started")
+    app.logger.info("url_admin_database_dump [done]")
+    return redirect(url_for('url_admin_tasks'))
+
+
+@app.route('/admin/database/import')
+def url_admin_database_import():
+    app.logger.info("url_admin_database_import [start]")
+    admin_service.run_admin_database_import()
+    flash("admin_service.run_admin_database_import started")
+    app.logger.info("url_admin_database_import [done]")
+    return redirect(url_for('url_admin_tasks'))
+
+
+@app.route('/admin/database/drop')
+def url_admin_database_drop():
+    app.logger.info("url_admin_database_drop [start]")
+    flash("admin_service.run_admin_database_drop started")
+    admin_service.run_admin_database_drop()
+    if drop_and_create_data_again:
+        flash("europe_service.download started")
+        europe_service.download()
+        flash("who_service.run_download started")
+        who_service.run_download()
+        flash("vaccination_service.run_download started")
+        vaccination_service.run_download()
+        flash("admin_database_drop_create_task async started")
+        admin_database_drop_create_task.apply_async()
+    app.logger.info("url_admin_database_drop [done]")
+    return redirect(url_for('url_admin_tasks'))
+
+
 #################################################################################################################
 #
 # MAIN
@@ -24,4 +599,4 @@ if __name__ == '__main__':
     europe_service = EuropeService(db)
     vaccination_service = VaccinationService(db)
     admin_service = AdminService(db)
-    app.run(debug=run_run_with_debug)
+    app.run(debug=run_run_with_debug, port=5001)
diff --git a/covid19python/blueprints/__init__.py b/covid19python/blueprints/__init__.py
deleted file mode 100644
index e69de29b..00000000
diff --git a/covid19python/views.py b/covid19python/views.py
index 8258396b..2534d4fd 100644
--- a/covid19python/views.py
+++ b/covid19python/views.py
@@ -21,562 +21,3 @@ from covid19python_mq import europe_update_initial_task
 from covid19python_mq import vaccination_update_initial_task
 from covid19python_mq import admin_database_drop_create_task
 
-
-class ApplicationPage:
-
-    def __init__(self, default_title, default_subtitle=None, default_subtitle_info=None):
-        self.title = default_title
-        self.subtitle = default_subtitle
-        self.subtitle_info = default_subtitle_info
-        if self.subtitle is None:
-            self.subtitle = """This is a simple hero unit, a simple jumbotron-style component 
-                            for calling extra attention to featured content or information."""
-        if self.subtitle_info is None:
-            self.subtitle_info = """It uses utility classes for typography and spacing 
-                    to space content out within the larger container."""
-
-
-@app.route('/home')
-def home():
-    page_info = ApplicationPage('Home', "Covid19 Data")
-    return render_template(
-        'page_home.html',
-        page_info=page_info)
-
-
-@app.route('/')
-def url_root():
-    return redirect(url_for('home'))
-
-
-##################################################################################################################
-#
-# WHO
-#
-##################################################################################################################
-@app.route('/who/info')
-def url_who_info():
-    page_info = ApplicationPage('WHO', "Info")
-    return render_template(
-        'who/who_info.html',
-        page_info=page_info)
-
-
-@app.route('/who/tasks')
-def url_who_tasks():
-    page_info = ApplicationPage('WHO', "Tasks")
-    return render_template(
-        'who/who_tasks.html',
-        page_info=page_info)
-
-
-@app.route('/who/imported/page/<int:page>')
-@app.route('/who/imported')
-def url_who_imported(page=1):
-    page_info = ApplicationPage('WHO', "Last Import")
-    try:
-        page_data = WhoGlobalDataImportTable.get_all_as_page(page)
-    except OperationalError:
-        flash("No data in the database.")
-        page_data = None
-    return render_template(
-        'who/who_imported.html',
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/who/date_reported/all/page/<int:page>')
-@app.route('/who/date_reported/all')
-def url_who_date_reported_all(page=1):
-    page_info = ApplicationPage('WHO', "Date Reported", "All")
-    try:
-        page_data = WhoDateReported.get_all_as_page(page)
-    except OperationalError:
-        flash("No regions in the database.")
-        page_data = None
-    return render_template(
-        'who/who_date_reported_all.html',
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/who/date_reported/<int:date_reported_id>/page/<int:page>')
-@app.route('/who/date_reported/<int:date_reported_id>')
-def url_who_date_reported(date_reported_id, page=1):
-    date_reported = WhoDateReported.get_by_id(date_reported_id)
-    page_info = ApplicationPage(
-        "Date Reported: " + date_reported.date_reported,
-        'WHO',
-        "data of all reported countries for WHO date reported " + date_reported.date_reported + " "
-    )
-    try:
-        page_data = WhoGlobalData.get_data_for_day(date_reported, page)
-    except OperationalError:
-        flash("No data in the database.")
-        page_data = None
-    return render_template(
-        'who/who_date_reported_one.html',
-        who_date_reported=date_reported,
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/who/region/all/page/<int:page>')
-@app.route('/who/region/all')
-def url_who_region_all(page=1):
-    page_info = ApplicationPage('WHO', "Region", "All")
-    try:
-        page_data = WhoRegion.get_all_as_page(page)
-    except OperationalError:
-        flash("No regions in the database.")
-        page_data = None
-    return render_template(
-        'who/who_region_all.html',
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/who/region/<int:region_id>/page/<int:page>')
-@app.route('/who/region/<int:region_id>')
-def url_who_region(region_id, page=1):
-    who_region = None
-    page_info = ApplicationPage("Countries", "WHO Region")
-    try:
-        who_region = WhoRegion.get_by_id(region_id)
-        page_data = WhoCountry.get_who_countries_for_region(who_region, page)
-        page_info.title = who_region.region
-        page_info.subtitle = "WHO Region"
-        page_info.subtitle_info = "Countries of WHO Region " + who_region.region
-    except OperationalError:
-        flash("No countries of that region in the database.")
-        page_data = None
-    return render_template(
-        'who/who_region_one.html',
-        who_region=who_region,
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/who/country/all/page/<int:page>')
-@app.route('/who/country/all')
-def url_who_country_all(page=1):
-    page_info = ApplicationPage('WHO', "Countries", "All")
-    try:
-        page_data = WhoCountry.get_all_as_page(page)
-    except OperationalError:
-        flash("No regions in the database.")
-        page_data = None
-    return render_template(
-        'who/who_country_all.html',
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/who/country/<int:country_id>/page/<int:page>')
-@app.route('/who/country/<int:country_id>')
-def url_who_country(country_id, page=1):
-    who_country = WhoCountry.get_by_id(country_id)
-    page_data = WhoGlobalData.get_data_for_country(who_country, page)
-    page_info = ApplicationPage(who_country.country,
-           "Country "+who_country.country_code,
-           "Data per Day in Country "+who_country.country+" of WHO Region "+who_country.region.region)
-    return render_template(
-        'who/who_country_one.html',
-        who_country=who_country,
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/who/germany/page/<int:page>')
-@app.route('/who/germany')
-def url_who_germany(page=1):
-    page_info = ApplicationPage('WHO', "Germany")
-    who_country_germany = WhoCountry.get_germany()
-    page_data = WhoGlobalData.get_data_for_country(who_country_germany, page)
-    return render_template(
-        'who/who_country_germany.html',
-        who_country=who_country_germany,
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/who/update')
-def url_who_update_run():
-    app.logger.info("url_who_update_run [start]")
-    who_service.who_service_download.download_file()
-    who_run_update_task.apply_async()
-    flash("who_service.run_update started")
-    flash(message="long running background task started", category="warning")
-    app.logger.info("url_who_update_run [done]")
-    return redirect(url_for('home'))
-
-
-@app.route('/who/update/short')
-def url_who_update_short_run():
-    who_service.who_service_download.download_file()
-    who_update_short_task.apply_async()
-    flash("who_service.run_update_short started")
-    flash(message="long running background task started", category="warning")
-    return redirect(url_for('home'))
-
-
-@app.route('/who/update/initial')
-def url_who_update_initial_run():
-    who_service.who_service_download.download_file()
-    who_update_initial_task.apply_async()
-    flash("who_service.run_update_short started")
-    flash(message="long running background task started", category="warning")
-    return redirect(url_for('home'))
-
-
-@app.route('/test/who/update/countries')
-def url_update_data_countries():
-    who_service.run_update_countries()
-    flash("who_service.run_update_countries started")
-    return redirect(url_for('home'))
-
-
-##################################################################################################################
-#
-# Europe
-#
-##################################################################################################################
-@app.route('/europe/info')
-def url_europe_info():
-    page_info = ApplicationPage('Europe', "Info")
-    return render_template(
-        'europe/europe_info.html',
-        title='Europe',
-        page_info=page_info)
-
-
-@app.route('/europe/tasks')
-def url_europe_tasks():
-    page_info = ApplicationPage('Europe', "Tasks")
-    return render_template(
-        'europe/europe_tasks.html',
-        title='Europe Tasks',
-        page_info=page_info)
-
-
-@app.route('/europe/update/initial')
-def europe_update_data():
-    europe_service.download()
-    europe_update_initial_task.apply_async()
-    flash("europe_service.run_update started")
-    return redirect(url_for('home'))
-
-
-@app.route('/europe/imported/page/<int:page>')
-@app.route('/europe/imported')
-def url_europe_data_imported(page=1):
-    page_info = ApplicationPage('Europe', "Last Import")
-    page_data = EuropeDataImportTable.get_all_as_page(page)
-    return render_template(
-        'europe/europe_imported.html',
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/europe/date_reported/all/page/<int:page>')
-@app.route('/europe/date_reported/all')
-def url_europe_date_reported_all(page=1):
-    page_info = ApplicationPage('Europe', "date_reported")
-    page_data = EuropeDateReported.get_all_as_page(page)
-    return render_template(
-        'europe/europe_date_reported_all.html',
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/europe/date_reported/<int:europe_date_reported_id>/page/<int:page>')
-@app.route('/europe/date_reported/<int:europe_date_reported_id>')
-@app.route('/europe/date_reported/notification_rate/<int:europe_date_reported_id>/page/<int:page>')
-@app.route('/europe/date_reported/notification_rate/<int:europe_date_reported_id>')
-def url_europe_date_reported_one_notification_rate(europe_date_reported_id, page=1):
-    page_info = ApplicationPage('Europe', "date_reported")
-    europe_date_reported = EuropeDateReported.get_by_id(europe_date_reported_id)
-    page_data = EuropeData.find_by_date_reported_notification_rate(europe_date_reported, page)
-    return render_template(
-        'europe/europe_date_reported_one_notification_rate.html',
-        europe_date_reported=europe_date_reported,
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/europe/date_reported/deaths_weekly/<int:europe_date_reported_id>/page/<int:page>')
-@app.route('/europe/date_reported/deaths_weekly/<int:europe_date_reported_id>')
-def url_europe_date_reported_one_deaths_weekly(europe_date_reported_id, page=1):
-    page_info = ApplicationPage('Europe', "date_reported")
-    europe_date_reported = EuropeDateReported.get_by_id(europe_date_reported_id)
-    page_data = EuropeData.find_by_date_reported_deaths_weekly(europe_date_reported, page)
-    return render_template(
-        'europe/europe_date_reported_one_deaths_weekly.html',
-        europe_date_reported=europe_date_reported,
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/europe/date_reported/cases_weekly/<int:europe_date_reported_id>/page/<int:page>')
-@app.route('/europe/date_reported/cases_weekly/<int:europe_date_reported_id>')
-def url_europe_date_reported_one_cases_weekly(europe_date_reported_id, page=1):
-    page_info = ApplicationPage('Europe', "date_reported")
-    europe_date_reported = EuropeDateReported.get_by_id(europe_date_reported_id)
-    page_data = EuropeData.find_by_date_reported_cases_weekly(europe_date_reported, page)
-    return render_template(
-        'europe/europe_date_reported_one_cases_weekly.html',
-        europe_date_reported=europe_date_reported,
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/europe/continent/all/page/<int:page>')
-@app.route('/europe/continent/all')
-def url_europe_continent_all(page=1):
-    page_info = ApplicationPage('Europe', "continent")
-    page_data = EuropeContinent.get_all_as_page(page)
-    return render_template(
-        'europe/europe_continent_all.html',
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/europe/continent/<int:continent_id>/page/<int:page>')
-@app.route('/europe/continent/<int:continent_id>')
-def url_europe_continent_one(continent_id, page=1):
-    page_info = ApplicationPage('Europe', "continent")
-    continent = EuropeContinent.get_by_id(continent_id)
-    page_data = EuropeCountry.find_by_continent(continent, page)
-    return render_template(
-        'europe/europe_continent_one.html',
-        continent=continent,
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/europe/country/all/page/<int:page>')
-@app.route('/europe/country/all')
-def url_europe_country_all(page=1):
-    page_info = ApplicationPage('Europe', "country")
-    page_data = EuropeCountry.get_all_as_page(page)
-    return render_template(
-        'europe/europe_country_all.html',
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/europe/country/<int:country_id>/page/<int:page>')
-@app.route('/europe/country/<int:country_id>')
-def url_europe_country_one(country_id, page=1):
-    page_info = ApplicationPage('Europe', "country")
-    europe_country = EuropeCountry.get_by_id(country_id)
-    page_data = EuropeData.find_by_country(europe_country, page)
-    return render_template(
-        'europe/europe_country_one.html',
-        europe_country=europe_country,
-        page_data=page_data,
-        page_info=page_info)
-
-
-@app.route('/europe/country/germany/page/<int:page>')
-@app.route('/europe/country/germany')
-def url_europe_country_germany(page=1):
-    page_info = ApplicationPage('Europe', "country: Germany")
-    europe_country = EuropeCountry.get_germany()
-    page_data = EuropeData.find_by_country(europe_country, page)
-    return render_template(
-        'europe/europe_country_germany.html',
-        europe_country=europe_country,
-        page_data=page_data,
-        page_info=page_info)
-
-
-##################################################################################################################
-#
-# Vaccination
-#
-##################################################################################################################
-@app.route('/vaccination/info')
-def url_vaccination_info():
-    page_info = ApplicationPage('Vaccination', "Info")
-    return render_template(
-        'vaccination/vaccination_info.html',
-        page_info=page_info)
-
-
-@app.route('/vaccination/tasks')
-def url_vaccination_tasks():
-    page_info = ApplicationPage('Vaccination', "Tasks")
-    return render_template(
-        'vaccination/vaccination_tasks.html',
-        page_info=page_info)
-
-
-@app.route('/vaccination/update/initial')
-def url_vaccination_update_data():
-    vaccination_service.run_download()
-    vaccination_update_initial_task.apply_async()
-    flash("vaccination_service.run_update started")
-    return redirect(url_for('url_vaccination_tasks'))
-
-
-@app.route('/vaccination/imported/page/<int:page>')
-@app.route('/vaccination/imported')
-def url_vaccination_data_imported(page=1):
-    page_info = ApplicationPage('Vaccination', "Last Import")
-    page_data = VaccinationDataImportTable.get_all_as_page(page)
-    return render_template(
-        'vaccination/vaccination_imported.html',
-        page_data=page_data,
-        page_info=page_info)
-
-
-##################################################################################################################
-#
-# RKI
-#
-##################################################################################################################
-@app.route('/rki/info')
-def url_rki_info():
-    page_info = ApplicationPage('RKI', "Info")
-    return render_template(
-        'rki/rki_info.html',
-        page_info=page_info)
-
-
-@app.route('/rki/tasks')
-def url_rki_tasks():
-    page_info = ApplicationPage('RKI', "Tasks")
-    return render_template(
-        'rki/rki_tasks.html',
-        page_info=page_info)
-
-
-@app.route('/rki/imported/page/<int:page>')
-@app.route('/rki/imported')
-def url_rki_imported(page=1):
-    page_info = ApplicationPage('RKI', "Last Import")
-    try:
-        page_data = WhoGlobalDataImportTable.get_all_as_page(page)
-    except OperationalError:
-        flash("No data in the database.")
-        page_data = None
-    return render_template(
-        'rki/rki_imported.html',
-        page_data=page_data,
-        page_info=page_info)
-
-
-##################################################################################################################
-#
-# NRW
-#
-##################################################################################################################
-@app.route('/nrw/info')
-def url_nrw_info():
-    page_info = ApplicationPage('NRW', "Info")
-    return render_template(
-        'nrw/nrw_info.html',
-        page_info=page_info)
-
-
-@app.route('/nrw/tasks')
-def url_nrw_tasks():
-    page_info = ApplicationPage('NRW', "Tasks")
-    return render_template(
-        'nrw/nrw_tasks.html',
-        page_info=page_info)
-
-
-@app.route('/nrw/imported/<int:page>')
-@app.route('/nrw/imported')
-def url_nrw_imported(page=1):
-    page_info = ApplicationPage('NRW', "Last Import")
-    try:
-        who_imported_all = WhoGlobalDataImportTable.get_all_as_page(page)
-    except OperationalError:
-        flash("No data in the database.")
-        who_imported_all = None
-    return render_template(
-        'nrw/nrw_imported.html',
-        page_data=who_imported_all,
-        page_info=page_info)
-
-
-@app.route('/nrw/bochum/<int:page>')
-@app.route('/nrw/bochum')
-def url_nrw_bochum(page=1):
-    page_info = ApplicationPage('NRW', "Bochum")
-    who_country = WhoCountry.get_germany()
-    list_who_global_data = WhoGlobalData.get_data_for_country(who_country, page)
-    return render_template(
-        'nrw/nrw_stadt.html',
-        who_country=who_country,
-        page_data=list_who_global_data,
-        page_info=page_info)
-
-
-#################################################################################################################
-#
-# Admin
-#
-#################################################################################################################
-@app.route('/admin/tasks')
-def url_admin_tasks():
-    page_info = ApplicationPage('Admin', "Tasks")
-    return render_template(
-        'admin/admin_tasks.html',
-        page_info=page_info)
-
-
-@app.route('/admin/info')
-def url_admin_info():
-    page_info = ApplicationPage('Admin', "Info")
-    return render_template(
-        'admin/admin_info.html',
-        page_info=page_info)
-
-
-@app.route('/admin/alive_message')
-def url_alive_message_start():
-    app.logger.info("url_alive_message_start [start]")
-    alive_message_task.apply_async()
-    flash("alive_message_task started")
-    app.logger.info("url_alive_message_start [done]")
-    return redirect(url_for('url_admin_tasks'))
-
-
-@app.route('/admin/database/dump')
-def url_admin_database_dump():
-    app.logger.info("url_admin_database_dump [start]")
-    admin_service.run_admin_database_dump()
-    flash("admin_service.run_admin_database_dump started")
-    app.logger.info("url_admin_database_dump [done]")
-    return redirect(url_for('url_admin_tasks'))
-
-
-@app.route('/admin/database/import')
-def url_admin_database_import():
-    app.logger.info("url_admin_database_import [start]")
-    admin_service.run_admin_database_import()
-    flash("admin_service.run_admin_database_import started")
-    app.logger.info("url_admin_database_import [done]")
-    return redirect(url_for('url_admin_tasks'))
-
-
-@app.route('/admin/database/drop')
-def url_admin_database_drop():
-    app.logger.info("url_admin_database_drop [start]")
-    flash("admin_service.run_admin_database_drop started")
-    admin_service.run_admin_database_drop()
-    if drop_and_create_data_again:
-        flash("europe_service.download started")
-        europe_service.download()
-        flash("who_service.run_download started")
-        who_service.run_download()
-        flash("vaccination_service.run_download started")
-        vaccination_service.run_download()
-        flash("admin_database_drop_create_task async started")
-        admin_database_drop_create_task.apply_async()
-    app.logger.info("url_admin_database_drop [done]")
-    return redirect(url_for('url_admin_tasks'))
diff --git a/covid19python_mq.py b/covid19python_mq/__init__.py
similarity index 99%
rename from covid19python_mq.py
rename to covid19python_mq/__init__.py
index 0c4bf02d..fbfcddaf 100644
--- a/covid19python_mq.py
+++ b/covid19python_mq/__init__.py
@@ -118,5 +118,3 @@ if __name__ == '__main__':
     admin_service = AdminService(db)
     args = ['worker', '-l', 'INFO']
     celery.start(args)
-
-
diff --git a/run.sh b/run.sh
old mode 100644
new mode 100755
index 342669ce..05f98ceb
--- a/run.sh
+++ b/run.sh
@@ -1,5 +1,5 @@
 #!/usr/bin/env bash
 export FLASK_ENV=development
-export FLASK_APP=yourapplication
+export FLASK_APP=covid19python
 pip install -e .
 flask run
diff --git a/run_mq.sh b/run_mq.sh
new file mode 100755
index 00000000..13d3e2fc
--- /dev/null
+++ b/run_mq.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+export FLASK_ENV=development
+export FLASK_APP=covid19python_mq
+pip install -e .
+flask run
diff --git a/setup.cfg b/setup.cfg
index 8d5dd6c2..eac3523a 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
 [metadata]
 name = covid19python
-version = 0.0.11
+version = 0.0.12
 
 [options]
 packages =
diff --git a/setup.py b/setup.py
index f43623da..b9ccabfd 100644
--- a/setup.py
+++ b/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
 
 setup(
     name='covid19python',
-    version='0.0.11',
+    version='0.0.12',
     packages=find_packages(),
     url='https://github.com/thomaswoehlke/covid19python',
     license='GNU General Public License v3.0',
diff --git a/start_server_mq.sh b/start_server_mq.sh
old mode 100644
new mode 100755
-- 
GitLab