From 5a75c6cddcc033311e19ac6aac6b39ef0e6d3daf Mon Sep 17 00:00:00 2001 From: thomaswoehlke <thomas.woehlke@gmail.com> Date: Tue, 9 Feb 2021 13:22:01 +0100 Subject: [PATCH] ### 0.0.15 Release * ------------------------------------- * Fixed #88 rename VaccinationImport to VaccinationImport * Fixed #89 change tablename from vaccination_germany_timeline_import to vaccination_import * Fixed #86 rename VaccinationData to VaccinationData * Fixed #162 rename table vaccination_germany_timeline into vaccination_data * ------------------------------------- * Fixed #170 implement url_vaccination_task_update_star_schema_initial in vaccination_views.py * Fixed #171 implement url_vaccination_task_update_starschema_incremental in vaccination_views.py * Fixed #172 implement url_vaccination_task_import_only in vaccination_views.py * Fixed #173 implement url_vaccination_task_import_only in vaccination_views.py * Fixed #174 implement url_vaccination_task_update_dimensiontables_only in vaccination_views.py * Fixed #175 implement url_vaccination_task_update_facttable_incremental_only in vaccination_views.py * Fixed #176 implement url_vaccination_task_update_facttable_initial_only in vaccination_views.py * ------------------------------------- * Fixed #91 implement VaccinationService.run_download_only * Fixed #92 implement VaccinationService.run_import_only * Fixed #93 implement VaccinationService.run_update_dimension_tables_only * Fixed #94 implement VaccinationService.run_update_fact_table_incremental_only * Fixed #95 implement VaccinationService.run_update_fact_table_initial_only * Fixed #96 implement VaccinationService.run_update_star_schema_incremental * Fixed #97 implement VaccinationService.run_update_star_schema_initial * Fixed #101 implement VaccinationServiceUpdate.update_dimension_tables_only * Fixed #102 implement VaccinationServiceUpdate.update_fact_table_incremental_only * Fixed #103 implement VaccinationServiceUpdate.update_fact_table_initial_only * Fixed #104 implement VaccinationServiceUpdate.update_star_schema_incremental * Fixed #105 implement VaccinationServiceUpdate.update_star_schema_initial * ------------------------------------- * Fixed #90 refactor VaccinationService to new method scheme introduced 07.02.2021 * Fixed #98 refactor VaccinationServiceDownload to new method scheme introduced 07.02.2021 * Fixed #99 refactor VaccinationServiceImport to new method scheme introduced 07.02.2021 * Fixed #100 refactor VaccinationServiceUpdate to new method scheme introduced 07.02.2021 * ------------------------------------- * Fixed #87 change to: Vaccination.datum many to one VaccinationDateReported * Fixed #106 add Tasks and URLs for starting Tasks to vaccination_views * ------------------------------------- * Issue #39 SQLalchemy instead of SQL: AllModelClasses.remove_all() * Issue #40 SQLalchemy instead of SQL: EuropeImport.get_date_rep() * Issue #41 SQLalchemy instead of SQL: EuropeImport.get_countries_of_continent() * Issue #42 SQLalchemy instead of SQL: WhoImport.get_new_dates_as_array() * Issue #83 SQLalchemy instead of SQL in WhoImport.get_new_dates_as_array * Issue #107 SQLalchemy instead of SQL in: EuropeImport.get_countries_of_continent * Issue #109 SQLalchemy instead of SQL in: EuropeImport.get_date_rep * Issue #110 SQLalchemy instead of SQL in: EuropeImport.get_continent * ------------------------------------- * Issue #82 change to ORM ClassHierarchy * Issue #108 change to ORM ClassHierarchy in: EuropeImport.get_countries_of_continent * Issue #129 change to ORM ClassHierarchy in: RkiLandkreiseImport.get_new_dates_as_array * Issue #131 change to ORM ClassHierarchy in: RkiGermanyDataImportTable.get_new_dates_as_array * ------------------------------------- * Issue #111 refactor to new method scheme itroduced 07.02.2021 * Issue #117 refactor EuropeServiceUpdate to new method scheme introduced 07.02.2021 * Issue #112 implement EuropeService.run_update_dimension_tables_only * Issue #113 implement EuropeService.run_update_fact_table_incremental_only * Issue #114 implement EuropeService.run_update_fact_table_initial_only * Issue #115 implement EuropeService.run_update_star_schema_incremental * Issue #116 implement EuropeService.run_update_star_schema_initial * Issue #118 implement EuropeServiceUpdate.update_dimension_tables_only * Issue #119 implement EuropeServiceUpdate.update_fact_table_incremental_only * Issue #120 implement EuropeServiceUpdate.update_fact_table_initial_only * Issue #121 implement EuropeServiceUpdate.update_star_schema_incremental * Issue #122 implement EuropeServiceUpdate.update_star_schema_initial * ------------------------------------- * Issue #163 implement url_europe_task_update_star_schema_initial in europe_views.py * Issue #164 implement url_europe_task_update_starschema_incremental in europe_views.py * Issue #165 implement url_europe_task_download_only in europe_views.py * Issue #166 implement url_europe_task_import_only in europe_views.py * Issue #167 implement url_europe_task_update_dimensiontables_only in europe_views.py * Issue #168 implement url_europe_task_update_facttable_incremental_only in europe_views.py * Issue #169 implement url_europe_task_update_facttable_initial_only in europe_views.py * ------------------------------------- * Issue #146 add Tasks and URLs for starting Tasks to rki_views * Issue #140 move WhoImport to RKI in: rk_service_import.py * Issue #139 refactor RkiBundeslaenderServiceDownload to new method scheme introduced 07.02.2021 * Issue #123 split RkiBundeslaenderService into two Services, one for bundeslaender and one for landkreise * Issue #125 implement RkiLandkreise * Issue #126 implement RkiBundeslaenderImport * Issue #127 implement RkiBundeslaenderImport.get_dates_reported * Issue #128 add fields from csv to RkiLandkreiseImport * Issue #132 refactor RkiBundeslaenderService to new method scheme introduced 07.02.2021 * Issue #133 implement RkiBundeslaenderService.task_database_drop_create * Issue #134 implement RkiBundeslaenderService.run_update_dimension_tables_only * Issue #135 implement RkiBundeslaenderService.run_update_fact_table_incremental_only * Issue #136 implement RkiBundeslaenderService.run_update_fact_table_initial_only * Issue #137 implement RkiBundeslaenderService.run_update_star_schema_incremental * Issue #138 implement RkiBundeslaenderService.run_update_star_schema_initial * Issue #141 implement RkiBundeslaenderServiceUpdate.update_dimension_tables_only * Issue #142 implement RkiBundeslaenderServiceUpdate.update_fact_table_incremental_only * Issue #143 implement RkiBundeslaenderServiceUpdate.update_fact_table_initial_only * Issue #144 implement RkiBundeslaenderServiceUpdate.update_star_schema_incremental * Issue #145 implement RkiBundeslaenderServiceUpdate.update_star_schema_initial * Issue #147 refactor RkiBundeslaenderServiceUpdate.__update_who_date_reported * Issue #148 refactor RkiBundeslaenderServiceUpdate.__update_who_region * Issue #149 refactor RkiBundeslaenderServiceUpdate.__update_who_country * Issue #150 refactor RkiBundeslaenderServiceUpdate.__update_who_global_data * Issue #151 refactor RkiBundeslaenderServiceUpdate.__update_who_global_data_short * Issue #152 refactor RkiBundeslaenderServiceUpdate.__update_who_global_data_initial * Issue #153 refactor RkiBundeslaenderServiceUpdate.update_db * Issue #154 refactor RkiBundeslaenderServiceUpdate.update_db_short * Issue #155 refactor RkiBundeslaenderServiceUpdate.update_db_initial * ------------------------------------- * Issue #156 run_web.sh * Issue #157 run_worker.sh --- BACKLOG.md | 5 ++ src/covid19/blueprints/admin/admin_views.py | 4 +- src/covid19/blueprints/common/common_model.py | 25 +++++-- .../blueprints/europe/europe_service.py | 31 ++++---- src/covid19/blueprints/europe/europe_views.py | 52 +++++++------- src/covid19/blueprints/rki/rki_service.py | 4 +- ...ine_germany.html => vaccination_data.html} | 0 .../vaccination/vaccination_import.html | 62 ++++++++++++++++ .../vaccination/vaccination_model.py | 2 - .../vaccination/vaccination_model_import.py | 6 -- .../vaccination/vaccination_service.py | 49 +++++-------- .../vaccination_service_download.py | 1 - .../vaccination/vaccination_service_import.py | 1 - .../vaccination/vaccination_service_update.py | 70 +++++++------------ .../vaccination/vaccination_views.py | 56 ++++++--------- src/covid19/services.py | 2 +- 16 files changed, 204 insertions(+), 166 deletions(-) rename src/covid19/blueprints/vaccination/templates/vaccination/{vaccination_timeline_germany.html => vaccination_data.html} (100%) create mode 100644 src/covid19/blueprints/vaccination/templates/vaccination/vaccination_import.html diff --git a/BACKLOG.md b/BACKLOG.md index b2579c7b..8a922ba4 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -125,6 +125,11 @@ ### 0.0.15 Release * ------------------------------------- +* Fixed #88 rename VaccinationImport to VaccinationImport +* Fixed #89 change tablename from vaccination_germany_timeline_import to vaccination_import +* Fixed #86 rename VaccinationData to VaccinationData +* Fixed #162 rename table vaccination_germany_timeline into vaccination_data +* ------------------------------------- * Fixed #170 implement url_vaccination_task_update_star_schema_initial in vaccination_views.py * Fixed #171 implement url_vaccination_task_update_starschema_incremental in vaccination_views.py * Fixed #172 implement url_vaccination_task_import_only in vaccination_views.py diff --git a/src/covid19/blueprints/admin/admin_views.py b/src/covid19/blueprints/admin/admin_views.py index 240186e6..ea72ffa4 100644 --- a/src/covid19/blueprints/admin/admin_views.py +++ b/src/covid19/blueprints/admin/admin_views.py @@ -3,7 +3,7 @@ from celery import states from celery.utils.log import get_task_logger from database import app -from covid19.services import who_service, europe_service, vaccination_service, admin_service, rki_service +from covid19.services import who_service, europe_service, vaccination_service, admin_service, rki_service_bundeslaender from covid19.workers import celery from covid19.blueprints.common.common_model_transient import ApplicationPage @@ -109,7 +109,7 @@ def url_admin_database_drop(): who_service.pretask_database_drop_create() europe_service.pretask_database_drop_create() vaccination_service.pretask_database_drop_create() - rki_service.pretask_database_drop_create() + rki_service_bundeslaender.pretask_database_drop_create() flash("task_admin_database_drop_create async started") task_admin_database_drop_create.apply_async() app.logger.info("url_admin_database_drop [done]") diff --git a/src/covid19/blueprints/common/common_model.py b/src/covid19/blueprints/common/common_model.py index 44c6bc7d..99a8dc7d 100644 --- a/src/covid19/blueprints/common/common_model.py +++ b/src/covid19/blueprints/common/common_model.py @@ -95,9 +95,9 @@ class CommonDateReported(db.Model): .one() @classmethod - def find_by_date_reported(cls, i_date_reported): + def find_by_id(cls, other_id): return db.session.query(cls)\ - .filter(cls.date_reported == i_date_reported)\ + .filter(cls.id == other_id)\ .one_or_none() @classmethod @@ -107,9 +107,9 @@ class CommonDateReported(db.Model): .one() @classmethod - def find_by_year_week(cls, year_week): + def find_by_date_reported(cls, i_date_reported): return db.session.query(cls)\ - .filter(cls.year_week == year_week)\ + .filter(cls.date_reported == i_date_reported)\ .one_or_none() @classmethod @@ -118,6 +118,11 @@ class CommonDateReported(db.Model): .filter(cls.year_week == year_week)\ .one() + @classmethod + def find_by_year_week(cls, year_week): + return db.session.query(cls)\ + .filter(cls.year_week == year_week)\ + .one_or_none() class CommonRegion(db.Model): __tablename__ = 'common_region' @@ -161,6 +166,18 @@ class CommonRegion(db.Model): .filter(cls.id == other_id)\ .one() + @classmethod + def find_by_id(cls, other_id): + return db.session.query(cls)\ + .filter(cls.id == other_id)\ + .one_or_none() + + @classmethod + def get_by_region(cls, i_who_region): + return db.session.query(cls)\ + .filter(cls.region == i_who_region)\ + .one() + @classmethod def find_by_region(cls, i_who_region): return db.session.query(cls)\ diff --git a/src/covid19/blueprints/europe/europe_service.py b/src/covid19/blueprints/europe/europe_service.py index 8692f4e7..bf1fc231 100644 --- a/src/covid19/blueprints/europe/europe_service.py +++ b/src/covid19/blueprints/europe/europe_service.py @@ -37,33 +37,36 @@ class EuropeService: self.europe_service_import.import_datafile_to_db() return self + # TODO: #112 implement EuropeService.run_update_dimension_tables_only + # TODO: #111 refactor to new method scheme itroduced 07.02.2021 def run_update_dimension_tables_only(self): - # TODO: #112 implement EuropeService.run_update_dimension_tables_only - # TODO: #111 refactor to new method scheme itroduced 07.02.2021 return self + # TODO: #113 implement EuropeService.run_update_fact_table_incremental_only + # TODO: #111 refactor to new method scheme itroduced 07.02.2021 def run_update_fact_table_incremental_only(self): - # TODO: #113 implement EuropeService.run_update_fact_table_incremental_only - # TODO: #111 refactor to new method scheme itroduced 07.02.2021 return self + + # TODO: #114 implement EuropeService.run_update_fact_table_initial_only + # TODO: #111 refactor to new method scheme itroduced 07.02.2021 def run_update_fact_table_initial_only(self): - # TODO: #114 implement EuropeService.run_update_fact_table_initial_only - # TODO: #111 refactor to new method scheme itroduced 07.02.2021 return self + # TODO: #115 implement EuropeService.run_update_star_schema_incremental + # TODO: #111 refactor to new method scheme itroduced 07.02.2021 def run_update_star_schema_incremental(self): - # TODO: #115 implement EuropeService.run_update_star_schema_incremental - # TODO: #111 refactor to new method scheme itroduced 07.02.2021 return self + + # TODO: #116 implement EuropeService.run_update_star_schema_initial + # TODO: #111 refactor to new method scheme itroduced 07.02.2021 def run_update_star_schema_initial(self): - # TODO: #116 implement EuropeService.run_update_star_schema_initial - # TODO: #111 refactor to new method scheme itroduced 07.02.2021 return self + # TODO remove DEPRECATED # TODO: #111 refactor to new method scheme itroduced 07.02.2021 - def download(self): + def download_DEPRECATED(self): app.logger.info(" download [begin]") app.logger.info("------------------------------------------------------------") self.europe_service_download.download() @@ -71,8 +74,9 @@ class EuropeService: app.logger.info("------------------------------------------------------------") return self + # TODO remove DEPRECATED # TODO: #111 refactor to new method scheme itroduced 07.02.2021 - def run_update_initial(self): + def run_update_initial_DEPRECATED(self): app.logger.info(" run update [begin]") app.logger.info("------------------------------------------------------------") self.europe_service_import.import_datafile_to_db() @@ -81,8 +85,9 @@ class EuropeService: app.logger.info("------------------------------------------------------------") return self + # TODO remove DEPRECATED # TODO: #111 refactor to new method scheme itroduced 07.02.2021 - def run_update_short(self): + def run_update_short_DEPRECATED(self): app.logger.info(" run update short [begin]") app.logger.info("------------------------------------------------------------") self.europe_service_import.import_datafile_to_db() diff --git a/src/covid19/blueprints/europe/europe_views.py b/src/covid19/blueprints/europe/europe_views.py index bb853656..1856163a 100644 --- a/src/covid19/blueprints/europe/europe_views.py +++ b/src/covid19/blueprints/europe/europe_views.py @@ -21,8 +21,9 @@ app_europe = Blueprint('europe', __name__, template_folder='templates') ################################################################################################################## +# TODO remove DEPRECATED @celery.task(bind=True) -def task_europe_update_initial(self): +def task_europe_update_initial_DEPRECATED(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") @@ -34,14 +35,15 @@ def task_europe_update_initial(self): return result +# TODO remove DEPRECATED @celery.task(bind=True) -def task_europe_update_short(self): +def task_europe_update_short_DEPRECATED(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") logger.info(" Received: task_europe_update_short [OK] ") logger.info("------------------------------------------------------------") - europe_service.run_update_short() + europe_service.run_update_short_DEPRECATED() self.update_state(state=states.SUCCESS) result = "OK (task_europe_update_short)" return result @@ -54,7 +56,7 @@ def task_europe_download_only(self): logger.info("------------------------------------------------------------") logger.info(" Received: task_europe_download_only [OK] ") logger.info("------------------------------------------------------------") - europe_service.task_europe_download_only() # TODO + europe_service.task_download_only() # TODO self.update_state(state=states.SUCCESS) result = "OK (task_europe_download_only)" return result @@ -67,7 +69,7 @@ def task_europe_import_only(self): logger.info("------------------------------------------------------------") logger.info(" Received: task_europe_import_only [OK] ") logger.info("------------------------------------------------------------") - europe_service.task_europe_import_only() # TODO + europe_service.task_import_only() # TODO self.update_state(state=states.SUCCESS) result = "OK (task_europe_import_only)" return result @@ -80,7 +82,7 @@ def task_europe_update_dimension_tables_only(self): logger.info("------------------------------------------------------------") logger.info(" Received: task_europe_update_dimension_tables_only [OK] ") logger.info("------------------------------------------------------------") - europe_service.task_europe_update_dimension_tables_only() # TODO + europe_service.task_update_dimension_tables_only() # TODO self.update_state(state=states.SUCCESS) result = "OK (task_europe_update_dimension_tables_only)" return result @@ -93,7 +95,7 @@ def task_europe_update_fact_table_incremental_only(self): logger.info("------------------------------------------------------------") logger.info(" Received: task_europe_update_fact_table_incremental_only [OK] ") logger.info("------------------------------------------------------------") - europe_service.task_europe_update_fact_table_incremental_only() # TODO + europe_service.task_update_fact_table_incremental_only() # TODO self.update_state(state=states.SUCCESS) result = "OK (task_europe_update_fact_table_incremental_only)" return result @@ -106,7 +108,7 @@ def task_europe_update_fact_table_initial_only(self): logger.info("------------------------------------------------------------") logger.info(" Received: task_europe_update_fact_table_initial_only [OK] ") logger.info("------------------------------------------------------------") - europe_service.task_europe_update_fact_table_initial_only() # TODO + europe_service.task_update_fact_table_initial_only() # TODO self.update_state(state=states.SUCCESS) result = "OK (task_europe_update_fact_table_initial_only)" return result @@ -119,7 +121,7 @@ def task_europe_update_fact_table_initial_only(self): logger.info("------------------------------------------------------------") logger.info(" Received: task_europe_update_fact_table_initial_only [OK] ") logger.info("------------------------------------------------------------") - europe_service.task_europe_update_fact_table_initial_only() # TODO + europe_service.task_update_fact_table_initial_only() # TODO self.update_state(state=states.SUCCESS) result = "OK (task_europe_update_fact_table_initial_only)" return result @@ -132,7 +134,7 @@ def task_europe_update_star_schema_incremental(self): logger.info("------------------------------------------------------------") logger.info(" Received: task_europe_update_star_schema_incremental [OK] ") logger.info("------------------------------------------------------------") - europe_service.task_europe_update_star_schema_incremental() # TODO + europe_service.task_update_star_schema_incremental() # TODO self.update_state(state=states.SUCCESS) result = "OK (task_europe_update_star_schema_incremental)" return result @@ -145,7 +147,7 @@ def task_europe_update_star_schema_initial(self): logger.info("------------------------------------------------------------") logger.info(" Received: task_europe_update_star_schema_initial [OK] ") logger.info("------------------------------------------------------------") - europe_service.task_europe_update_star_schema_initial() # TODO + europe_service.task_update_star_schema_initial() # TODO self.update_state(state=states.SUCCESS) result = "OK (task_europe_update_star_schema_initial)" return result @@ -296,66 +298,68 @@ def url_europe_country_germany(page=1): page_info=page_info) +# TODO remove DEPRECATED @app_europe.route('/update/initial') -def url_europe_task_europe_update_data(): - europe_service.download() - task_europe_update_initial.apply_async() +def url_europe_task_update_data_DEPRECATED(): + europe_service.download_DEPRECATED() + task_europe_update_initial_DEPRECATED.apply_async() flash("task_europe_update_initial started") return redirect(url_for('url_europe_tasks')) +# TODO remove DEPRECATED @app_europe.route('/update/short') -def url_europe_task_europe_update_data_short(): - europe_service.download() - task_europe_update_short.apply_async() +def url_europe_task_update_data_short_DEPRECATED(): + europe_service.download_DEPRECATED() + task_europe_update_short_DEPRECATED.apply_async() flash("task_europe_update_short started") return redirect(url_for('url_europe_tasks')) +# TODO: #163 implement url_europe_task_update_star_schema_initial in europe_views.py @app_europe.route('/task/update/star_schema/initial') def url_europe_task_update_star_schema_initial(): flash("url_europe_task_update_star_schema_initial started") - # TODO: #163 implement url_europe_task_update_star_schema_initial in europe_views.py return redirect(url_for('url_europe_tasks')) +# TODO: #164 implement url_europe_task_update_starschema_incremental in europe_views.py @app_europe.route('/task/update/star_schema/incremental') def url_europe_task_update_starschema_incremental(): flash("url_europe_task_update_starschema_incremental started") - # TODO: #164 implement url_europe_task_update_starschema_incremental in europe_views.py return redirect(url_for('url_europe_tasks')) +# TODO: #165 implement url_europe_task_download_only in europe_views.py @app_europe.route('/task/download/only') def url_europe_task_download_only(): flash("url_europe_task_download_only started") - # TODO: #165 implement url_europe_task_download_only in europe_views.py return redirect(url_for('url_europe_tasks')) +# TODO: #166 implement url_europe_task_import_only in europe_views.py @app_europe.route('/task/import/only') def url_europe_task_import_only(): flash("url_europe_task_import_only started") - # TODO: #166 implement url_europe_task_import_only in europe_views.py return redirect(url_for('url_europe_tasks')) +# TODO: #167 implement url_europe_task_update_dimensiontables_only in europe_views.py @app_europe.route('/task/update/dimension-tables/only') def url_europe_task_update_dimensiontables_only(): flash("url_europe_task_update_dimensiontables_only started") - # TODO: #167 implement url_europe_task_update_dimensiontables_only in europe_views.py return redirect(url_for('url_europe_tasks')) +# TODO: #168 implement url_europe_task_update_facttable_incremental_only in europe_views.py @app_europe.route('/task/update/fact-table/incremental/only') def url_europe_task_update_facttable_incremental_only(): flash("url_europe_task_update_facttable_incremental_only started") - # TODO: #168 implement url_europe_task_update_facttable_incremental_only in europe_views.py return redirect(url_for('url_europe_tasks')) +# TODO: #169 implement url_europe_task_update_facttable_initial_only in europe_views.py @app_europe.route('/task/update/fact-table/initial/only') def url_europe_task_update_facttable_initial_only(): flash("url_europe_task_update_facttable_initial_only started") - # TODO: #169 implement url_europe_task_update_facttable_initial_only in europe_views.py return redirect(url_for('url_europe_tasks')) diff --git a/src/covid19/blueprints/rki/rki_service.py b/src/covid19/blueprints/rki/rki_service.py index 182fbda1..8ad5c2da 100644 --- a/src/covid19/blueprints/rki/rki_service.py +++ b/src/covid19/blueprints/rki/rki_service.py @@ -22,7 +22,7 @@ class RkiBundeslaenderService: app.logger.info(" RKI Service [ready]") def pretask_database_drop_create(self): - flash("rki_service.run_download started") + flash("rki_service_bundeslaender.run_download started") self.service_download.download_file() return self @@ -127,7 +127,7 @@ class RkiLandkreiseService: app.logger.info(" RKI Service [ready]") def pretask_database_drop_create(self): - flash("rki_service.run_download started") + flash("rki_service_bundeslaender.run_download started") self.service_download.download_file() return self diff --git a/src/covid19/blueprints/vaccination/templates/vaccination/vaccination_timeline_germany.html b/src/covid19/blueprints/vaccination/templates/vaccination/vaccination_data.html similarity index 100% rename from src/covid19/blueprints/vaccination/templates/vaccination/vaccination_timeline_germany.html rename to src/covid19/blueprints/vaccination/templates/vaccination/vaccination_data.html diff --git a/src/covid19/blueprints/vaccination/templates/vaccination/vaccination_import.html b/src/covid19/blueprints/vaccination/templates/vaccination/vaccination_import.html new file mode 100644 index 00000000..8d827f8b --- /dev/null +++ b/src/covid19/blueprints/vaccination/templates/vaccination/vaccination_import.html @@ -0,0 +1,62 @@ +{% extends 'common/page_layout.html' %} + +{% include 'common/fragment_pagination.html' %} + +{% block navigation_breadcrumb %} + +{% endblock %} + + +{% block navigation_navtabs %} + {% include 'vaccination/fragments/fragment_vaccination_navtabs.html' %} +{% endblock %} + + +{% block main_container_fluid %} + + {% if page_data.pages > 1 %} + <!-- previous page --> + <ul class="pagination"> + {% if page_data.has_prev %} + <li class="page-item"> + <a class="page-link" href="{{ url_for('vaccination.url_vaccination_timeline_germany', page=page_data.prev_num) }}">Previous</a> + </li> + {% endif %} + <!-- all page numbers --> + {% for page_num in page_data.iter_pages() %} + {% if page_num %} + {% if page_num != page_data.page %} + <li class="page-item"> + <a class="page-link" href="{{ url_for('vaccination.url_vaccination_timeline_germany', page=page_num) }}">{{ page_num }}</a> + </li> + {% else %} + <li class="page-item active"> + <a class="page-link" href="#">{{ page_num }}</a> + </li> + {% endif %} + {% else %} + <li class="page-item"> + <span class="ellipsis page-link my-page-item-ellipsis-page-link">…</span> + </li> + {% endif %} + {% endfor %} + <!-- next page --> + {% if page_data.has_next %} + <li class="page-item"> + <a class="page-link" href="{{ url_for('vaccination.url_vaccination_timeline_germany', page=page_data.next_num) }}">Next</a> + </li> + {% endif %} + </ul> + {% endif %} + + {% include 'vaccination/fragments/fragment_vaccination_timeline_germany_table.html' %} + +{% endblock %} + + +{% block footer_container %} + +{% endblock %} + + + diff --git a/src/covid19/blueprints/vaccination/vaccination_model.py b/src/covid19/blueprints/vaccination/vaccination_model.py index 9c9322d5..f1e40c07 100644 --- a/src/covid19/blueprints/vaccination/vaccination_model.py +++ b/src/covid19/blueprints/vaccination/vaccination_model.py @@ -45,8 +45,6 @@ class VaccinationDateReported(CommonDateReported): ) -# TODO: #86 rename VaccinationData to VaccinationData -# TODO: #162 rename table vaccination_germany_timeline into vaccination_data class VaccinationData(db.Model): __tablename__ = 'vaccination_data' diff --git a/src/covid19/blueprints/vaccination/vaccination_model_import.py b/src/covid19/blueprints/vaccination/vaccination_model_import.py index d22bb379..26690727 100644 --- a/src/covid19/blueprints/vaccination/vaccination_model_import.py +++ b/src/covid19/blueprints/vaccination/vaccination_model_import.py @@ -1,11 +1,6 @@ -from sqlalchemy.orm import defer -from sqlalchemy.orm import undefer - from database import db, ITEMS_PER_PAGE -# TODO: #88 rename VaccinationImport to VaccinationImport -# TODO: #89 change tablename from vaccination_germany_timeline_import to vaccination_import class VaccinationImport(db.Model): __tablename__ = 'vaccination_import' @@ -122,5 +117,4 @@ class VaccinationImport(db.Model): new_dates = [] for item, in db.session.execute(sql_query): new_dates.append(item) - #new_dates.append(item['date_reported']) return new_dates \ No newline at end of file diff --git a/src/covid19/blueprints/vaccination/vaccination_service.py b/src/covid19/blueprints/vaccination/vaccination_service.py index 2b032342..72ce5b4a 100644 --- a/src/covid19/blueprints/vaccination/vaccination_service.py +++ b/src/covid19/blueprints/vaccination/vaccination_service.py @@ -7,7 +7,6 @@ from covid19.blueprints.vaccination.vaccination_service_config import Vaccinatio from covid19.blueprints.vaccination.vaccination_service_update import VaccinationServiceUpdate -# TODO: #90 refactor VaccinationService to new method scheme introduced 07.02.2021 class VaccinationService: def __init__(self, database): app.logger.debug("------------------------------------------------------------") @@ -31,67 +30,51 @@ class VaccinationService: self.vaccination_service_udpate.update_star_schema_initial() return self - # TODO: #90 refactor VaccinationService to new method scheme introduced 07.02.2021 - # TODO: #91 implement VaccinationService.run_download_only def run_download_only(self): self.vaccination_service_download.download_file() return self - # TODO: #90 refactor VaccinationService to new method scheme introduced 07.02.2021 - # TODO: #92 implement VaccinationService.run_import_only def run_import_only(self): self.vaccination_service_import.import_file() return self - # TODO: #90 refactor VaccinationService to new method scheme introduced 07.02.2021 - # TODO: #93 implement VaccinationService.run_update_dimension_tables_only def run_update_dimension_tables_only(self): self.vaccination_service_udpate.update_dimension_tables_only() return self - # TODO: #90 refactor VaccinationService to new method scheme introduced 07.02.2021 - # TODO: #94 implement VaccinationService.run_update_fact_table_incremental_only def run_update_fact_table_incremental_only(self): self.vaccination_service_udpate.update_fact_table_incremental_only() return self - # TODO: #90 refactor VaccinationService to new method scheme introduced 07.02.2021 - # TODO: #95 implement VaccinationService.run_update_fact_table_initial_only def run_update_fact_table_initial_only(self): self.vaccination_service_udpate.update_fact_table_initial_only() return self - # TODO: #90 refactor VaccinationService to new method scheme introduced 07.02.2021 - # TODO: #96 implement VaccinationService.run_update_star_schema_incremental def run_update_star_schema_incremental(self): self.vaccination_service_udpate.update_star_schema_incremental() return self - # TODO: #90 refactor VaccinationService to new method scheme introduced 07.02.2021 - # TODO: #97 implement VaccinationService.run_update_star_schema_initial def run_update_star_schema_initial(self): self.run_import_only() self.vaccination_service_udpate.update_star_schema_initial() return self # TODO remove DEPRECATED - # TODO: #90 refactor VaccinationService to new method scheme introduced 07.02.2021 - def run_download_DEPRECATED(self): - app.logger.info(" run update [begin]") - app.logger.info("------------------------------------------------------------") - success = self.vaccination_service_download.download_file() - app.logger.info("") - app.logger.info(" run update [done]") - app.logger.info("------------------------------------------------------------") - return success + #def run_download_DEPRECATED(self): + # app.logger.info(" run update [begin]") + # app.logger.info("------------------------------------------------------------") + # success = self.vaccination_service_download.download_file() + # app.logger.info("") + # app.logger.info(" run update [done]") + # app.logger.info("------------------------------------------------------------") + # return success # TODO remove DEPRECATED - # TODO: #90 refactor VaccinationService to new method scheme introduced 07.02.2021 - def run_update_initial_DEPRECATED(self): - app.logger.info(" run update initial [begin]") - app.logger.info("------------------------------------------------------------") - self.vaccination_service_import.import_file() - app.logger.info("") - app.logger.info(" run update initial [done]") - app.logger.info("------------------------------------------------------------") - return self + #def run_update_initial_DEPRECATED(self): + # app.logger.info(" run update initial [begin]") + # app.logger.info("------------------------------------------------------------") + # self.vaccination_service_import.import_file() + # app.logger.info("") + # app.logger.info(" run update initial [done]") + # app.logger.info("------------------------------------------------------------") + # return self diff --git a/src/covid19/blueprints/vaccination/vaccination_service_download.py b/src/covid19/blueprints/vaccination/vaccination_service_download.py index 56aef73a..71cd8f10 100644 --- a/src/covid19/blueprints/vaccination/vaccination_service_download.py +++ b/src/covid19/blueprints/vaccination/vaccination_service_download.py @@ -5,7 +5,6 @@ from database import app from covid19.blueprints.vaccination.vaccination_service_config import VaccinationServiceConfig -# TODO: #98 refactor VaccinationServiceDownload to new method scheme introduced 07.02.2021 class VaccinationServiceDownload: def __init__(self, database): app.logger.debug("------------------------------------------------------------") diff --git a/src/covid19/blueprints/vaccination/vaccination_service_import.py b/src/covid19/blueprints/vaccination/vaccination_service_import.py index e246b061..2138c177 100644 --- a/src/covid19/blueprints/vaccination/vaccination_service_import.py +++ b/src/covid19/blueprints/vaccination/vaccination_service_import.py @@ -7,7 +7,6 @@ from covid19.blueprints.vaccination.vaccination_model_import import VaccinationI from covid19.blueprints.vaccination.vaccination_service_config import VaccinationServiceConfig -# TODO: #99 refactor VaccinationServiceImport to new method scheme introduced 07.02.2021 class VaccinationServiceImport: def __init__(self, database): app.logger.debug("------------------------------------------------------------") diff --git a/src/covid19/blueprints/vaccination/vaccination_service_update.py b/src/covid19/blueprints/vaccination/vaccination_service_update.py index 7403e3c5..c52ac751 100644 --- a/src/covid19/blueprints/vaccination/vaccination_service_update.py +++ b/src/covid19/blueprints/vaccination/vaccination_service_update.py @@ -5,7 +5,6 @@ from covid19.blueprints.vaccination.vaccination_model_import import VaccinationI from covid19.blueprints.vaccination.vaccination_model import VaccinationDateReported, VaccinationData -# TODO: #100 refactor VaccinationServiceUpdate to new method scheme introduced 07.02.2021 class VaccinationServiceUpdate: def __init__(self, database): app.logger.debug("------------------------------------------------------------") @@ -16,7 +15,6 @@ class VaccinationServiceUpdate: app.logger.debug("------------------------------------------------------------") app.logger.debug(" Europe Service Update [ready] ") - # TODO: #100 refactor VaccinationServiceUpdate to new method scheme introduced 07.02.2021 def __update_date_reported(self): app.logger.info(" __update_date_reported [begin]") app.logger.info("------------------------------------------------------------") @@ -35,7 +33,6 @@ class VaccinationServiceUpdate: app.logger.info("------------------------------------------------------------") return self - # TODO: #100 refactor VaccinationServiceUpdate to new method scheme introduced 07.02.2021 def __update_data_initial(self): app.logger.info(" __update_data_initial [begin]") app.logger.info("------------------------------------------------------------") @@ -134,73 +131,60 @@ class VaccinationServiceUpdate: return self # TODO: remove DEPRECATED - # TODO: #100 refactor VaccinationServiceUpdate to new method scheme introduced 07.02.2021 - def __update_data_short_DEPRECATED(self): - app.logger.info(" __update_data_initial [begin]") - app.logger.info("------------------------------------------------------------") - app.logger.info(" ... ") - app.logger.info(" __update_data_initial [done]") - app.logger.info("------------------------------------------------------------") - return self + #def __update_data_short_DEPRECATED(self): + # app.logger.info(" __update_data_initial [begin]") + # app.logger.info("------------------------------------------------------------") + # app.logger.info(" ... ") + # app.logger.info(" __update_data_initial [done]") + # app.logger.info("------------------------------------------------------------") + # return self # TODO: remove DEPRECATED - # TODO: #100 refactor VaccinationServiceUpdate to new method scheme introduced 07.02.2021 - def update_db_initial_DEPRECATED(self): - app.logger.info(" update_db_initial [begin]") - app.logger.info("------------------------------------------------------------") - VaccinationDateReported.remove_all() - VaccinationData.remove_all() - self.__update_date_reported() - self.__update_data_initial() - app.logger.info(" update_db_initial [done]") - app.logger.info("------------------------------------------------------------") - return self + #def update_db_initial_DEPRECATED(self): + # app.logger.info(" update_db_initial [begin]") + # app.logger.info("------------------------------------------------------------") + # VaccinationDateReported.remove_all() + # VaccinationData.remove_all() + # self.__update_date_reported() + # self.__update_data_initial() + # app.logger.info(" update_db_initial [done]") + # app.logger.info("------------------------------------------------------------") + # return self # TODO: remove DEPRECATED - # TODO: #100 refactor VaccinationServiceUpdate to new method scheme introduced 07.02.2021 - def update_db_short_DEPRECATED(self): - app.logger.info(" update_db_short [begin]") - app.logger.info("------------------------------------------------------------") - VaccinationDateReported.remove_all() - VaccinationData.remove_all() - self.__update_date_reported() - self.__update_data_short_DEPRECATED() - app.logger.info(" update_db_short [done]") - app.logger.info("------------------------------------------------------------") - return self + #def update_db_short_DEPRECATED(self): + # app.logger.info(" update_db_short [begin]") + # app.logger.info("------------------------------------------------------------") + # VaccinationDateReported.remove_all() + # VaccinationData.remove_all() + # self.__update_date_reported() + # self.__update_data_short_DEPRECATED() + # app.logger.info(" update_db_short [done]") + # app.logger.info("------------------------------------------------------------") + # return self # Delegate def __update_dimension_table_date_reported(self): self.__update_date_reported() return self - # TODO: #101 implement VaccinationServiceUpdate.update_dimension_tables_only - # TODO: #100 refactor VaccinationServiceUpdate to new method scheme introduced 07.02.2021s def update_dimension_tables_only(self): self.__update_dimension_table_date_reported() return self - # TODO: #102 implement VaccinationServiceUpdate.update_fact_table_incremental_only - # TODO: #100 refactor VaccinationServiceUpdate to new method scheme introduced 07.02.2021 def update_fact_table_incremental_only(self): self.__update_data_incremental() return self - # TODO: #103 implement VaccinationServiceUpdate.update_fact_table_initial_only - # TODO: #100 refactor VaccinationServiceUpdate to new method scheme introduced 07.02.2021 def update_fact_table_initial_only(self): self.__update_data_initial() return self - # TODO: #104 implement VaccinationServiceUpdate.update_star_schema_incremental - # TODO: #100 refactor VaccinationServiceUpdate to new method scheme introduced 07.02.2021 def update_star_schema_incremental(self): self.__update_dimension_table_date_reported() self.__update_data_incremental() return self - # TODO: #105 implement VaccinationServiceUpdate.update_star_schema_initial - # TODO: #100 refactor VaccinationServiceUpdate to new method scheme introduced 07.02.2021 def update_star_schema_initial(self): VaccinationData.remove_all() VaccinationDateReported.remove_all() diff --git a/src/covid19/blueprints/vaccination/vaccination_views.py b/src/covid19/blueprints/vaccination/vaccination_views.py index 16e20fb5..f5aa26c6 100644 --- a/src/covid19/blueprints/vaccination/vaccination_views.py +++ b/src/covid19/blueprints/vaccination/vaccination_views.py @@ -6,7 +6,7 @@ from database import app from covid19.services import vaccination_service from covid19.workers import celery -from covid19.blueprints.vaccination.vaccination_model import VaccinationData +from covid19.blueprints.vaccination.vaccination_model import VaccinationData, VaccinationDateReported from covid19.blueprints.vaccination.vaccination_model_import import VaccinationImport from covid19.blueprints.common.common_model_transient import ApplicationPage @@ -128,27 +128,25 @@ def url_vaccination_tasks(): page_info=page_info) -@app_vaccination.route('/tmp/timeline/germany/page/<int:page>') -@app_vaccination.route('/tmp/timeline/germany') -def url_vaccination_timeline_germany_tmp(page=1): - page_info = ApplicationPage('Vaccination', "Germany Timeline") +@app_vaccination.route('/imported/page/<int:page>') +@app_vaccination.route('/imported') +def url_vaccination_imported(page=1): + page_info = ApplicationPage('Vaccination', "Data: Germany Timeline imported") page_data = VaccinationImport.get_all_as_page(page) - #page_data_tmp = VaccinationData.get_all_as_page(page) return render_template( - 'vaccination/vaccination_timeline_germany.html', + 'vaccination/vaccination_imported.html', page_data=page_data, page_info=page_info) -@app_vaccination.route('/timeline/germany/page/<int:page>') -@app_vaccination.route('/timeline/germany') -def url_vaccination_timeline_germany(page=1): - page_info = ApplicationPage('Vaccination', "Germany Timeline") - #page_data = VaccinationImport.get_all_as_page(page) - page_data_tmp = VaccinationData.get_all_as_page(page) +@app_vaccination.route('/data/page/<int:page>') +@app_vaccination.route('/data') +def url_vaccination_data(page=1): + page_info = ApplicationPage('Vaccination', "Data: Germany Timeline") + page_data = VaccinationData.get_all_as_page(page) return render_template( - 'vaccination/vaccination_timeline_germany.html', - page_data=page_data_tmp, + 'vaccination/vaccination_data.html', + page_data=page_data, page_info=page_info) @@ -156,30 +154,26 @@ def url_vaccination_timeline_germany(page=1): @app_vaccination.route('/date-reported/all') def url_vaccination_datereported_all(page=1): page_info = ApplicationPage('Vaccination', "Germany Timeline") - #page_data = VaccinationImport.get_all_as_page(page) - page_data_tmp = VaccinationData.get_all_as_page(page) + page_data = VaccinationDateReported.get_all_as_page(page) return render_template( 'vaccination/vaccination_timeline_germany.html', - page_data=page_data_tmp, + page_data=page_data, page_info=page_info) -@app_vaccination.route('/date-reported/<int:vaccination_data_id>/page/<int:page>') -@app_vaccination.route('/date-reported/<int:vaccination_data_id>') -def url_vaccination_datereported_one(page=1, vaccination_data_id=0): +@app_vaccination.route('/date-reported/<int:vaccination_date_reported_id>/page/<int:page>') +@app_vaccination.route('/date-reported/<int:vaccination_date_reported_id>') +def url_vaccination_datereported_one(page=1, vaccination_date_reported_id=0): page_info = ApplicationPage('Vaccination', "Germany Timeline") - #page_data = VaccinationImport.get_all_as_page(page) - page_data_tmp = VaccinationData.get_all_as_page(page) + datereported = VaccinationDateReported.find_by_id(vaccination_date_reported_id) + page_data = VaccinationData.find_by_datum(page, datereported) return render_template( 'vaccination/vaccination_timeline_germany.html', - page_data=page_data_tmp, + datereported=datereported, + page_data=page_data, page_info=page_info) -# TODO: #106 add Tasks and URLs for starting Tasks to vaccination_views - - -# TODO: #172 implement url_vaccination_task_import_only in vaccination_views.py @app_vaccination.route('/task/download/only') def url_vaccination_task_download_only(): flash("url_vaccination_task_download_only started") @@ -187,7 +181,6 @@ def url_vaccination_task_download_only(): return redirect(url_for('vaccination.url_vaccination_tasks')) -# TODO: #173 implement url_vaccination_task_import_only in vaccination_views.py @app_vaccination.route('/task/import/only') def url_vaccination_task_import_only(): flash("url_vaccination_task_import_only started") @@ -195,7 +188,6 @@ def url_vaccination_task_import_only(): return redirect(url_for('vaccination.url_vaccination_tasks')) -# TODO: #174 implement url_vaccination_task_update_dimensiontables_only in vaccination_views.py @app_vaccination.route('/task/update/dimension-tables/only') def url_vaccination_task_update_dimensiontables_only(): flash("url_vaccination_task_update_dimensiontables_only started") @@ -203,7 +195,6 @@ def url_vaccination_task_update_dimensiontables_only(): return redirect(url_for('vaccination.url_vaccination_tasks')) -# TODO: #175 implement url_vaccination_task_update_facttable_incremental_only in vaccination_views.py @app_vaccination.route('/task/update/fact-table/incremental/only') def url_vaccination_task_update_facttable_incremental_only(): flash("url_vaccination_task_update_facttable_incremental_only started") @@ -211,7 +202,6 @@ def url_vaccination_task_update_facttable_incremental_only(): return redirect(url_for('vaccination.url_vaccination_tasks')) -# TODO: #176 implement url_vaccination_task_update_facttable_initial_only in vaccination_views.py @app_vaccination.route('/task/update/fact-table/initial/only') def url_vaccination_task_update_facttable_initial_only(): flash("url_vaccination_task_update_facttable_initial_only started") @@ -219,7 +209,6 @@ def url_vaccination_task_update_facttable_initial_only(): return redirect(url_for('vaccination.url_vaccination_tasks')) -# TODO: #170 implement url_vaccination_task_update_starschema_initial in vaccination_views.py @app_vaccination.route('/task/update/star_schema/initial') def url_vaccination_task_update_starschema_initial(): flash("url_vaccination_task_update_star_schemainitial started") @@ -228,7 +217,6 @@ def url_vaccination_task_update_starschema_initial(): return redirect(url_for('vaccination.url_vaccination_tasks')) -# TODO: #171 implement url_vaccination_task_update_starschema_incremental in vaccination_views.py @app_vaccination.route('/task/update/star_schema/incremental') def url_vaccination_task_update_starschema_incremental(): flash("url_vaccination_task_update_starschema_incremental started") diff --git a/src/covid19/services.py b/src/covid19/services.py index 9a31532d..c8877b03 100644 --- a/src/covid19/services.py +++ b/src/covid19/services.py @@ -14,7 +14,7 @@ from covid19.blueprints.admin.admin_service import AdminService common_service = CommonService(db) who_service = WhoService(db) europe_service = EuropeService(db) -rki_service = RkiBundeslaenderService(db) +rki_service_bundeslaender = RkiBundeslaenderService(db) vaccination_service = VaccinationService(db) admin_service = AdminService(db) db.create_all() -- GitLab