diff --git a/.gitignore b/.gitignore index 5c6b938cbee2b464ddd711c26b8d510fbf54d40e..6402ceac94096a6da0aabf2b91a9c182c6e5776e 100644 --- a/.gitignore +++ b/.gitignore @@ -1146,4 +1146,4 @@ dump.rdb /logfile5.txt /logfile*.txt /src/covid19/static/vendor/ -/.checkmate/ +/.checkmate diff --git a/README.md b/README.md index 4bde67226cf0ab0a0703d7980e2af8d2ae50cb40..fe8a32de9c0f7621ca6c2bf4771a18d86f0dba72 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # covid19python -* Version 0.0.32 asdf +* Version 0.0.32 ## git * github: https://git.noc.ruhr-uni-bochum.de/thomaswoehlke/flask-covid19.git diff --git a/data b/data index 107d3f8a9cf82edde724adc26f7fcacfb4a0ec34..55065ba62c4341104e2c6768a3ebfa046bd2a013 160000 --- a/data +++ b/data @@ -1 +1 @@ -Subproject commit 107d3f8a9cf82edde724adc26f7fcacfb4a0ec34 +Subproject commit 55065ba62c4341104e2c6768a3ebfa046bd2a013 diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md index 4ecd9674ce3ac68772603116f8883f24fb99f407..a62e80b150c679ddcae2ce88a58d4d32cb95c2ea 100644 --- a/docs/BACKLOG.md +++ b/docs/BACKLOG.md @@ -295,33 +295,137 @@ ### 0.0.32 Release +* Fixed #212 implement OwidService.task_database_drop_create() +* Fixed #214 implement OwidServiceUpdate.update_dimension_tables_only() +* Fixed #215 implement OwidServiceUpdate.update_fact_table_incremental_only() +* Fixed #216 implement OwidServiceUpdate.update_fact_table_initial_only() +* Fixed #217 implement OwidServiceUpdate.update_star_schema_incremental() +* Fixed #218 implement OwidServiceUpdate.update_star_schema_initial() +* Fixed #210 database.py: logging for Celery on Windows (wontfix) + +### 0.0.33 Release +* Fixed #165 implement url_ecdc_task_download_only in europe_views.py +* Fixed #166 implement url_ecdc_task_import_only in europe_views.py +* Fixed #167 implement url_ecdc_task_update_dimensiontables_only in europe_views.py +* Fixed #168 implement url_ecdc_task_update_facttable_incremental_only in europe_views.py +* Fixed #169 implement url_ecdc_task_update_facttable_initial_only in europe_views.py +* Fixed #163 implement url_ecdc_task_update_star_schema_initial in europe_views.py +* Fixed #164 implement url_ecdc_task_update_starschema_incremental in europe_views.py +* Fixed #177 BUG: RkiBundeslaenderServiceImport.import_file (wontfix) +* Fixed #178 BUG: RkiLandkreiseServiceImport.import_file (wontfix) +* Fixed #222 RKI: Download Data File +* Fixed #223 RKI: Prepare Navigation and Pages for Info, Tasks, Tests and RKI imported +* Fixed #224 RKI: Prepare Development of RKI import + +### 0.0.34 Release +* ------------------------------------- +* Issue WHO: Development: Navigation and Pages for Info, Tasks and Tests +* Issue WHO: Development: Download Data File +* Issue WHO: Development: import +* Issue WHO: Development: full update Dimension Tables +* Issue WHO: Development: full update Fact Table +* Issue WHO: Development: update Dimension Tables +* Issue WHO: Development: update Fact Table +* Issue WHO: Development: Navigation and Pages for Imported Table +* Issue WHO: Development: Navigation and Pages for Dimension Tables +* Issue WHO: Development: Navigation and Pages for Fact Table +* Issue WHO: Update UML Diagrams for Domain Model +* Issue WHO: Update UML Diagrams for Use Cases +* Issue WHO: QA: add Selenium Tests for all Frontend Urls and Pages without any Access to Database +* Issue WHO: QA: add Selenium Tests for all Frontend Urls and Pages with Read Access to Database +* Issue WHO: Documentation: write Tast-Plan for manual Testing +* Issue WHO: Documentation: write Checklist for manual Testing +* ------------------------------------- +* Issue OWID: Development: Navigation and Pages for Info, Tasks and Tests +* Issue OWID: Development: Download Data File +* Issue OWID: Development: import +* Issue OWID: Development: full update Dimension Tables +* Issue OWID: Development: full update Fact Table +* Issue OWID: Development: update Dimension Tables +* Issue OWID: Development: update Fact Table +* Issue OWID: Development: Navigation and Pages for Imported Table +* Issue OWID: Development: Navigation and Pages for Dimension Tables +* Issue OWID: Development: Navigation and Pages for Fact Table +* Issue OWID: Documentation: Update UML Diagrams for Domain Model +* Issue OWID: Documentation: Update UML Diagrams for Use Cases +* Issue OWID: QA: add Selenium Tests for all Frontend Urls and Pages without any Access to Database +* Issue OWID: QA: add Selenium Tests for all Frontend Urls and Pages with Read Access to Database +* Issue OWID: Documentation: write Tast-Plan for manual Testing +* Issue OWID: Documentation: write Checklist for manual Testing +* ------------------------------------- +* Issue ECDC: Development: Navigation and Pages for Info, Tasks and Tests +* Issue ECDC: Development: Download Data File +* Issue ECDC: Development: import +* Issue ECDC: Development: full update Dimension Tables +* Issue ECDC: Development: full update Fact Table +* Issue ECDC: Development: update Dimension Tables +* Issue ECDC: Development: update Fact Table +* Issue ECDC: Development: Navigation and Pages for Imported Table +* Issue ECDC: Development: Navigation and Pages for Dimension Tables +* Issue ECDC: Development: Navigation and Pages for Fact Table +* Issue ECDC: Documentation: Update UML Diagrams for Domain Model +* Issue ECDC: Documentation: Update UML Diagrams for Use Cases +* Issue ECDC: QA: add Selenium Tests for all Frontend Urls and Pages without any Access to Database +* Issue ECDC: QA: add Selenium Tests for all Frontend Urls and Pages with Read Access to Database +* Issue ECDC: Documentation: write Tast-Plan for manual Testing +* Issue ECDC: Documentation: write Checklist for manual Testing +* ------------------------------------- +* Issue RKI Vaccination: Development: Navigation and Pages for Info, Tasks and Tests +* Issue RKI Vaccination: Development: Download Data File +* Issue RKI Vaccination: Development: import +* Issue RKI Vaccination: Development: full update Dimension Tables +* Issue RKI Vaccination: Development: full update Fact Table +* Issue RKI Vaccination: Development: update Dimension Tables +* Issue RKI Vaccination: Development: update Fact Table +* Issue RKI Vaccination: Development: Navigation and Pages for Imported Table +* Issue RKI Vaccination: Development: Navigation and Pages for Dimension Tables +* Issue RKI Vaccination: Development: Navigation and Pages for Fact Table +* Issue RKI Vaccination: Documentation: Update UML Diagrams for Domain Model +* Issue RKI Vaccination: Documentation: Update UML Diagrams for Use Cases +* Issue RKI Vaccination: QA: add Selenium Tests for all Frontend Urls and Pages without any Access to Database +* Issue RKI Vaccination: QA: add Selenium Tests for all Frontend Urls and Pages with Read Access to Database +* Issue RKI Vaccination: Documentation: write Tast-Plan for manual Testing +* Issue RKI Vaccination: Documentation: write Checklist for manual Testing +* ------------------------------------- +* Issue RKI: Development: Navigation and Pages for Info, Tasks and Tests +* Issue RKI: Development: Download Data File +* Issue RKI: Development: import +* Issue RKI: Development: full update Dimension Tables +* Issue RKI: Development: full update Fact Table +* Issue RKI: Development: update Dimension Tables +* Issue RKI: Development: update Fact Table +* Issue RKI: Development: Navigation and Pages for Imported Table +* Issue RKI: Development: Navigation and Pages for Dimension Tables +* Issue RKI: Development: Navigation and Pages for Fact Table +* Issue RKI: QA: add Selenium Tests for all Frontend Urls and Pages without any Access to Database +* Issue RKI: QA: add Selenium Tests for all Frontend Urls and Pages with Read Access to Database +* Issue RKI: Documentation: write Tast-Plan for manual Testing +* Issue RKI: Documentation: write Checklist for manual Testing +* ------------------------------------- +* Issue #220 add Selenium Tests for all Frontend Urls and Pages without any Access to Database +* Issue #221 add Selenium Tests for all Frontend Urls and Pages with Read Access to Database + + +### 0.0.35 Release * ------------------------------------- * Issue #195 RkiVaccinationImport.get_daterep_missing_in_vaccination_data(): native SQL to SQLalechemy Query * ------------------------------------- * Issue #207 remove deprecated: database.port * Issue #208 remove deprecated: database.run_run_with_debug * Issue #209 remove deprecated: database.ITEMS_PER_PAGE -* ------------------------------------- -* Issue #212 implement OwidService.task_database_drop_create() -* ------------------------------------- -* Issue #214 implement OwidServiceUpdate.update_dimension_tables_only() -* Issue #215 implement OwidServiceUpdate.update_fact_table_incremental_only() -* Issue #216 implement OwidServiceUpdate.update_fact_table_initial_only() -* Issue #217 implement OwidServiceUpdate.update_star_schema_incremental() -* Issue #218 implement OwidServiceUpdate.update_star_schema_initial() -* ------------------------------------- -* Issue #210 database.py: logging for Celery on Windows + ### 00 Inbox * ------------------------------------- +* Issue add Selenium Tests for all Frontend Urls and Pages without any Access to Database +* Issue add Selenium Tests for all Frontend Urls and Pages with Read Access to Database + ### 01 Next * ------------------------------------- * Issue #198 UML: WHO Visual Graphs for Data per Countries order by Date * Issue #5 WHO Visual Graphs for Data per Countries order by Date * ------------------------------------- -* Issue #177 BUG: RkiBundeslaenderServiceImport.import_file -* Issue #178 BUG: RkiLandkreiseServiceImport.import_file ### 02 Soon * ------------------------------------- diff --git a/docs/BACKLOG_Config.md b/docs/BACKLOG_Config.md new file mode 100644 index 0000000000000000000000000000000000000000..12a2553c224fd59b852e8b5249efd4aea02f8d30 --- /dev/null +++ b/docs/BACKLOG_Config.md @@ -0,0 +1,23 @@ +# config + +## Matrix Blueprints + +| WHO | OWID | ECDC | Vaccination | RKI | Intensivregister | All | Label | config | +|-------|-------|-------|-------------|-------|------------------|---------|---------------|------------------------------------------------| +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | Navigation and Pages for Info, Tasks and Tests | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | Download Data File | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | import | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | full update Dimension Tables | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | full update Fact Table | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | update Dimension Tables | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | update Fact Table | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | Navigation and Pages for Imported Table | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | Navigation and Pages for Dimension Tables | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | Navigation and Pages for Fact Table | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Documentation | Update UML Diagrams for Domain Model | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Documentation | Update UML Diagrams for Use Cases | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Documentation | write Tast-Plan for manual Testing | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Documentation | write Checklist for manual Testing | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | QA | add Selenium Tests for all Frontend Urls and Pages without any Access to Database | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | QA | add Selenium Tests for all Frontend Urls and Pages with Read Access to Database | + diff --git a/docs/BACKLOG_Issues.md b/docs/BACKLOG_Issues.md new file mode 100644 index 0000000000000000000000000000000000000000..f3a8281318b5421d4c195f3afcff4099cd8f67e3 --- /dev/null +++ b/docs/BACKLOG_Issues.md @@ -0,0 +1,23 @@ +# Backlog + +## Matrix Blueprints + +| WHO | OWID | ECDC | Vaccination | RKI | Intensivregister | All | Label | config | +|-------|-------|-------|-------------|-------|------------------|---------|---------------|------------------------------------------------| +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | Navigation and Pages for Info, Tasks and Tests | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | Download Data File | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | import | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | full update Dimension Tables | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | full update Fact Table | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | update Dimension Tables | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | update Fact Table | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | Navigation and Pages for Imported Table | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | Navigation and Pages for Dimension Tables | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Development | Navigation and Pages for Fact Table | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Documentation | Update UML Diagrams for Domain Model | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Documentation | Update UML Diagrams for Use Cases | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | QA | add Selenium Tests for all Frontend Urls and Pages without any Access to Database | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | QA | add Selenium Tests for all Frontend Urls and Pages with Read Access to Database | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Documentation | write Tast-Plan for manual Testing | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Documentation | write Checklist for manual Testing | + diff --git a/docs/BACKLOG_Test_Cases.md b/docs/BACKLOG_Test_Cases.md new file mode 100644 index 0000000000000000000000000000000000000000..aee8de7727e09b1b79e071ff0b140303e921f375 --- /dev/null +++ b/docs/BACKLOG_Test_Cases.md @@ -0,0 +1,22 @@ +# Test Cases + +## Matrix Data Blueprints + +| WHO | OWID | ECDC | Vaccination | RKI | Intensivregister | All | Label | Test Case | +|-------|-------|-------|-------------|-------|------------------|---------|-----------|------------------------------------------------| +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Test Case | Navigation and Pages for Info, Tasks and Tests | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Test Case | Download Data File | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Test Case | import | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Test Case | full update Dimension Tables | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Test Case | full update Fact Table | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Test Case | update Dimension Tables | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Test Case | update Fact Table | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Test Case | Navigation and Pages for Imported Table | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Test Case | Navigation and Pages for Dimension Tables | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Test Case | Navigation and Pages for Fact Table | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Test Case | Update UML Diagrams for Domain Model | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Test Case | Update UML Diagrams for Use Cases | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Test Case | add Selenium Tests for all Frontend Urls and Pages without any Access to Database | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Test Case | add Selenium Tests for all Frontend Urls and Pages with Read Access to Database | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Test Case | write Tast-Plan for manual Testing | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Test Case | write Checklist for manual Testing | diff --git a/docs/BACKLOG_Use_Cases.md b/docs/BACKLOG_Use_Cases.md new file mode 100644 index 0000000000000000000000000000000000000000..55bf8b4c9e381492138e531cadbf15be5866a50e --- /dev/null +++ b/docs/BACKLOG_Use_Cases.md @@ -0,0 +1,22 @@ +# Use Cases + +## Matrix Data Blueprints + +| WHO | OWID | ECDC | Vaccination | RKI | Intensivregister | All | Label | Use Case | +|-------|-------|-------|-------------|-------|------------------|---------|----------|------------------------------------------------| +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Use Case | Navigation and Pages for Info, Tasks and Tests | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Use Case | Download Data File | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Use Case | import | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Use Case | full update Dimension Tables | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Use Case | full update Fact Table | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Use Case | update Dimension Tables | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Use Case | update Fact Table | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Use Case | Navigation and Pages for Imported Table | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Use Case | Navigation and Pages for Dimension Tables | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Use Case | Navigation and Pages for Fact Table | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Use Case | Update UML Diagrams for Domain Model | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Use Case | Update UML Diagrams for Use Cases | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Use Case | add Selenium Tests for all Frontend Urls and Pages without any Access to Database | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Use Case | add Selenium Tests for all Frontend Urls and Pages with Read Access to Database | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Use Case | write Tast-Plan for manual Testing | +| Issue | Issue | Issue | Issue | Issue | Issue | Issue | Use Case | write Checklist for manual Testing | diff --git a/docs/Blueprints.md b/docs/Blueprints.md new file mode 100644 index 0000000000000000000000000000000000000000..202a8186628924a68725300fe1a3d3e4b5839697 --- /dev/null +++ b/docs/Blueprints.md @@ -0,0 +1,16 @@ +# Blueprints + +## App Blueprints +### app_admin +### app_all +Fuer alle Data Blueprints. Gemeinsamkeiten aller Data Blueprints. +### app_application +### app_user + +## Data Blueprints +### who +### owid +### ecdc +### rki_vaccination +### rki_cases +### intensivregister \ No newline at end of file diff --git a/docs/uml_blueprints/admin/admin_domain_model.png b/docs/blueprints/app_admin/uml/domain_model/admin_domain_model.png similarity index 100% rename from docs/uml_blueprints/admin/admin_domain_model.png rename to docs/blueprints/app_admin/uml/domain_model/admin_domain_model.png diff --git a/docs/uml_blueprints/admin/admin_domain_model.txt b/docs/blueprints/app_admin/uml/domain_model/admin_domain_model.txt similarity index 100% rename from docs/uml_blueprints/admin/admin_domain_model.txt rename to docs/blueprints/app_admin/uml/domain_model/admin_domain_model.txt diff --git a/docs/uml_blueprints/admin/admin_use_cases.png b/docs/blueprints/app_admin/uml/use_cases/admin_use_cases.png similarity index 100% rename from docs/uml_blueprints/admin/admin_use_cases.png rename to docs/blueprints/app_admin/uml/use_cases/admin_use_cases.png diff --git a/docs/uml_blueprints/admin/admin_use_cases.txt b/docs/blueprints/app_admin/uml/use_cases/admin_use_cases.txt similarity index 100% rename from docs/uml_blueprints/admin/admin_use_cases.txt rename to docs/blueprints/app_admin/uml/use_cases/admin_use_cases.txt diff --git a/docs/uml_blueprints/application/application_domain_model.png b/docs/blueprints/app_all/uml/domain_model/application_domain_model.png similarity index 100% rename from docs/uml_blueprints/application/application_domain_model.png rename to docs/blueprints/app_all/uml/domain_model/application_domain_model.png diff --git a/docs/uml_blueprints/application/application_domain_model.txt b/docs/blueprints/app_all/uml/domain_model/application_domain_model.txt similarity index 100% rename from docs/uml_blueprints/application/application_domain_model.txt rename to docs/blueprints/app_all/uml/domain_model/application_domain_model.txt diff --git a/docs/uml_blueprints/application/application_use_cases.png b/docs/blueprints/app_all/uml/use_cases/application_use_cases.png similarity index 100% rename from docs/uml_blueprints/application/application_use_cases.png rename to docs/blueprints/app_all/uml/use_cases/application_use_cases.png diff --git a/docs/uml_blueprints/application/application_use_cases.txt b/docs/blueprints/app_all/uml/use_cases/application_use_cases.txt similarity index 100% rename from docs/uml_blueprints/application/application_use_cases.txt rename to docs/blueprints/app_all/uml/use_cases/application_use_cases.txt diff --git a/docs/blueprints/app_application/uml/domain_model/application_domain_model.png b/docs/blueprints/app_application/uml/domain_model/application_domain_model.png new file mode 100644 index 0000000000000000000000000000000000000000..9fbd38afa4d0392717b40d36d278ef89098b1e8b Binary files /dev/null and b/docs/blueprints/app_application/uml/domain_model/application_domain_model.png differ diff --git a/docs/blueprints/app_application/uml/domain_model/application_domain_model.txt b/docs/blueprints/app_application/uml/domain_model/application_domain_model.txt new file mode 100644 index 0000000000000000000000000000000000000000..99d3544a4c1b381096ee809c773ba0be93197df6 --- /dev/null +++ b/docs/blueprints/app_application/uml/domain_model/application_domain_model.txt @@ -0,0 +1,162 @@ +@startuml +entity ApplicationDateReported { + id: Integer + date_reported: String + year_week: String + datum: Date + year: Integer + month: Integer + day_of_month: Integer + day_of_week: Integer + week_of_year: Integer + get_name_for_weekday() + {classifier} get_names_for_weekday() + {classifier} get_datum_parts(my_date_rep: String) + {classifier} get_datum(my_year: Integer, my_month: Integer, my_day: Integer) + {classifier} get_datum_as_str(my_year: Integer, my_month: Integer, my_day: Integer) + {classifier} my_year_week(my_iso_year: Integer, week_number: Integer) + {classifier} create_new_object_factory(my_date_rep: String) +} +entity ApplicationRegion { + id: Integer + continent: String + {classifier} remove_all() + {classifier} get_all_as_page(page: Integer) + {classifier} get_all() + {classifier} get_all_as_dict() + {classifier} get_by_id(other_id: Integer) + {classifier} find_by_id(other_id: Integer) +} +entity RkiDateReported { + id: Integer + date_reported: String + year_week: String + datum: Date + year: Integer + month: Integer + day_of_month: Integer + day_of_week: Integer + week_of_year: Integer + get_name_for_weekday() + {classifier} get_names_for_weekday() + {classifier} get_datum_parts(my_date_rep: String) + {classifier} get_datum(my_year: Integer, my_month: Integer, my_day: Integer) + {classifier} get_datum_as_str(my_year: Integer, my_month: Integer, my_day: Integer) + {classifier} my_year_week(my_iso_year: Integer, week_number: Integer) + {classifier} create_new_object_factory(my_date_rep: String) +} +class ApplicationPage << (T,#FF7700) Transient >> { + title: String + subtitle: String + subtitle_info: String +} +class ApplicationServiceConfig << (T,#FF7700) Transient >> { + limit_nr: Integer + data_path: String + slug: String + category: String + sub_category: String + tablename: String + cvsfile_name: String + url_src: String + cvsfile_path: String + msg_job: String + msg_ok: String + msg_error: String + create_config_for_who() + create_config_for_rki_vaccination() + create_config_for_owid() + create_config_for_ecdc() + create_config_for_rki_bundeslaender() + create_config_for_rki_landkreise() +} +class ApplicationServiceDownload << (S,red) Service >> { + -log_error() + -log_success() + -prepare_download() + -download_with_wget() + -download_with_subprocess_and_os_native_wget() + download_file() +} +class database << (S,#FF7700) Singleton >> { + {static} int port + {static} bool run_run_with_debug + {static} int ITEMS_PER_PAGE + app: Flask + db: SQLAlchemy + admin: Admin + app_cors: CORS + app_bootstrap: Bootstrap + create_app() + create_db(my_app) + create_db_test(my_app) + create_celery(my_app) + create_admin(my_app) +} +class application_workers << (B,orchid) Boundary >> { + run_mq(my_app, my_celery) + run_app(my_app) +} +class application_views << (B,orchid) Boundary >> { + url_home() + url_root() +} +class application_services << (P,yellow) Proxy >> { + +} +class ApplicationService << (S,red) Service >> { + +} +class AdminService << (S,red) Service >> { + +} +class WhoService << (S,red) Service >> { + +} +class EcdcService << (S,red) Service >> { + +} +class RkiVaccinationService << (S,red) Service >> { + +} +class RkiBundeslaenderService << (S,red) Service >> { + +} +class RkiLandkreiseService << (S,red) Service >> { + +} +class OwidService << (S,red) Service >> { + +} +ApplicationDateReported <|-- RkiDateReported +ApplicationServiceDownload "*" --> "1" ApplicationServiceConfig: cfg +application_workers "1" --> "1" application_services: application_services +application_views "1" --> "1" application_services: application_services +application_views "*" --> "1" ApplicationPage: page_info +application_services "*" --> "1" ApplicationService: application_service +application_services "*" --> "1" AdminService: admin_service +application_services "*" --> "1" WhoService: who_service +application_services "*" --> "1" EcdcService: ecdc_service +application_services "*" --> "1" RkiVaccinationService: rki_vaccination_service +application_services "*" --> "1" RkiBundeslaenderService: rki_service_bundeslaender +application_services "*" --> "1" RkiLandkreiseService: rki_service_landkreise +application_services "*" --> "1" OwidService: owid_service +ApplicationService "*" --> "1" database +ApplicationServiceDownload "*" --> "1" database +AdminService "*" --> "1" database +WhoService "*" --> "1" database +EcdcService "*" --> "1" database +RkiBundeslaenderService "*" --> "1" database +RkiLandkreiseService "*" --> "1" database +RkiVaccinationService "*" --> "1" database +OwidService "*" --> "1" database +ApplicationService : SQLAlchemy database +ApplicationServiceDownload : SQLAlchemy database +AdminService : SQLAlchemy database +WhoService : SQLAlchemy database +EcdcService : SQLAlchemy database +RkiBundeslaenderService : SQLAlchemy database +RkiLandkreiseService : SQLAlchemy database +RkiVaccinationService : SQLAlchemy database +OwidService : SQLAlchemy database +@enduml diff --git a/docs/blueprints/app_application/uml/use_cases/application_use_cases.png b/docs/blueprints/app_application/uml/use_cases/application_use_cases.png new file mode 100644 index 0000000000000000000000000000000000000000..b58eaaebcd65ab5fbb52c03918d11a11b1604f80 Binary files /dev/null and b/docs/blueprints/app_application/uml/use_cases/application_use_cases.png differ diff --git a/docs/blueprints/app_application/uml/use_cases/application_use_cases.txt b/docs/blueprints/app_application/uml/use_cases/application_use_cases.txt new file mode 100644 index 0000000000000000000000000000000000000000..787d4b90ad657cc70bd71edd8d9240739ca9752e --- /dev/null +++ b/docs/blueprints/app_application/uml/use_cases/application_use_cases.txt @@ -0,0 +1,15 @@ +@startuml +left to right direction +left to right direction +actor Visitor as vu +package user { + actor SysAdmin as su + actor Admin as au +} +package application_views_frontend { + usecase url_home as UC1 + usecase url_root as UC2 +} +vu --> UC1 +vu --> UC2 +@enduml \ No newline at end of file diff --git a/docs/uml_blueprints/user/user_domain_model.png b/docs/blueprints/app_user/uml/domain_model/user_domain_model.png similarity index 100% rename from docs/uml_blueprints/user/user_domain_model.png rename to docs/blueprints/app_user/uml/domain_model/user_domain_model.png diff --git a/docs/uml_blueprints/user/user_domain_model.txt b/docs/blueprints/app_user/uml/domain_model/user_domain_model.txt similarity index 100% rename from docs/uml_blueprints/user/user_domain_model.txt rename to docs/blueprints/app_user/uml/domain_model/user_domain_model.txt diff --git a/docs/uml_blueprints/user/user_use_cases.png b/docs/blueprints/app_user/uml/use_cases/user_use_cases.png similarity index 100% rename from docs/uml_blueprints/user/user_use_cases.png rename to docs/blueprints/app_user/uml/use_cases/user_use_cases.png diff --git a/docs/uml_blueprints/user/user_use_cases.txt b/docs/blueprints/app_user/uml/use_cases/user_use_cases.txt similarity index 100% rename from docs/uml_blueprints/user/user_use_cases.txt rename to docs/blueprints/app_user/uml/use_cases/user_use_cases.txt diff --git a/docs/uml_blueprints/ecdc/ecdc_domain_model.png b/docs/blueprints/ecdc/uml/domain_model/ecdc_domain_model.png similarity index 100% rename from docs/uml_blueprints/ecdc/ecdc_domain_model.png rename to docs/blueprints/ecdc/uml/domain_model/ecdc_domain_model.png diff --git a/docs/uml_blueprints/ecdc/ecdc_domain_model.txt b/docs/blueprints/ecdc/uml/domain_model/ecdc_domain_model.txt similarity index 100% rename from docs/uml_blueprints/ecdc/ecdc_domain_model.txt rename to docs/blueprints/ecdc/uml/domain_model/ecdc_domain_model.txt diff --git a/docs/uml_blueprints/ecdc/ecdc_use_cases.png b/docs/blueprints/ecdc/uml/use_cases/ecdc_use_cases.png similarity index 100% rename from docs/uml_blueprints/ecdc/ecdc_use_cases.png rename to docs/blueprints/ecdc/uml/use_cases/ecdc_use_cases.png diff --git a/docs/uml_blueprints/ecdc/ecdc_use_cases.txt b/docs/blueprints/ecdc/uml/use_cases/ecdc_use_cases.txt similarity index 100% rename from docs/uml_blueprints/ecdc/ecdc_use_cases.txt rename to docs/blueprints/ecdc/uml/use_cases/ecdc_use_cases.txt diff --git a/docs/blueprints/intensivregister/uml/domain_model/owid_domain_model.png b/docs/blueprints/intensivregister/uml/domain_model/owid_domain_model.png new file mode 100644 index 0000000000000000000000000000000000000000..11b3308ec299995c6f2fb30e1e09934204f2c449 Binary files /dev/null and b/docs/blueprints/intensivregister/uml/domain_model/owid_domain_model.png differ diff --git a/docs/uml_blueprints/owid/owid_domain_model.txt b/docs/blueprints/intensivregister/uml/domain_model/owid_domain_model.txt similarity index 92% rename from docs/uml_blueprints/owid/owid_domain_model.txt rename to docs/blueprints/intensivregister/uml/domain_model/owid_domain_model.txt index c1ddb65afeccdde2ccfdeb6fb7b4699277d6fb56..8836cb52b77331ab2d07d78a6e10aeafbd2dfde0 100644 --- a/docs/uml_blueprints/owid/owid_domain_model.txt +++ b/docs/blueprints/intensivregister/uml/domain_model/owid_domain_model.txt @@ -178,16 +178,28 @@ entity OwidData { class OwidServiceImport << (S,red) Service >> { import_file() } +class OwidServiceUpdateBase << (S,red) Service >> { +} +class OwidServiceUpdateFull << (S,red) Service >> { + -full_update_date_reported() + -full_update_continent() + -full_update_country() + -full_update_fact_table() + -full_update_dimension_tables() + full_update_dimension_tables() + full_update_fact_table() + full_update_star_schema() +} class OwidServiceUpdate << (S,red) Service >> { - update_dimension_tables_only() - update_fact_table_incremental_only() - update_fact_table_initial_only() - update_star_schema_incremental() - update_star_schema_initial() - -update_dimension_tables() - -update_fact_table_initial() - -update_fact_table_incremental() -update_date_reported() + -full_update_continent() + -full_update_country() + -update_fact_table() + -update_dimension_tables() + update_dimension_tables() + update_fact_table() + update_star_schema() + -get_new_dates_reported_from_import() } class OwidService << (S,red) Service >> { pretask_database_drop_create() @@ -292,9 +304,13 @@ class owid_celery_tasks << (B,orchid) Boundary >> { task_owid_update_star_schema_initial() } OwidServiceImport : SQLAlchemy database +OwidServiceUpdateBase : SQLAlchemy database +OwidServiceUpdateFull : SQLAlchemy database OwidServiceUpdate : SQLAlchemy database OwidService : SQLAlchemy database ApplicationServiceDownload : SQLAlchemy database +OwidServiceUpdateFull <|-- OwidServiceUpdateBase +OwidServiceUpdate <|-- OwidServiceUpdateBase ApplicationDateReported <|-- OwidDateReported ApplicationRegion <|-- OwidContinent OwidCountry "1" *--> "*" OwidContinent : region @@ -306,6 +322,7 @@ OwidServiceUpdate "*" --> "1" ApplicationServiceConfig : cfg ApplicationServiceDownload "*" --> "1" ApplicationServiceConfig : cfg OwidService "1" *--> "1" OwidServiceImport : owid_service_import OwidService "1" *--> "1" OwidServiceUpdate : owid_service_update +OwidService "1" *--> "1" OwidServiceUpdateFull : owid_service_update OwidService "1" *--> "1" ApplicationServiceDownload : service_download owid_views_frontend "1" --> "1" OwidService : owid_service owid_views_for_tasks "1" --> "1" OwidService : owid_service diff --git a/docs/uml_blueprints/owid/owid_use_cases.png b/docs/blueprints/intensivregister/uml/use_cases/owid_use_cases.png similarity index 100% rename from docs/uml_blueprints/owid/owid_use_cases.png rename to docs/blueprints/intensivregister/uml/use_cases/owid_use_cases.png diff --git a/docs/uml_blueprints/owid/owid_use_cases.txt b/docs/blueprints/intensivregister/uml/use_cases/owid_use_cases.txt similarity index 100% rename from docs/uml_blueprints/owid/owid_use_cases.txt rename to docs/blueprints/intensivregister/uml/use_cases/owid_use_cases.txt diff --git a/docs/blueprints/owid/uml/domain_model/owid_domain_model.png b/docs/blueprints/owid/uml/domain_model/owid_domain_model.png new file mode 100644 index 0000000000000000000000000000000000000000..11b3308ec299995c6f2fb30e1e09934204f2c449 Binary files /dev/null and b/docs/blueprints/owid/uml/domain_model/owid_domain_model.png differ diff --git a/docs/blueprints/owid/uml/domain_model/owid_domain_model.txt b/docs/blueprints/owid/uml/domain_model/owid_domain_model.txt new file mode 100644 index 0000000000000000000000000000000000000000..8836cb52b77331ab2d07d78a6e10aeafbd2dfde0 --- /dev/null +++ b/docs/blueprints/owid/uml/domain_model/owid_domain_model.txt @@ -0,0 +1,330 @@ +@startuml +entity OwidImport { + id: Integer + iso_code: String + continent: String + location: String + date: String + total_cases: String + new_cases: String + new_cases_smoothed: String + total_deaths: String + new_deaths: String + new_deaths_smoothed: String + total_cases_per_million: String + new_cases_per_million: String + new_cases_smoothed_per_million: String + total_deaths_per_million: String + new_deaths_per_million: String + new_deaths_smoothed_per_million: String + reproduction_rate: String + icu_patients: String + icu_patients_per_million: String + hosp_patients: String + hosp_patients_per_million: String + weekly_icu_admissions: String + weekly_icu_admissions_per_million: String + weekly_hosp_admissions: String + weekly_hosp_admissions_per_million: String + new_tests: String + total_tests: String + total_tests_per_thousand: String + new_tests_per_thousand: String + new_tests_smoothed: String + new_tests_smoothed_per_thousand: String + positive_rate: String + tests_per_case: String + tests_units: String + total_vaccinations: String + people_vaccinated: String + people_fully_vaccinated: String + new_vaccinations: String + new_vaccinations_smoothed: String + total_vaccinations_per_hundred: String + people_vaccinated_per_hundred: String + people_fully_vaccinated_per_hundred: String + new_vaccinations_smoothed_per_million: String + stringency_index: String + population: String + population_density: String + median_age: String + aged_65_older: String + aged_70_older: String + gdp_per_capita: String + extreme_poverty: String + cardiovasc_death_rate: String + diabetes_prevalence: String + female_smokers: String + male_smokers: String + handwashing_facilities: String + hospital_beds_per_thousand: String + life_expectancy: String + human_development_index: String + {classifier} remove_all() + {classifier} get_all_as_page(page: Integer) + {classifier} get_all() + {classifier} get_by_id(other_id: Integer) + {classifier} find_by_id(other_id: Integer) + {classifier} get_dates() + {classifier} get_for_one_day(day: String) + {classifier} get_dates_reported_as_array() + {classifier} get_new_dates_reported_as_array() + {classifier} get_continents(page: Integer) + {classifier} get_all_continents() +} +entity OwidDateReported { + id: Integer + date_reported: String + year_week: String + datum: Date + year: Integer + month: Integer + day_of_month: Integer + day_of_week: Integer + week_of_year: Integer + {classifier} remove_all() + {classifier} get_all_as_page(page: Integer) + {classifier} get_all() + {classifier} get_all_as_dict() + {classifier} get_by_id(other_id: Integer) + {classifier} find_by_id(other_id: Integer) +} +entity OwidContinent { + id: Integer + continent: String + {classifier} remove_all() + {classifier} get_all_as_page(page: Integer) + {classifier} get_all() + {classifier} get_all_as_dict() + {classifier} get_by_id(other_id: Integer) + {classifier} find_by_id(other_id: Integer) +} +entity OwidCountry { + id: Integer + iso_code: String + location: String + stringency_index: String + population: String + population_density: String + median_age: String + aged_65_older: String + aged_70_older: String + gdp_per_capita: String + extreme_poverty: String + cardiovasc_death_rate: String + diabetes_prevalence: String + female_smokers: String + male_smokers: String + handwashing_facilities: String + hospital_beds_per_thousand: String + life_expectancy: String + human_development_index: String + {classifier} remove_all() + {classifier} get_all_as_page(page: Integer) + {classifier} get_all() + {classifier} get_all_as_dict() + {classifier} get_by_id(other_id: Integer) + {classifier} find_by_id(other_id: Integer) +} +entity OwidData { + id: Integer + total_cases: String + new_cases: String + new_cases_smoothed: String + total_deaths: String + new_deaths: String + new_deaths_smoothed: String + total_cases_per_million: String + new_cases_per_million: String + new_cases_smoothed_per_million: String + total_deaths_per_million: String + new_deaths_per_million: String + new_deaths_smoothed_per_million: String + reproduction_rate: String + icu_patients: String + icu_patients_per_million: String + hosp_patients: String + hosp_patients_per_million: String + weekly_icu_admissions: String + weekly_icu_admissions_per_million: String + weekly_hosp_admissions: String + weekly_hosp_admissions_per_million: String + new_tests: String + total_tests: String + total_tests_per_thousand: String + new_tests_per_thousand: String + new_tests_smoothed: String + new_tests_smoothed_per_thousand: String + positive_rate: String + tests_per_case: String + tests_units: String + total_vaccinations: String + people_vaccinated: String + people_fully_vaccinated: String + new_vaccinations: String + new_vaccinations_smoothed: String + total_vaccinations_per_hundred: String + people_vaccinated_per_hundred: String + people_fully_vaccinated_per_hundred: String + new_vaccinations_smoothed_per_million: String + stringency_index: String + {classifier} remove_all() + {classifier} get_all_as_page(page: Integer) + {classifier} get_all() + {classifier} get_all_as_dict() + {classifier} get_by_id(other_id: Integer) + {classifier} find_by_id(other_id: Integer) +} +class OwidServiceImport << (S,red) Service >> { + import_file() +} +class OwidServiceUpdateBase << (S,red) Service >> { +} +class OwidServiceUpdateFull << (S,red) Service >> { + -full_update_date_reported() + -full_update_continent() + -full_update_country() + -full_update_fact_table() + -full_update_dimension_tables() + full_update_dimension_tables() + full_update_fact_table() + full_update_star_schema() +} +class OwidServiceUpdate << (S,red) Service >> { + -update_date_reported() + -full_update_continent() + -full_update_country() + -update_fact_table() + -update_dimension_tables() + update_dimension_tables() + update_fact_table() + update_star_schema() + -get_new_dates_reported_from_import() +} +class OwidService << (S,red) Service >> { + pretask_database_drop_create() + task_database_drop_create() + run_download_only() + run_import_only() + run_update_dimension_tables_only() + run_update_fact_table_incremental_only() + run_update_fact_table_initial_only() + run_update_star_schema_incremental() + run_update_star_schema_initial() + download_all_files() + task_import_all_files() + update_dimension_tables_only() + update_fact_table_initial_only() + update_fact_table_incremental_only() +} +entity ApplicationDateReported { + id: Integer + date_reported: String + year_week: String + datum: Date + year: Integer + month: Integer + day_of_month: Integer + day_of_week: Integer + week_of_year: Integer + get_name_for_weekday() + {classifier} get_names_for_weekday() + {classifier} get_datum_parts(my_date_rep: String) + {classifier} get_datum(my_year: Integer, my_month: Integer, my_day: Integer) + {classifier} get_datum_as_str(my_year: Integer, my_month: Integer, my_day: Integer) + {classifier} my_year_week(my_iso_year: Integer, week_number: Integer) + {classifier} create_new_object_factory(my_date_rep: String) +} +entity ApplicationRegion { + id: Integer + continent: String + {classifier} remove_all() + {classifier} get_all_as_page(page: Integer) + {classifier} get_all() + {classifier} get_all_as_dict() + {classifier} get_by_id(other_id: Integer) + {classifier} find_by_id(other_id: Integer) +} +class ApplicationServiceDownload << (S,red) Service >> { + -log_error() + -log_success() + -prepare_download() + -download_with_wget() + -download_with_subprocess_and_os_native_wget() + download_file() +} +class ApplicationServiceConfig << (T,#FF7700) Transient >> { + limit_nr: Integer + data_path: String + slug: String + category: String + sub_category: String + tablename: String + cvsfile_name: String + url_src: String + cvsfile_path: String + msg_job: String + msg_ok: String + msg_error: String + create_config_for_who() + create_config_for_rki_vaccination() + create_config_for_owid() + create_config_for_ecdc() + create_config_for_rki_bundeslaender() + create_config_for_rki_landkreise() +} +class owid_views_frontend << (B,orchid) Boundary >> { + url_owid_info() + url_owid_tasks() + url_owid_test() + url_owid_imported() + url_owid_date_reported_all() + url_owid_date_reported() + url_owid_date_reported_cases_new() + url_owid_date_reported_cases_cumulative() + url_owid_date_reported_deaths_new() + url_owid_date_reported_deaths_cumulative() +} +class owid_views_for_tasks << (B,orchid) Boundary >> { + url_task_owid_download_only() + url_task_owid_import_only() + url_task_owid_update_dimension_tables_only() + url_task_owid_update_fact_table_incremental_only() + url_task_owid_update_fact_table_initial_only() + url_task_owid_update_star_schema_initial() + url_task_owid_update_star_schema_incremental() +} +class owid_celery_tasks << (B,orchid) Boundary >> { + task_owid_download_only() + task_owid_import_only() + task_owid_update_dimension_tables_only() + task_owid_update_fact_table_incremental_only() + task_owid_update_fact_table_initial_only() + task_owid_update_star_schema_incremental() + task_owid_update_star_schema_initial() +} +OwidServiceImport : SQLAlchemy database +OwidServiceUpdateBase : SQLAlchemy database +OwidServiceUpdateFull : SQLAlchemy database +OwidServiceUpdate : SQLAlchemy database +OwidService : SQLAlchemy database +ApplicationServiceDownload : SQLAlchemy database +OwidServiceUpdateFull <|-- OwidServiceUpdateBase +OwidServiceUpdate <|-- OwidServiceUpdateBase +ApplicationDateReported <|-- OwidDateReported +ApplicationRegion <|-- OwidContinent +OwidCountry "1" *--> "*" OwidContinent : region +OwidData "1" *--> "*" OwidCountry : country +OwidData "1" *--> "*" OwidDateReported : date_reported +OwidService "*" *--> "1" ApplicationServiceConfig : cfg +OwidServiceImport "*" --> "1" ApplicationServiceConfig : cfg +OwidServiceUpdate "*" --> "1" ApplicationServiceConfig : cfg +ApplicationServiceDownload "*" --> "1" ApplicationServiceConfig : cfg +OwidService "1" *--> "1" OwidServiceImport : owid_service_import +OwidService "1" *--> "1" OwidServiceUpdate : owid_service_update +OwidService "1" *--> "1" OwidServiceUpdateFull : owid_service_update +OwidService "1" *--> "1" ApplicationServiceDownload : service_download +owid_views_frontend "1" --> "1" OwidService : owid_service +owid_views_for_tasks "1" --> "1" OwidService : owid_service +owid_celery_tasks "1" --> "1" OwidService : owid_service +@enduml diff --git a/docs/blueprints/owid/uml/use_cases/owid_use_cases.png b/docs/blueprints/owid/uml/use_cases/owid_use_cases.png new file mode 100644 index 0000000000000000000000000000000000000000..5a30ecc6f03aaf56651009513022036f6425c791 Binary files /dev/null and b/docs/blueprints/owid/uml/use_cases/owid_use_cases.png differ diff --git a/docs/blueprints/owid/uml/use_cases/owid_use_cases.txt b/docs/blueprints/owid/uml/use_cases/owid_use_cases.txt new file mode 100644 index 0000000000000000000000000000000000000000..bbe591d1b8bcce045063eb5c5eba3da6652f88f5 --- /dev/null +++ b/docs/blueprints/owid/uml/use_cases/owid_use_cases.txt @@ -0,0 +1,58 @@ +@startuml +left to right direction +actor Visitor as vu +package user { + actor SysAdmin as su + actor Admin as au +} +package owid_views_frontend { + usecase owid_info as UC1 + usecase owid_imported as UC2 + usecase owid_date_reported as UC3 + usecase owid_date_continent as UC4 + usecase owid_date_country as UC5 + usecase owid_date_country_germany as UC6 + usecase owid_date_reports as UC7 +} +package owid_views_for_tasks { + usecase owid_tasks as UC57 + usecase task_owid_download_only as UC50 + usecase task_owid_import_only as UC51 + usecase task_owid_update_dimension_tables_only as UC52 + usecase task_owid_update_fact_table_initial_only as UC53 + usecase task_owid_update_fact_table_incremental_only as UC54 + usecase task_owid_update_star_schema_initial as UC55 + usecase task_owid_update_star_schema_incremental as UC56 +} +package owid_celery_tasks { + usecase owid_task_download_only as UC100 + usecase owid_task_import_only as UC101 + usecase owid_task_update_dimensiontables_only as UC102 + usecase owid_task_update_facttable_incremental_only as UC103 + usecase owid_task_update_facttable_initial_only as UC104 + usecase owid_task_update_starschema_initial as UC105 + usecase owid_task_update_starschema_incremental as UC106 +} +vu --> UC1 +vu --> UC2 +vu --> UC3 +vu --> UC4 +vu --> UC5 +vu --> UC6 +vu --> UC7 +au --> UC50 +au --> UC51 +au --> UC52 +au --> UC53 +au --> UC54 +au --> UC55 +au --> UC56 +au --> UC57 +UC50 --> UC100 +UC51 --> UC101 +UC52 --> UC102 +UC53 --> UC103 +UC54 --> UC104 +UC55 --> UC105 +UC56 --> UC106 +@enduml \ No newline at end of file diff --git a/docs/uml_blueprints/owid/owid_use_cases_visual_data_1.png b/docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_1.png similarity index 100% rename from docs/uml_blueprints/owid/owid_use_cases_visual_data_1.png rename to docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_1.png diff --git a/docs/uml_blueprints/owid/owid_use_cases_visual_data_1.txt b/docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_1.txt similarity index 100% rename from docs/uml_blueprints/owid/owid_use_cases_visual_data_1.txt rename to docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_1.txt diff --git a/docs/uml_blueprints/owid/owid_use_cases_visual_data_2.png b/docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_2.png similarity index 100% rename from docs/uml_blueprints/owid/owid_use_cases_visual_data_2.png rename to docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_2.png diff --git a/docs/uml_blueprints/owid/owid_use_cases_visual_data_2.txt b/docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_2.txt similarity index 100% rename from docs/uml_blueprints/owid/owid_use_cases_visual_data_2.txt rename to docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_2.txt diff --git a/docs/uml_blueprints/owid/owid_use_cases_visual_data_3.png b/docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_3.png similarity index 100% rename from docs/uml_blueprints/owid/owid_use_cases_visual_data_3.png rename to docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_3.png diff --git a/docs/uml_blueprints/owid/owid_use_cases_visual_data_3.txt b/docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_3.txt similarity index 100% rename from docs/uml_blueprints/owid/owid_use_cases_visual_data_3.txt rename to docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_3.txt diff --git a/docs/uml_blueprints/owid/owid_use_cases_visual_data_4.png b/docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_4.png similarity index 100% rename from docs/uml_blueprints/owid/owid_use_cases_visual_data_4.png rename to docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_4.png diff --git a/docs/uml_blueprints/owid/owid_use_cases_visual_data_4.txt b/docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_4.txt similarity index 100% rename from docs/uml_blueprints/owid/owid_use_cases_visual_data_4.txt rename to docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_4.txt diff --git a/docs/uml_blueprints/owid/owid_use_cases_visual_data_5.png b/docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_5.png similarity index 100% rename from docs/uml_blueprints/owid/owid_use_cases_visual_data_5.png rename to docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_5.png diff --git a/docs/uml_blueprints/owid/owid_use_cases_visual_data_5.txt b/docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_5.txt similarity index 100% rename from docs/uml_blueprints/owid/owid_use_cases_visual_data_5.txt rename to docs/blueprints/owid/uml/use_cases__visual_data/owid_use_cases_visual_data_5.txt diff --git a/docs/blueprints/rki_cases/uml/domain_model/owid_domain_model.png b/docs/blueprints/rki_cases/uml/domain_model/owid_domain_model.png new file mode 100644 index 0000000000000000000000000000000000000000..11b3308ec299995c6f2fb30e1e09934204f2c449 Binary files /dev/null and b/docs/blueprints/rki_cases/uml/domain_model/owid_domain_model.png differ diff --git a/docs/blueprints/rki_cases/uml/domain_model/owid_domain_model.txt b/docs/blueprints/rki_cases/uml/domain_model/owid_domain_model.txt new file mode 100644 index 0000000000000000000000000000000000000000..8836cb52b77331ab2d07d78a6e10aeafbd2dfde0 --- /dev/null +++ b/docs/blueprints/rki_cases/uml/domain_model/owid_domain_model.txt @@ -0,0 +1,330 @@ +@startuml +entity OwidImport { + id: Integer + iso_code: String + continent: String + location: String + date: String + total_cases: String + new_cases: String + new_cases_smoothed: String + total_deaths: String + new_deaths: String + new_deaths_smoothed: String + total_cases_per_million: String + new_cases_per_million: String + new_cases_smoothed_per_million: String + total_deaths_per_million: String + new_deaths_per_million: String + new_deaths_smoothed_per_million: String + reproduction_rate: String + icu_patients: String + icu_patients_per_million: String + hosp_patients: String + hosp_patients_per_million: String + weekly_icu_admissions: String + weekly_icu_admissions_per_million: String + weekly_hosp_admissions: String + weekly_hosp_admissions_per_million: String + new_tests: String + total_tests: String + total_tests_per_thousand: String + new_tests_per_thousand: String + new_tests_smoothed: String + new_tests_smoothed_per_thousand: String + positive_rate: String + tests_per_case: String + tests_units: String + total_vaccinations: String + people_vaccinated: String + people_fully_vaccinated: String + new_vaccinations: String + new_vaccinations_smoothed: String + total_vaccinations_per_hundred: String + people_vaccinated_per_hundred: String + people_fully_vaccinated_per_hundred: String + new_vaccinations_smoothed_per_million: String + stringency_index: String + population: String + population_density: String + median_age: String + aged_65_older: String + aged_70_older: String + gdp_per_capita: String + extreme_poverty: String + cardiovasc_death_rate: String + diabetes_prevalence: String + female_smokers: String + male_smokers: String + handwashing_facilities: String + hospital_beds_per_thousand: String + life_expectancy: String + human_development_index: String + {classifier} remove_all() + {classifier} get_all_as_page(page: Integer) + {classifier} get_all() + {classifier} get_by_id(other_id: Integer) + {classifier} find_by_id(other_id: Integer) + {classifier} get_dates() + {classifier} get_for_one_day(day: String) + {classifier} get_dates_reported_as_array() + {classifier} get_new_dates_reported_as_array() + {classifier} get_continents(page: Integer) + {classifier} get_all_continents() +} +entity OwidDateReported { + id: Integer + date_reported: String + year_week: String + datum: Date + year: Integer + month: Integer + day_of_month: Integer + day_of_week: Integer + week_of_year: Integer + {classifier} remove_all() + {classifier} get_all_as_page(page: Integer) + {classifier} get_all() + {classifier} get_all_as_dict() + {classifier} get_by_id(other_id: Integer) + {classifier} find_by_id(other_id: Integer) +} +entity OwidContinent { + id: Integer + continent: String + {classifier} remove_all() + {classifier} get_all_as_page(page: Integer) + {classifier} get_all() + {classifier} get_all_as_dict() + {classifier} get_by_id(other_id: Integer) + {classifier} find_by_id(other_id: Integer) +} +entity OwidCountry { + id: Integer + iso_code: String + location: String + stringency_index: String + population: String + population_density: String + median_age: String + aged_65_older: String + aged_70_older: String + gdp_per_capita: String + extreme_poverty: String + cardiovasc_death_rate: String + diabetes_prevalence: String + female_smokers: String + male_smokers: String + handwashing_facilities: String + hospital_beds_per_thousand: String + life_expectancy: String + human_development_index: String + {classifier} remove_all() + {classifier} get_all_as_page(page: Integer) + {classifier} get_all() + {classifier} get_all_as_dict() + {classifier} get_by_id(other_id: Integer) + {classifier} find_by_id(other_id: Integer) +} +entity OwidData { + id: Integer + total_cases: String + new_cases: String + new_cases_smoothed: String + total_deaths: String + new_deaths: String + new_deaths_smoothed: String + total_cases_per_million: String + new_cases_per_million: String + new_cases_smoothed_per_million: String + total_deaths_per_million: String + new_deaths_per_million: String + new_deaths_smoothed_per_million: String + reproduction_rate: String + icu_patients: String + icu_patients_per_million: String + hosp_patients: String + hosp_patients_per_million: String + weekly_icu_admissions: String + weekly_icu_admissions_per_million: String + weekly_hosp_admissions: String + weekly_hosp_admissions_per_million: String + new_tests: String + total_tests: String + total_tests_per_thousand: String + new_tests_per_thousand: String + new_tests_smoothed: String + new_tests_smoothed_per_thousand: String + positive_rate: String + tests_per_case: String + tests_units: String + total_vaccinations: String + people_vaccinated: String + people_fully_vaccinated: String + new_vaccinations: String + new_vaccinations_smoothed: String + total_vaccinations_per_hundred: String + people_vaccinated_per_hundred: String + people_fully_vaccinated_per_hundred: String + new_vaccinations_smoothed_per_million: String + stringency_index: String + {classifier} remove_all() + {classifier} get_all_as_page(page: Integer) + {classifier} get_all() + {classifier} get_all_as_dict() + {classifier} get_by_id(other_id: Integer) + {classifier} find_by_id(other_id: Integer) +} +class OwidServiceImport << (S,red) Service >> { + import_file() +} +class OwidServiceUpdateBase << (S,red) Service >> { +} +class OwidServiceUpdateFull << (S,red) Service >> { + -full_update_date_reported() + -full_update_continent() + -full_update_country() + -full_update_fact_table() + -full_update_dimension_tables() + full_update_dimension_tables() + full_update_fact_table() + full_update_star_schema() +} +class OwidServiceUpdate << (S,red) Service >> { + -update_date_reported() + -full_update_continent() + -full_update_country() + -update_fact_table() + -update_dimension_tables() + update_dimension_tables() + update_fact_table() + update_star_schema() + -get_new_dates_reported_from_import() +} +class OwidService << (S,red) Service >> { + pretask_database_drop_create() + task_database_drop_create() + run_download_only() + run_import_only() + run_update_dimension_tables_only() + run_update_fact_table_incremental_only() + run_update_fact_table_initial_only() + run_update_star_schema_incremental() + run_update_star_schema_initial() + download_all_files() + task_import_all_files() + update_dimension_tables_only() + update_fact_table_initial_only() + update_fact_table_incremental_only() +} +entity ApplicationDateReported { + id: Integer + date_reported: String + year_week: String + datum: Date + year: Integer + month: Integer + day_of_month: Integer + day_of_week: Integer + week_of_year: Integer + get_name_for_weekday() + {classifier} get_names_for_weekday() + {classifier} get_datum_parts(my_date_rep: String) + {classifier} get_datum(my_year: Integer, my_month: Integer, my_day: Integer) + {classifier} get_datum_as_str(my_year: Integer, my_month: Integer, my_day: Integer) + {classifier} my_year_week(my_iso_year: Integer, week_number: Integer) + {classifier} create_new_object_factory(my_date_rep: String) +} +entity ApplicationRegion { + id: Integer + continent: String + {classifier} remove_all() + {classifier} get_all_as_page(page: Integer) + {classifier} get_all() + {classifier} get_all_as_dict() + {classifier} get_by_id(other_id: Integer) + {classifier} find_by_id(other_id: Integer) +} +class ApplicationServiceDownload << (S,red) Service >> { + -log_error() + -log_success() + -prepare_download() + -download_with_wget() + -download_with_subprocess_and_os_native_wget() + download_file() +} +class ApplicationServiceConfig << (T,#FF7700) Transient >> { + limit_nr: Integer + data_path: String + slug: String + category: String + sub_category: String + tablename: String + cvsfile_name: String + url_src: String + cvsfile_path: String + msg_job: String + msg_ok: String + msg_error: String + create_config_for_who() + create_config_for_rki_vaccination() + create_config_for_owid() + create_config_for_ecdc() + create_config_for_rki_bundeslaender() + create_config_for_rki_landkreise() +} +class owid_views_frontend << (B,orchid) Boundary >> { + url_owid_info() + url_owid_tasks() + url_owid_test() + url_owid_imported() + url_owid_date_reported_all() + url_owid_date_reported() + url_owid_date_reported_cases_new() + url_owid_date_reported_cases_cumulative() + url_owid_date_reported_deaths_new() + url_owid_date_reported_deaths_cumulative() +} +class owid_views_for_tasks << (B,orchid) Boundary >> { + url_task_owid_download_only() + url_task_owid_import_only() + url_task_owid_update_dimension_tables_only() + url_task_owid_update_fact_table_incremental_only() + url_task_owid_update_fact_table_initial_only() + url_task_owid_update_star_schema_initial() + url_task_owid_update_star_schema_incremental() +} +class owid_celery_tasks << (B,orchid) Boundary >> { + task_owid_download_only() + task_owid_import_only() + task_owid_update_dimension_tables_only() + task_owid_update_fact_table_incremental_only() + task_owid_update_fact_table_initial_only() + task_owid_update_star_schema_incremental() + task_owid_update_star_schema_initial() +} +OwidServiceImport : SQLAlchemy database +OwidServiceUpdateBase : SQLAlchemy database +OwidServiceUpdateFull : SQLAlchemy database +OwidServiceUpdate : SQLAlchemy database +OwidService : SQLAlchemy database +ApplicationServiceDownload : SQLAlchemy database +OwidServiceUpdateFull <|-- OwidServiceUpdateBase +OwidServiceUpdate <|-- OwidServiceUpdateBase +ApplicationDateReported <|-- OwidDateReported +ApplicationRegion <|-- OwidContinent +OwidCountry "1" *--> "*" OwidContinent : region +OwidData "1" *--> "*" OwidCountry : country +OwidData "1" *--> "*" OwidDateReported : date_reported +OwidService "*" *--> "1" ApplicationServiceConfig : cfg +OwidServiceImport "*" --> "1" ApplicationServiceConfig : cfg +OwidServiceUpdate "*" --> "1" ApplicationServiceConfig : cfg +ApplicationServiceDownload "*" --> "1" ApplicationServiceConfig : cfg +OwidService "1" *--> "1" OwidServiceImport : owid_service_import +OwidService "1" *--> "1" OwidServiceUpdate : owid_service_update +OwidService "1" *--> "1" OwidServiceUpdateFull : owid_service_update +OwidService "1" *--> "1" ApplicationServiceDownload : service_download +owid_views_frontend "1" --> "1" OwidService : owid_service +owid_views_for_tasks "1" --> "1" OwidService : owid_service +owid_celery_tasks "1" --> "1" OwidService : owid_service +@enduml diff --git a/docs/blueprints/rki_cases/uml/use_cases/owid_use_cases.png b/docs/blueprints/rki_cases/uml/use_cases/owid_use_cases.png new file mode 100644 index 0000000000000000000000000000000000000000..5a30ecc6f03aaf56651009513022036f6425c791 Binary files /dev/null and b/docs/blueprints/rki_cases/uml/use_cases/owid_use_cases.png differ diff --git a/docs/blueprints/rki_cases/uml/use_cases/owid_use_cases.txt b/docs/blueprints/rki_cases/uml/use_cases/owid_use_cases.txt new file mode 100644 index 0000000000000000000000000000000000000000..bbe591d1b8bcce045063eb5c5eba3da6652f88f5 --- /dev/null +++ b/docs/blueprints/rki_cases/uml/use_cases/owid_use_cases.txt @@ -0,0 +1,58 @@ +@startuml +left to right direction +actor Visitor as vu +package user { + actor SysAdmin as su + actor Admin as au +} +package owid_views_frontend { + usecase owid_info as UC1 + usecase owid_imported as UC2 + usecase owid_date_reported as UC3 + usecase owid_date_continent as UC4 + usecase owid_date_country as UC5 + usecase owid_date_country_germany as UC6 + usecase owid_date_reports as UC7 +} +package owid_views_for_tasks { + usecase owid_tasks as UC57 + usecase task_owid_download_only as UC50 + usecase task_owid_import_only as UC51 + usecase task_owid_update_dimension_tables_only as UC52 + usecase task_owid_update_fact_table_initial_only as UC53 + usecase task_owid_update_fact_table_incremental_only as UC54 + usecase task_owid_update_star_schema_initial as UC55 + usecase task_owid_update_star_schema_incremental as UC56 +} +package owid_celery_tasks { + usecase owid_task_download_only as UC100 + usecase owid_task_import_only as UC101 + usecase owid_task_update_dimensiontables_only as UC102 + usecase owid_task_update_facttable_incremental_only as UC103 + usecase owid_task_update_facttable_initial_only as UC104 + usecase owid_task_update_starschema_initial as UC105 + usecase owid_task_update_starschema_incremental as UC106 +} +vu --> UC1 +vu --> UC2 +vu --> UC3 +vu --> UC4 +vu --> UC5 +vu --> UC6 +vu --> UC7 +au --> UC50 +au --> UC51 +au --> UC52 +au --> UC53 +au --> UC54 +au --> UC55 +au --> UC56 +au --> UC57 +UC50 --> UC100 +UC51 --> UC101 +UC52 --> UC102 +UC53 --> UC103 +UC54 --> UC104 +UC55 --> UC105 +UC56 --> UC106 +@enduml \ No newline at end of file diff --git a/docs/uml_blueprints/rki_vaccination/rki_vaccination_domain_model.png b/docs/blueprints/rki_vaccination/uml/domain_model/rki_vaccination_domain_model.png similarity index 100% rename from docs/uml_blueprints/rki_vaccination/rki_vaccination_domain_model.png rename to docs/blueprints/rki_vaccination/uml/domain_model/rki_vaccination_domain_model.png diff --git a/docs/uml_blueprints/rki_vaccination/rki_vaccination_domain_model.txt b/docs/blueprints/rki_vaccination/uml/domain_model/rki_vaccination_domain_model.txt similarity index 100% rename from docs/uml_blueprints/rki_vaccination/rki_vaccination_domain_model.txt rename to docs/blueprints/rki_vaccination/uml/domain_model/rki_vaccination_domain_model.txt diff --git a/docs/uml_blueprints/rki_vaccination/rki_vaccination_use_cases.png b/docs/blueprints/rki_vaccination/uml/use_cases/rki_vaccination_use_cases.png similarity index 100% rename from docs/uml_blueprints/rki_vaccination/rki_vaccination_use_cases.png rename to docs/blueprints/rki_vaccination/uml/use_cases/rki_vaccination_use_cases.png diff --git a/docs/uml_blueprints/rki_vaccination/rki_vaccination_use_cases.txt b/docs/blueprints/rki_vaccination/uml/use_cases/rki_vaccination_use_cases.txt similarity index 100% rename from docs/uml_blueprints/rki_vaccination/rki_vaccination_use_cases.txt rename to docs/blueprints/rki_vaccination/uml/use_cases/rki_vaccination_use_cases.txt diff --git a/docs/blueprints/who/uml/domain_model/who_domain_model.png b/docs/blueprints/who/uml/domain_model/who_domain_model.png new file mode 100644 index 0000000000000000000000000000000000000000..e9efea4eb63b0ee7d336c42fc7e5c349c30044fa Binary files /dev/null and b/docs/blueprints/who/uml/domain_model/who_domain_model.png differ diff --git a/docs/uml_blueprints/who/who_domain_model.txt b/docs/blueprints/who/uml/domain_model/who_domain_model.txt similarity index 100% rename from docs/uml_blueprints/who/who_domain_model.txt rename to docs/blueprints/who/uml/domain_model/who_domain_model.txt diff --git a/docs/uml_blueprints/who/who_use_cases.png b/docs/blueprints/who/uml/use_cases/who_use_cases.png similarity index 100% rename from docs/uml_blueprints/who/who_use_cases.png rename to docs/blueprints/who/uml/use_cases/who_use_cases.png diff --git a/docs/uml_blueprints/who/who_use_cases.txt b/docs/blueprints/who/uml/use_cases/who_use_cases.txt similarity index 100% rename from docs/uml_blueprints/who/who_use_cases.txt rename to docs/blueprints/who/uml/use_cases/who_use_cases.txt diff --git a/docs/uml_blueprints/owid/owid_domain_model.png b/docs/uml_blueprints/owid/owid_domain_model.png deleted file mode 100644 index 3a7b8d9668500002a766a8b98f90a9de54239b84..0000000000000000000000000000000000000000 Binary files a/docs/uml_blueprints/owid/owid_domain_model.png and /dev/null differ diff --git a/docs/uml_blueprints/who/who_domain_model.png b/docs/uml_blueprints/who/who_domain_model.png deleted file mode 100644 index 8032f22597dab0c0a0775a6e3d77291dcd382340..0000000000000000000000000000000000000000 Binary files a/docs/uml_blueprints/who/who_domain_model.png and /dev/null differ diff --git a/package-lock.json b/package-lock.json index 01a044a0b3a1d9d78b16064278340b90e3d70c90..58ff8dc07cf9d4704b0a3daf2d91ce6644217725 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { "name": "flask-covid19", - "version": "0.0.32", + "version": "0.0.33", "lockfileVersion": 1 } diff --git a/package.json b/package.json index e9f0cc8440bb369372fa2adb45cfb899a1e67afe..a21aa6b8f09e6d8fed667a3dfe74432da95977eb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "flask-covid19", - "version": "0.0.32", + "version": "0.0.34", "description": "Covid19 Data Aggregation - also a Project to learn Python Flask, SQLAlchemy, Celery et al.", "main": "index.js", "dependencies": {}, diff --git a/setup.cfg b/setup.cfg index 9e13b3076db9a3fe3d37449012dcc413474319dc..8ce3a4aed28d6d4fa48139f4e8cadb8d45ec4cc1 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = flask-covid19 -version = 0.0.32 +version = 0.0.34 url = https://git.noc.ruhr-uni-bochum.de/thomaswoehlke/flask-covid19.git author = Thomas Woehlke author_email = thomas.woehlke@gmail.com diff --git a/setup.py b/setup.py index 864da2969882e2425208467a317ddd975825e502..15cf8b730ad47cb61852afd4c35d5a4dba53e68f 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ import subprocess from setuptools import find_packages, setup -version = '0.0.32' +version = '0.0.34' needs_pytest = {'pytest', 'test', 'ptr'}.intersection(sys.argv) pytest_runner = ['pytest-runner'] if needs_pytest else [] diff --git a/src/covid19/__init__.py b/src/covid19/__init__.py index 1c97c57a57cb1c2a5448ddef7564fa8ec985a9cb..8602185819ecd70e1286bc995c8d82c1804590fa 100644 --- a/src/covid19/__init__.py +++ b/src/covid19/__init__.py @@ -1,12 +1,12 @@ from database import app, run_run_with_debug, port, db -import covid19.blueprints.application.application_views -from covid19.blueprints.application.application_services import user_service -from covid19.blueprints.application.application_service import ApplicationService +import covid19.blueprints.app_application.application_views +from covid19.blueprints.app_all.all_services import app_user_service +from covid19.blueprints.app_application.application_service import ApplicationService def run_web(): - application_service = ApplicationService(db, user_service) + application_service = ApplicationService(db, app_user_service) application_service.prepare_run_web() app.run(debug=run_run_with_debug, port=port) diff --git a/src/covid19/blueprints/admin/__init__.py b/src/covid19/blueprints/app_admin/__init__.py similarity index 100% rename from src/covid19/blueprints/admin/__init__.py rename to src/covid19/blueprints/app_admin/__init__.py diff --git a/src/covid19/blueprints/admin/admin_service.py b/src/covid19/blueprints/app_admin/app_admin_service.py similarity index 100% rename from src/covid19/blueprints/admin/admin_service.py rename to src/covid19/blueprints/app_admin/app_admin_service.py diff --git a/src/covid19/blueprints/app_admin/app_admin_views.py b/src/covid19/blueprints/app_admin/app_admin_views.py new file mode 100644 index 0000000000000000000000000000000000000000..dc1b804d81f02583adcdc9090b1b44317a4ebd71 --- /dev/null +++ b/src/covid19/blueprints/app_admin/app_admin_views.py @@ -0,0 +1,404 @@ +from flask import render_template, redirect, url_for, flash, Blueprint +from celery import states +from celery.utils.log import get_task_logger + +from database import app +from covid19.blueprints.app_all.all_services import who_service, owid_service +from covid19.blueprints.app_all.all_services import rki_service, rki_vaccination_service +from covid19.blueprints.app_all.all_services import ecdc_service, divi_service +from covid19.blueprints.app_all.all_services import app_admin_service, app_user_service +from covid19.blueprints.app_mq.application_workers import celery +from covid19.blueprints.app_application.application_model_transient import ApplicationPage + +drop_and_create_data_again = True + +blueprint_app_admin = Blueprint('app_admin', __name__, template_folder='templates', url_prefix='/app/admin') + + +# --------------------------------------------------------------------------------------------------------------- +# Url Routes Frontend +# --------------------------------------------------------------------------------------------------------------- + +@blueprint_app_admin.route('/') +def url_admin_index(): + page_info = ApplicationPage('Admin', "Covid19 Admin") + return render_template( + 'app_admin/index.html', + page_info=page_info) + + +@blueprint_app_admin.route('/admin/tasks') +def url_admin_tasks(): + page_info = ApplicationPage('Admin', "Admin Tasks") + return render_template( + 'app_admin/admin_tasks.html', + page_info=page_info) + + +@blueprint_app_admin.route('/info') +def url_admin_info(): + page_info = ApplicationPage('Admin', "Info") + return render_template( + 'app_admin/admin_info.html', + page_info=page_info) + + +# ---------------------------------------------------------------------------------------------------------------- +# Celery TASKS +# ---------------------------------------------------------------------------------------------------------------- + + +@celery.task(bind=True) +def task_admin_alive_message(self): + logger = get_task_logger(__name__) + self.update_state(state=states.STARTED) + logger.info("------------------------------------------------------------") + logger.info(" task_admin_alive_message [received] ") + logger.info("------------------------------------------------------------") + self.update_state(state=states.SUCCESS) + result = "OK (task_admin_alive_message)" + return result + + +@celery.task(bind=True) +def task_admin_database_drop_create(self): + logger = get_task_logger(__name__) + self.update_state(state=states.STARTED) + logger.info("------------------------------------------------------------") + logger.info(" task_admin_database_drop_create [start] ") + logger.info("------------------------------------------------------------") + who_service.task_database_drop_create() + # divi_service.task_database_drop_create() + ecdc_service.task_database_drop_create() + owid_service.task_database_drop_create() + rki_vaccination_service.task_database_drop_create() + # rki_service_bundeslaender.task_database_drop_create() + # rki_service_landkreise.task_database_drop_create() + app_admin_service.task_database_drop_create() + logger.info("------------------------------------------------------------") + logger.info(" task_admin_database_drop_create [done] ") + logger.info("------------------------------------------------------------") + self.update_state(state=states.SUCCESS) + result = "OK (task_admin_database_drop_create)" + return result + + +@celery.task(bind=True) +def task_admin_import_all_files(self): + logger = get_task_logger(__name__) + self.update_state(state=states.STARTED) + logger.info("------------------------------------------------------------") + logger.info(" task_admin_import_all_files [start] ") + logger.info("------------------------------------------------------------") + who_service.task_admin_import_all_files() + # divi_service.task_admin_import_all_files() + ecdc_service.task_admin_import_all_files() + owid_service.task_admin_import_all_files() + rki_vaccination_service.task_admin_import_all_files() + # rki_service_bundeslaender.task_admin_import_all_files() + # rki_service_landkreise.task_admin_import_all_files() + logger.info("------------------------------------------------------------") + logger.info(" task_admin_import_all_files [done] ") + logger.info("------------------------------------------------------------") + self.update_state(state=states.SUCCESS) + result = "OK (task_admin_import_all_files)" + return result + + +@celery.task(bind=True) +def task_admin_update_full_dimension_tables(self): + logger = get_task_logger(__name__) + self.update_state(state=states.STARTED) + logger.info("------------------------------------------------------------") + logger.info(" task_admin_update_full_dimension_tables [start] ") + logger.info("------------------------------------------------------------") + who_service.task_admin_update_full_dimension_tables() + # divi_service.full_update_dimension_tables() + ecdc_service.task_admin_update_full_dimension_tables() + owid_service.task_admin_update_full_dimension_tables() + rki_vaccination_service.task_admin_update_full_dimension_tables() + # rki_service_bundeslaender.full_update_dimension_tables() + # rki_service_landkreise.full_update_dimension_tables() + logger.info("------------------------------------------------------------") + logger.info(" task_admin_update_full_dimension_tables [done] ") + logger.info("------------------------------------------------------------") + self.update_state(state=states.SUCCESS) + result = "OK (task_admin_update_full_dimension_tables)" + return result + + +@celery.task(bind=True) +def task_admin_update_dimension_tables(self): + logger = get_task_logger(__name__) + self.update_state(state=states.STARTED) + logger.info("------------------------------------------------------------") + logger.info(" task_admin_update_dimension_tables_only [start] ") + logger.info("------------------------------------------------------------") + who_service.task_admin_update_dimension_tables() + # divi_service.update_dimension_tables_only() + ecdc_service.task_admin_update_dimension_tables() + owid_service.task_admin_update_dimension_tables() + rki_vaccination_service.task_admin_update_dimension_tables() + # rki_service_bundeslaender.update_dimension_tables_only() + # rki_service_landkreise.update_dimension_tables_only() + logger.info("------------------------------------------------------------") + logger.info(" task_admin_update_dimension_tables_only [done] ") + logger.info("------------------------------------------------------------") + self.update_state(state=states.SUCCESS) + result = "OK (task_admin_update_dimension_tables_only)" + return result + + +@celery.task(bind=True) +def task_admin_full_update_fact_table(self): + logger = get_task_logger(__name__) + self.update_state(state=states.STARTED) + logger.info("------------------------------------------------------------") + logger.info(" task_admin_update_fact_table_initial_only [start] ") + logger.info("------------------------------------------------------------") + who_service.task_admin_full_update_fact_table() + # divi_service.full_update_fact_table() + ecdc_service.task_admin_full_update_fact_table() + owid_service.task_admin_full_update_fact_table() + rki_vaccination_service.task_admin_full_update_fact_table() + # rki_service_bundeslaender.update_fact_table_initial_only() + # rki_service_landkreise.update_fact_table_initial_only() + logger.info("------------------------------------------------------------") + logger.info(" task_admin_update_fact_table_initial_only [done] ") + logger.info("------------------------------------------------------------") + self.update_state(state=states.SUCCESS) + result = "OK (task_admin_update_fact_table_initial_only)" + return result + + +@celery.task(bind=True) +def task_admin_update_fact_table(self): + logger = get_task_logger(__name__) + self.update_state(state=states.STARTED) + logger.info("------------------------------------------------------------") + logger.info(" task_admin_update_fact_table_incremental_only [start] ") + logger.info("------------------------------------------------------------") + who_service.task_admin_update_fact_table() + # divi_service.task_admin_update_fact_table() + ecdc_service.task_admin_update_fact_table() + owid_service.task_admin_update_fact_table() + rki_vaccination_service.task_admin_update_fact_table() + # rki_service_bundeslaender.task_admin_update_fact_table() + # rki_service_landkreise.task_admin_update_fact_table() + logger.info("------------------------------------------------------------") + logger.info(" task_admin_update_fact_table_incremental_only [done] ") + logger.info("------------------------------------------------------------") + self.update_state(state=states.SUCCESS) + result = "OK (task_admin_update_fact_table_incremental_only)" + return result + + +@celery.task(bind=True) +def task_admin_full_update_star_schema(self): + logger = get_task_logger(__name__) + self.update_state(state=states.STARTED) + logger.info("------------------------------------------------------------") + logger.info(" task_admin_update_star_schema_initial [start] ") + logger.info("------------------------------------------------------------") + who_service.task_admin_full_update_star_schema() + # divi_service.task_admin_full_update_star_schema() + ecdc_service.task_admin_full_update_star_schema() + owid_service.task_admin_full_update_star_schema() + rki_vaccination_service.task_admin_full_update_star_schema() + # rki_service_bundeslaender.task_admin_full_update_star_schema() + # rki_service_landkreise.task_admin_full_update_star_schema() + logger.info("------------------------------------------------------------") + logger.info(" task_admin_update_star_schema_initial [done] ") + logger.info("------------------------------------------------------------") + self.update_state(state=states.SUCCESS) + result = "OK (task_admin_update_star_schema_initial)" + return result + + +@celery.task(bind=True) +def task_admin_update_star_schema(self): + logger = get_task_logger(__name__) + self.update_state(state=states.STARTED) + logger.info("------------------------------------------------------------") + logger.info(" task_admin_update_star_schema_incremental [start] ") + logger.info("------------------------------------------------------------") + who_service.task_admin_update_star_schema() + # divi_service.task_admin_update_star_schema() + ecdc_service.task_admin_update_star_schema() + owid_service.task_admin_update_star_schema() + rki_vaccination_service.task_admin_update_star_schema() + # rki_service_bundeslaender.task_admin_update_star_schema() + # rki_service_landkreise.task_admin_update_star_schema() + logger.info("------------------------------------------------------------") + logger.info(" task_admin_update_star_schema_incremental [done] ") + logger.info("------------------------------------------------------------") + self.update_state(state=states.SUCCESS) + result = "OK (task_admin_update_star_schema_incremental)" + return result + +# ---------------------------------------------------------------------------------------------------------------- +# URL Routes for Celery TASKS +# ---------------------------------------------------------------------------------------------------------------- + + +@blueprint_app_admin.route('/task/alive_message') +def url_task_admin_alive_message(): + app.logger.info("url_task_admin_message_start [start]") + task_admin_alive_message.apply_async() + flash("alive_message_task started") + app.logger.info("url_task_admin_message_start [done]") + return redirect(url_for('app_admin.url_admin_tasks')) + + +@blueprint_app_admin.route('/task/database/dump') +def url_task_admin_database_dump(): + app.logger.info("url_task_admin_database_dump [start]") + app_admin_service.run_admin_database_dump() + flash("admin_service.run_admin_database_dump started") + app.logger.info("url_task_admin_database_dump [done]") + return redirect(url_for('app_admin.url_admin_tasks')) + + +@blueprint_app_admin.route('/task/database/reimport') +def url_task_admin_database_dump_reimport(): + app.logger.info("url_task_admin_database_dump_reimport [start]") + app_admin_service.run_admin_database_dump_reimport() + flash("admin_service.run_admin_database_import started") + app.logger.info("url_task_admin_database_dump_reimport [done]") + return redirect(url_for('app_admin.url_admin_tasks')) + + +@blueprint_app_admin.route('/task/database/drop_create') +def url_task_admin_database_dropcreate(): + app.logger.info("url_task_admin_database_dropcreate [start]") + app_admin_service.run_admin_database_drop_and_create() + flash("admin_service.run_admin_database_drop started") + app.logger.info("url_task_admin_database_dropcreate [done]") + return redirect(url_for('app_admin.url_admin_tasks')) + + +@blueprint_app_admin.route('/task/database/drop') +def url_task_admin_database_drop(): + flash("url_task_admin_database_drop [start]") + app.logger.info("admin_service.run_admin_database_drop_and_create [start]") + app_admin_service.run_admin_database_drop_and_create() + flash("admin_service.run_admin_database_drop_and_create() [done]") + app.logger.info("admin_service.run_admin_database_drop_and_create() [done]") + if drop_and_create_data_again: + who_service.pretask_database_drop_create() + # divi_service.pretask_database_drop_create() + ecdc_service.pretask_database_drop_create() + owid_service.pretask_database_drop_create() + rki_vaccination_service.pretask_database_drop_create() + # rki_service_bundeslaender.pretask_database_drop_create() + # rki_service_landkreise.pretask_database_drop_create() + task_admin_database_drop_create.apply_async() + flash(message="async task_admin_database_drop_create [start]", category="warning") + app.logger.warn("async task_admin_database_drop_create [start]") + app.logger.info("url_task_admin_database_drop [done]") + return redirect(url_for('app_admin.url_admin_tasks')) + + +@blueprint_app_admin.route('/task/files/all/download') +def url_task_admin_download_all_files(): + app.logger.info("url_task_admin_download_all_files [start]") + who_service.download_all_files() + divi_service.download_all_files() + ecdc_service.download_all_files() + owid_service.download_all_files() + rki_vaccination_service.download_all_files() + rki_service.download_all_files() + app.logger.info("url_task_admin_download_all_files [done]") + return redirect(url_for('app_admin.url_admin_tasks')) + + +@blueprint_app_admin.route('/task/files/all/import') +def url_task_admin_import_all_files(): + app.logger.info("url_task_admin_import_all_files [start]") + task_admin_import_all_files.apply_async() + flash(message="async url_task_admin_import_all_files [start]", category="warning") + app.logger.warn("async url_task_admin_import_all_files [start]") + app.logger.info("url_task_admin_import_all_files [done]") + return redirect(url_for('app_admin.url_admin_tasks')) + + +@blueprint_app_admin.route('/task/update/all/dimension_tables') +def url_task_admin_update_dimension_tables(): + app.logger.info("url_task_admin_update_dimension_tables [start]") + task_admin_update_dimension_tables.apply_async() + flash(message="async task_admin_update_dimension_tables [start]", category="warning") + app.logger.warn("async task_admin_update_dimension_tables [start]") + app.logger.info("url_task_admin_update_dimension_tables [done]") + return redirect(url_for('app_admin.url_admin_tasks')) + + +@blueprint_app_admin.route('/task/full/update/all/dimension_tables') +def url_task_admin_update_full_dimension_tables(): + app.logger.info("url_task_admin_update_full_dimension_tables [start]") + task_admin_update_full_dimension_tables.apply_async() + flash(message="async task_admin_update_full_dimension_tables [start]", category="warning") + app.logger.warn("async task_admin_update_full_dimension_tables [start]") + app.logger.info("url_task_admin_update_full_dimension_tables [done]") + return redirect(url_for('app_admin.url_admin_tasks')) + + +@blueprint_app_admin.route('/task/full/update/all/fact_tables') +def url_task_admin_full_update_fact_table(): + app.logger.info("url_task_admin_full_update_fact_table [start]") + task_admin_full_update_fact_table.apply_async() + flash(message="async task_admin_full_update_fact_table [start]", category="warning") + app.logger.warn("async task_admin_full_update_fact_table [start]") + app.logger.info("url_task_admin_full_update_fact_table [done]") + return redirect(url_for('app_admin.url_admin_tasks')) + + +@blueprint_app_admin.route('/task/update/all/fact_tables') +def url_task_admin_update_fact_table(): + app.logger.info("url_task_admin_update_fact_table [start]") + task_admin_update_fact_table.apply_async() + flash(message="async task_admin_update_fact_table [start]", category="warning") + app.logger.warn("async task_admin_update_fact_table [start]") + app.logger.info("url_task_admin_update_fact_table [done]") + return redirect(url_for('app_admin.url_admin_tasks')) + + +@blueprint_app_admin.route('/task/full/update/star_schema') +def url_task_admin_full_update_star_schema(): + app.logger.info("url_task_admin_full_update_star_schema [start]") + task_admin_full_update_star_schema.apply_async() + flash(message="async task_admin_full_update_star_schema [start]", category="warning") + app.logger.warn("async task_admin_full_update_star_schema [start]") + app.logger.info("url_task_admin_full_update_star_schema [done]") + return redirect(url_for('app_admin.url_admin_tasks')) + + +@blueprint_app_admin.route('/task/update/star_schema') +def url_task_admin_update_star_schema(): + app.logger.info("url_task_admin_update_star_schema [start]") + task_admin_update_star_schema.apply_async() + flash(message="async task_admin_update_star_schema [start]", category="warning") + app.logger.warn("async task_admin_update_star_schema [start]") + app.logger.info("url_task_admin_update_star_schema [done]") + return redirect(url_for('app_admin.url_admin_tasks')) + + +@blueprint_app_admin.route('/task/full/update/do/all') +def url_task_admin_full_update_do_all(): + app.logger.info("url_task_admin_full_update_do_all [start]") + who_service.download_files() + flash("who_service.download_files() [done]") + # divi_service.download_files() + flash("divi_service.download_files() [done]") + ecdc_service.download_all_files() + flash("ecdc_service.download_all_files() [done]") + owid_service.download_all_files() + flash("owid_service.download_all_files() [done]") + rki_vaccination_service.download_all_files() + flash("rki_vaccination_service.download_all_files() [done]") + rki_service.download_all_files() + flash("rki_service_bundeslaender.download_all_files() [done]") + task_admin_full_update_star_schema.apply_async() + flash(message="async task_admin_full_update_star_schema [start]", category="warning") + app.logger.warn("async task_admin_full_update_star_schema [start]") + app.logger.info("url_task_admin_full_update_do_all [done]") + return redirect(url_for('app_admin.url_admin_tasks')) diff --git a/src/covid19/blueprints/admin/templates/__init__.py b/src/covid19/blueprints/app_admin/templates/__init__.py similarity index 100% rename from src/covid19/blueprints/admin/templates/__init__.py rename to src/covid19/blueprints/app_admin/templates/__init__.py diff --git a/src/covid19/blueprints/admin/templates/admin/admin_info.html b/src/covid19/blueprints/app_admin/templates/app_admin/admin_info.html similarity index 66% rename from src/covid19/blueprints/admin/templates/admin/admin_info.html rename to src/covid19/blueprints/app_admin/templates/app_admin/admin_info.html index f534ae42f07c9765836f658c785660554d7581e7..5994cae995336422cab484d626ee034ece52620c 100644 --- a/src/covid19/blueprints/admin/templates/admin/admin_info.html +++ b/src/covid19/blueprints/app_admin/templates/app_admin/admin_info.html @@ -1,8 +1,8 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} - {% include 'admin/navigation/admin_navtabs.html' %} + {% include 'app_admin/navigation/app_admin_navtabs.html' %} <div class="container"> <div class="row"> diff --git a/src/covid19/blueprints/admin/templates/admin/system_tasks.html b/src/covid19/blueprints/app_admin/templates/app_admin/admin_tasks.html similarity index 95% rename from src/covid19/blueprints/admin/templates/admin/system_tasks.html rename to src/covid19/blueprints/app_admin/templates/app_admin/admin_tasks.html index a1c56d40c0a0cd6b716091f842ea98115abbf4f5..837bc4a3e34a84a6163e59b50578a9d15099036f 100644 --- a/src/covid19/blueprints/admin/templates/admin/system_tasks.html +++ b/src/covid19/blueprints/app_admin/templates/app_admin/admin_tasks.html @@ -1,8 +1,8 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} - {% include 'admin/navigation/admin_navtabs.html' %} + {% include 'app_admin/navigation/app_admin_navtabs.html' %} <div class="container"> <div class="row"> diff --git a/src/covid19/blueprints/admin/templates/admin/index.html b/src/covid19/blueprints/app_admin/templates/app_admin/index.html similarity index 93% rename from src/covid19/blueprints/admin/templates/admin/index.html rename to src/covid19/blueprints/app_admin/templates/app_admin/index.html index 62c36d7fcea13a64a4629d9eb6edaa590d8bfcb3..dade2a1eb63d17c00ee7662b96f8d77a304ada3e 100644 --- a/src/covid19/blueprints/admin/templates/admin/index.html +++ b/src/covid19/blueprints/app_admin/templates/app_admin/index.html @@ -1,6 +1,6 @@ -{% extends 'admin/master.html' %} +{% extends 'app_admin/master.html' %} - {% include 'admin/navigation/admin_navtabs.html' %} + {% include 'app_admin/navigation/app_admin_navtabs.html' %} <div class="container"> <div class="row"> <div class="col"> diff --git a/src/covid19/blueprints/admin/templates/admin/navigation/admin_navbar_dropdown.html b/src/covid19/blueprints/app_admin/templates/app_admin/navigation/app_admin_navbar_dropdown.html similarity index 100% rename from src/covid19/blueprints/admin/templates/admin/navigation/admin_navbar_dropdown.html rename to src/covid19/blueprints/app_admin/templates/app_admin/navigation/app_admin_navbar_dropdown.html diff --git a/src/covid19/blueprints/admin/templates/admin/navigation/admin_navtabs.html b/src/covid19/blueprints/app_admin/templates/app_admin/navigation/app_admin_navtabs.html similarity index 82% rename from src/covid19/blueprints/admin/templates/admin/navigation/admin_navtabs.html rename to src/covid19/blueprints/app_admin/templates/app_admin/navigation/app_admin_navtabs.html index 14fdc3f11f67cfaf384ffa0cb79cc2077cba82e6..7e680cc5270aec4406d20622624c025ad8136812 100644 --- a/src/covid19/blueprints/admin/templates/admin/navigation/admin_navtabs.html +++ b/src/covid19/blueprints/app_admin/templates/app_admin/navigation/app_admin_navtabs.html @@ -13,10 +13,6 @@ <a class="nav-link" href="{{ url_for( 'app_admin.url_admin_tasks') }}">Admin Tasks</a> </li> - <li class="nav-item"> - <a class="nav-link" - href="{{ url_for( 'app_admin.url_system_tasks') }}">System Tasks</a> - </li> {% endif %} <li class="nav-item"> <a class="nav-link" diff --git a/src/covid19/blueprints/application/__init__.py b/src/covid19/blueprints/app_all/__init__.py similarity index 100% rename from src/covid19/blueprints/application/__init__.py rename to src/covid19/blueprints/app_all/__init__.py diff --git a/src/covid19/blueprints/application/application_model.py b/src/covid19/blueprints/app_all/all_model.py similarity index 76% rename from src/covid19/blueprints/application/application_model.py rename to src/covid19/blueprints/app_all/all_model.py index 5392090a14c5df6d5068b87fb15af1bf5906a115..d5d7858548c966ea15b830e4987e03941bdddf07 100644 --- a/src/covid19/blueprints/application/application_model.py +++ b/src/covid19/blueprints/app_all/all_model.py @@ -228,60 +228,3 @@ class ApplicationRegion(db.Model): return db.session.query(cls)\ .filter(cls.region == i_region)\ .one_or_none() - - -class RkiDateReported(ApplicationDateReported): - __tablename__ = 'rki_datereported' - __mapper_args__ = { - 'concrete': True - } - __table_args__ = ( - db.UniqueConstraint('date_reported', 'datum', name="uix_rki_datereported"), - ) - - id = db.Column(db.Integer, primary_key=True) - date_reported = db.Column(db.String(255), nullable=False) - year_week = db.Column(db.String(255), nullable=False) - datum = db.Column(db.Date, nullable=False, unique=True) - year = db.Column(db.Integer, nullable=False) - month = db.Column(db.Integer, nullable=False) - day_of_month = db.Column(db.Integer, nullable=False) - day_of_week = db.Column(db.Integer, nullable=False) - week_of_year = db.Column(db.Integer, nullable=False) - time_of_date_str = db.Column(db.String(255), nullable=False) - time_of_date = db.Column(db.Time, nullable=False) - aktualisierung = db.Column(db.String(255), nullable=False, unique=True) - - @classmethod - def create_new_object_factory(cls, aktualisierung: str): - aktualisierung_datetime = datetime.fromtimestamp(aktualisierung) - my_datum = aktualisierung_datetime.date() - my_time_of_date = aktualisierung_datetime.time() - my_date_reported_str = my_datum.isoformat() - my_time_of_date_str = my_time_of_date.isoformat(timespec='seconds') - (my_iso_year, week_number, weekday) = my_datum.isocalendar() - my_year_week = "" + str(my_iso_year) - if week_number < 10: - my_year_week += "-0" - else: - my_year_week += "-" - my_year_week += str(week_number) - return RkiDateReported( - date_reported=my_date_reported_str, - datum=my_datum, - year=my_datum.year, - month=my_datum.month, - day_of_month=my_datum.day, - day_of_week=weekday, - week_of_year=week_number, - year_week=my_year_week, - time_of_date_str=my_time_of_date_str, - time_of_date=my_time_of_date, - aktualisierung=aktualisierung - ) - - @classmethod - def find_by_aktualisierung(cls, aktualisierung_from_import: str): - return db.session.query(cls) \ - .filter(cls.aktualisierung == aktualisierung_from_import) \ - .one_or_none() diff --git a/src/covid19/blueprints/application/application_service_config.py b/src/covid19/blueprints/app_all/all_service_config.py similarity index 70% rename from src/covid19/blueprints/application/application_service_config.py rename to src/covid19/blueprints/app_all/all_service_config.py index 75eed63d8f2a7fcbfa1b805988b8e244f5f326f9..a4bc7417fbd4c9cf1acc9a2bfcf2405aa93964d4 100644 --- a/src/covid19/blueprints/application/application_service_config.py +++ b/src/covid19/blueprints/app_all/all_service_config.py @@ -2,10 +2,10 @@ import os from datetime import date from covid19.blueprints.ecdc.ecdc_model_import import EcdcImport from covid19.blueprints.who.who_model_import import WhoImport -from covid19.blueprints.rki.rki_vaccination.rki_vaccination_model_import import RkiVaccinationImport +from covid19.blueprints.rki_vaccination.rki_vaccination_model_import import RkiVaccinationImport from covid19.blueprints.owid.owid_model_import import OwidImport -from covid19.blueprints.rki.rki_bundeslaender.rki_bundeslaender_model_import import RkiBundeslaenderImport -from covid19.blueprints.rki.rki_landkreise.rki_landkreise_model_import import RkiLandkreiseImport +from covid19.blueprints.rki_cases.rki_model_import import RkiImport +from covid19.blueprints.intensivregister.divi_model_import import DiviImport class ApplicationServiceConfig: @@ -48,7 +48,7 @@ class ApplicationServiceConfig: return ApplicationServiceConfig( slug='rki_vaccination', category='RKI', - cvsfile_subpath='rki' + os.sep + 'rki_vaccination', + cvsfile_subpath='rki_vaccination', sub_category='Vaccination', tablename=RkiVaccinationImport.__tablename__, cvsfile_name="germany_vaccinations_timeseries_v2.tsv", @@ -80,27 +80,16 @@ class ApplicationServiceConfig: ) @classmethod - def create_config_for_rki_bundeslaender(cls): + def create_config_for_rki(cls): + # https://www.arcgis.com/home/item.html?id=f10774f1c63e40168479a1feb6c7ca74 return ApplicationServiceConfig( - slug='rki_bundeslaender', + slug='rki', category='RKI', - cvsfile_subpath='rki' + os.sep + 'rki_bundeslaender', - sub_category='Bundeslaender', - tablename=RkiBundeslaenderImport.__tablename__, - cvsfile_name="RKI_COVID19__" + date.today().isoformat() + "__Fallzahlen_Kum_Tab.xlsx", - url_src="https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Fallzahlen_Kum_Tab.xlsx?__blob=publicationFile", - ) - - @classmethod - def create_config_for_rki_landkreise(cls): - return ApplicationServiceConfig( - slug='rki_landkreise', - category='RKI', - cvsfile_subpath='rki' + os.sep + 'rki_landkreise', - sub_category='Landkreise', - tablename=RkiLandkreiseImport.__tablename__, - cvsfile_name="RKI_COVID19__" + date.today().isoformat() + "__landkreise.csv", - url_src="https://opendata.arcgis.com/datasets/917fc37a709542548cc3be077a786c17_0.csv", + cvsfile_subpath='rki', + sub_category='Cases', + tablename=RkiImport.__tablename__, + cvsfile_name="RKI_COVID19.csv", + url_src="https://www.arcgis.com/sharing/rest/content/items/f10774f1c63e40168479a1feb6c7ca74/data", ) @classmethod @@ -110,7 +99,7 @@ class ApplicationServiceConfig: category='DIVI', cvsfile_subpath='intensivregister', sub_category='Intensivregister', - tablename=RkiLandkreiseImport.__tablename__, + tablename=DiviImport.__tablename__, cvsfile_name="DIVI_intensivregister.json", url_src="https://www.intensivregister.de/api/public/intensivregister", ) diff --git a/src/covid19/blueprints/application/application_service_download.py b/src/covid19/blueprints/app_all/all_service_download.py similarity index 79% rename from src/covid19/blueprints/application/application_service_download.py rename to src/covid19/blueprints/app_all/all_service_download.py index 537694c257f6d5e1a389a179351b00e2f00a10bd..1bf3e780a443feed07411cf270a5215c493625b9 100644 --- a/src/covid19/blueprints/application/application_service_download.py +++ b/src/covid19/blueprints/app_all/all_service_download.py @@ -1,9 +1,8 @@ import os import wget import subprocess -# from flask import flash from database import app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig class ApplicationServiceDownload: @@ -16,21 +15,6 @@ class ApplicationServiceDownload: app.logger.debug("------------------------------------------------------------") app.logger.debug(" ApplicationServiceDownload [ready]") - #def __log_error(self, error_msg: str, error_obj): - # log_msg = self.cfg.slug[0] + " " + self.cfg.msg_error() + " " + error_msg + " " - # app.logger.error(log_msg) - # flash(message=log_msg, category='error') - # return self - # - #def __log_success(self, data_file): - # slug = self.cfg.slug[0] - # log_msg1 = " " + slug + " | download success: " + data_file + " " - # log_msg2 = " " + slug + " | " + self.cfg.msg_ok - # app.logger.info(log_msg1) - # app.logger.info(log_msg2) - # flash(log_msg1) - # return self - def __prepare_download(self): os.makedirs(self.cfg.data_path, exist_ok=True) if os.path.isfile(self.cfg.cvsfile_path): diff --git a/src/covid19/blueprints/app_all/all_services.py b/src/covid19/blueprints/app_all/all_services.py new file mode 100644 index 0000000000000000000000000000000000000000..58af341ae5eb81f79ea70dfd710226e294e7a063 --- /dev/null +++ b/src/covid19/blueprints/app_all/all_services.py @@ -0,0 +1,26 @@ +from database import db + +from covid19.blueprints.app_admin.app_admin_service import AdminService +from covid19.blueprints.app_user.user_service import UserService +from covid19.blueprints.ecdc.ecdc_service import EcdcService +from covid19.blueprints.owid.owid_service import OwidService +from covid19.blueprints.rki_vaccination.rki_vaccination_service import RkiVaccinationService +from covid19.blueprints.who.who_service import WhoService +from covid19.blueprints.intensivregister.divi_service import DiviService +from covid19.blueprints.rki_cases.rki_service import RkiService + +############################################################################################ +# +# Services +# +app_admin_service = AdminService(db) +app_user_service = UserService(db) + +who_service = WhoService(db) +owid_service = OwidService(db) +ecdc_service = EcdcService(db) +rki_vaccination_service = RkiVaccinationService(db) +rki_service = RkiService(db) +divi_service = DiviService(db) + +db.create_all() diff --git a/src/covid19/blueprints/admin/admin_views.py b/src/covid19/blueprints/app_all/all_views.py similarity index 67% rename from src/covid19/blueprints/admin/admin_views.py rename to src/covid19/blueprints/app_all/all_views.py index 900973388b7391fea835b91fcda240e87a5956ed..a19aa5d4c9409f4b6a49b4e9d055e4a0455578f0 100644 --- a/src/covid19/blueprints/admin/admin_views.py +++ b/src/covid19/blueprints/app_all/all_views.py @@ -3,50 +3,43 @@ from celery import states from celery.utils.log import get_task_logger from database import app -from covid19.blueprints.application.application_services import who_service, ecdc_service, rki_vaccination_service -from covid19.blueprints.application.application_services import rki_service_bundeslaender, rki_service_landkreise -from covid19.blueprints.application.application_services import admin_service, owid_service, divi_service -from covid19.blueprints.application.application_workers import celery -from covid19.blueprints.application.application_model_transient import ApplicationPage +from covid19.blueprints.app_all.all_services import who_service, owid_service +from covid19.blueprints.app_all.all_services import rki_service, rki_vaccination_service +from covid19.blueprints.app_all.all_services import ecdc_service, divi_service +from covid19.blueprints.app_all.all_services import app_admin_service, app_user_service +from covid19.blueprints.app_mq.application_workers import celery +from covid19.blueprints.app_application.application_model_transient import ApplicationPage drop_and_create_data_again = True -app_admin = Blueprint('app_admin', __name__, template_folder='templates', url_prefix='/admin') +blueprint_app_all = Blueprint('app_all', __name__, template_folder='templates', url_prefix='/app/all') # --------------------------------------------------------------------------------------------------------------- # Url Routes Frontend # --------------------------------------------------------------------------------------------------------------- -@app_admin.route('/') +@blueprint_app_all.route('/') def url_admin_index(): page_info = ApplicationPage('Admin', "Covid19 Admin") return render_template( - 'admin/index.html', + 'app_admin/index.html', page_info=page_info) -@app_admin.route('/tasks') +@blueprint_app_all.route('/tasks') def url_admin_tasks(): page_info = ApplicationPage('Admin', "Tasks") return render_template( - 'admin/admin_tasks.html', + 'app_admin/admin_tasks.html', page_info=page_info) -@app_admin.route('/system/tasks') -def url_system_tasks(): - page_info = ApplicationPage('Admin', "System Tasks") - return render_template( - 'admin/system_tasks.html', - page_info=page_info) - - -@app_admin.route('/info') +@blueprint_app_all.route('/info') def url_admin_info(): page_info = ApplicationPage('Admin', "Info") return render_template( - 'admin/admin_info.html', + 'app_admin/admin_info.html', page_info=page_info) @@ -81,7 +74,7 @@ def task_admin_database_drop_create(self): rki_vaccination_service.task_database_drop_create() # rki_service_bundeslaender.task_database_drop_create() # rki_service_landkreise.task_database_drop_create() - admin_service.task_database_drop_create() + app_admin_service.task_database_drop_create() logger.info("------------------------------------------------------------") logger.info(" task_admin_database_drop_create [done] ") logger.info("------------------------------------------------------------") @@ -97,13 +90,13 @@ def task_admin_import_all_files(self): logger.info("------------------------------------------------------------") logger.info(" task_admin_import_all_files [start] ") logger.info("------------------------------------------------------------") - who_service.task_import_all_files() - divi_service.task_import_all_files() - ecdc_service.task_import_all_files() - owid_service.task_import_all_files() - rki_vaccination_service.task_import_all_files() - # rki_service_bundeslaender.task_import_all_files() - # rki_service_landkreise.task_import_all_files() + who_service.task_admin_import_all_files() + # divi_service.task_admin_import_all_files() + ecdc_service.task_admin_import_all_files() + owid_service.task_admin_import_all_files() + rki_vaccination_service.task_admin_import_all_files() + # rki_service_bundeslaender.task_admin_import_all_files() + # rki_service_landkreise.task_admin_import_all_files() logger.info("------------------------------------------------------------") logger.info(" task_admin_import_all_files [done] ") logger.info("------------------------------------------------------------") @@ -119,11 +112,11 @@ def task_admin_update_full_dimension_tables(self): logger.info("------------------------------------------------------------") logger.info(" task_admin_update_full_dimension_tables [start] ") logger.info("------------------------------------------------------------") - who_service.full_update_dimension_tables() + who_service.task_admin_update_full_dimension_tables() # divi_service.full_update_dimension_tables() - ecdc_service.full_update_dimension_tables() - owid_service.full_update_dimension_tables() - rki_vaccination_service.full_update_dimension_tables() + ecdc_service.task_admin_update_full_dimension_tables() + owid_service.task_admin_update_full_dimension_tables() + rki_vaccination_service.task_admin_update_full_dimension_tables() # rki_service_bundeslaender.full_update_dimension_tables() # rki_service_landkreise.full_update_dimension_tables() logger.info("------------------------------------------------------------") @@ -135,17 +128,17 @@ def task_admin_update_full_dimension_tables(self): @celery.task(bind=True) -def task_admin_update_dimension_tables_only(self): +def task_admin_update_dimension_tables(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") logger.info(" task_admin_update_dimension_tables_only [start] ") logger.info("------------------------------------------------------------") - who_service.update_dimension_tables_only() + who_service.task_admin_update_dimension_tables() # divi_service.update_dimension_tables_only() - ecdc_service.update_dimension_tables_only() - owid_service.update_dimension_tables_only() - rki_vaccination_service.update_dimension_tables_only() + ecdc_service.task_admin_update_dimension_tables() + owid_service.task_admin_update_dimension_tables() + rki_vaccination_service.task_admin_update_dimension_tables() # rki_service_bundeslaender.update_dimension_tables_only() # rki_service_landkreise.update_dimension_tables_only() logger.info("------------------------------------------------------------") @@ -157,17 +150,17 @@ def task_admin_update_dimension_tables_only(self): @celery.task(bind=True) -def task_admin_update_fact_table_initial_only(self): +def task_admin_full_update_fact_table(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") logger.info(" task_admin_update_fact_table_initial_only [start] ") logger.info("------------------------------------------------------------") - who_service.full_update_fact_table() + who_service.task_admin_full_update_fact_table() # divi_service.full_update_fact_table() - ecdc_service.full_update_fact_table() - owid_service.full_update_fact_table() - rki_vaccination_service.full_update_fact_table() + ecdc_service.task_admin_full_update_fact_table() + owid_service.task_admin_full_update_fact_table() + rki_vaccination_service.task_admin_full_update_fact_table() # rki_service_bundeslaender.update_fact_table_initial_only() # rki_service_landkreise.update_fact_table_initial_only() logger.info("------------------------------------------------------------") @@ -179,19 +172,19 @@ def task_admin_update_fact_table_initial_only(self): @celery.task(bind=True) -def task_admin_update_fact_table_incremental_only(self): +def task_admin_update_fact_table(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") logger.info(" task_admin_update_fact_table_incremental_only [start] ") logger.info("------------------------------------------------------------") - who_service.service_update.update_fact_table() - # divi_service.service_update.update_fact_table() - ecdc_service.service_update.update_fact_table() - owid_service.service_update.update_fact_table() - rki_vaccination_service.service_update.update_fact_table() - # rki_service_bundeslaender.service_update.update_fact_table() - # rki_service_landkreise.service_update.update_fact_table() + who_service.task_admin_update_fact_table() + # divi_service.task_admin_update_fact_table() + ecdc_service.task_admin_update_fact_table() + owid_service.task_admin_update_fact_table() + rki_vaccination_service.task_admin_update_fact_table() + # rki_service_bundeslaender.task_admin_update_fact_table() + # rki_service_landkreise.task_admin_update_fact_table() logger.info("------------------------------------------------------------") logger.info(" task_admin_update_fact_table_incremental_only [done] ") logger.info("------------------------------------------------------------") @@ -201,19 +194,19 @@ def task_admin_update_fact_table_incremental_only(self): @celery.task(bind=True) -def task_admin_update_star_schema_initial(self): +def task_admin_full_update_star_schema(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") logger.info(" task_admin_update_star_schema_initial [start] ") logger.info("------------------------------------------------------------") - who_service.run_update_star_schema_initial() - # divi_service.run_update_star_schema_initial() - ecdc_service.run_update_star_schema_initial() - owid_service.run_update_star_schema_initial() - rki_vaccination_service.run_update_star_schema_initial() - # rki_service_bundeslaender.run_update_star_schema_initial() - # rki_service_landkreise.run_update_star_schema_initial() + who_service.task_admin_full_update_star_schema() + # divi_service.task_admin_full_update_star_schema() + ecdc_service.task_admin_full_update_star_schema() + owid_service.task_admin_full_update_star_schema() + rki_vaccination_service.task_admin_full_update_star_schema() + # rki_service_bundeslaender.task_admin_full_update_star_schema() + # rki_service_landkreise.task_admin_full_update_star_schema() logger.info("------------------------------------------------------------") logger.info(" task_admin_update_star_schema_initial [done] ") logger.info("------------------------------------------------------------") @@ -223,19 +216,19 @@ def task_admin_update_star_schema_initial(self): @celery.task(bind=True) -def task_admin_update_star_schema_incremental(self): +def task_admin_update_star_schema(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") logger.info(" task_admin_update_star_schema_incremental [start] ") logger.info("------------------------------------------------------------") - who_service.run_update_star_schema_incremental() - # divi_service.run_update_star_schema_incremental() - ecdc_service.run_update_star_schema_incremental() - owid_service.run_update_star_schema_incremental() - rki_vaccination_service.run_update_star_schema_incremental() - # rki_service_bundeslaender.run_update_star_schema_incremental() - # rki_service_landkreise.run_update_star_schema_incremental() + who_service.task_admin_update_star_schema() + # divi_service.task_admin_update_star_schema() + ecdc_service.task_admin_update_star_schema() + owid_service.task_admin_update_star_schema() + rki_vaccination_service.task_admin_update_star_schema() + # rki_service_bundeslaender.task_admin_update_star_schema() + # rki_service_landkreise.task_admin_update_star_schema() logger.info("------------------------------------------------------------") logger.info(" task_admin_update_star_schema_incremental [done] ") logger.info("------------------------------------------------------------") @@ -248,7 +241,7 @@ def task_admin_update_star_schema_incremental(self): # ---------------------------------------------------------------------------------------------------------------- -@app_admin.route('/task/alive_message') +@blueprint_app_all.route('/task/alive_message') def url_task_admin_alive_message(): app.logger.info("url_task_admin_message_start [start]") task_admin_alive_message.apply_async() @@ -257,38 +250,38 @@ def url_task_admin_alive_message(): return redirect(url_for('app_admin.url_admin_tasks')) -@app_admin.route('/task/database/dump') +@blueprint_app_all.route('/task/database/dump') def url_task_admin_database_dump(): app.logger.info("url_task_admin_database_dump [start]") - admin_service.run_admin_database_dump() + app_admin_service.run_admin_database_dump() flash("admin_service.run_admin_database_dump started") app.logger.info("url_task_admin_database_dump [done]") return redirect(url_for('app_admin.url_admin_tasks')) -@app_admin.route('/task/database/reimport') +@blueprint_app_all.route('/task/database/reimport') def url_task_admin_database_dump_reimport(): app.logger.info("url_task_admin_database_dump_reimport [start]") - admin_service.run_admin_database_dump_reimport() + app_admin_service.run_admin_database_dump_reimport() flash("admin_service.run_admin_database_import started") app.logger.info("url_task_admin_database_dump_reimport [done]") return redirect(url_for('app_admin.url_admin_tasks')) -@app_admin.route('/task/database/drop_create') +@blueprint_app_all.route('/task/database/drop_create') def url_task_admin_database_dropcreate(): app.logger.info("url_task_admin_database_dropcreate [start]") - admin_service.run_admin_database_drop_and_create() + app_admin_service.run_admin_database_drop_and_create() flash("admin_service.run_admin_database_drop started") app.logger.info("url_task_admin_database_dropcreate [done]") return redirect(url_for('app_admin.url_admin_tasks')) -@app_admin.route('/task/database/drop') +@blueprint_app_all.route('/task/database/drop') def url_task_admin_database_drop(): flash("url_task_admin_database_drop [start]") app.logger.info("admin_service.run_admin_database_drop_and_create [start]") - admin_service.run_admin_database_drop_and_create() + app_admin_service.run_admin_database_drop_and_create() flash("admin_service.run_admin_database_drop_and_create() [done]") app.logger.info("admin_service.run_admin_database_drop_and_create() [done]") if drop_and_create_data_again: @@ -306,7 +299,7 @@ def url_task_admin_database_drop(): return redirect(url_for('app_admin.url_admin_tasks')) -@app_admin.route('/task/files/all/download') +@blueprint_app_all.route('/task/files/all/download') def url_task_admin_download_all_files(): app.logger.info("url_task_admin_download_all_files [start]") who_service.download_all_files() @@ -314,13 +307,12 @@ def url_task_admin_download_all_files(): ecdc_service.download_all_files() owid_service.download_all_files() rki_vaccination_service.download_all_files() - rki_service_bundeslaender.download_all_files() - rki_service_landkreise.download_all_files() + rki_service.download_all_files() app.logger.info("url_task_admin_download_all_files [done]") return redirect(url_for('app_admin.url_admin_tasks')) -@app_admin.route('/task/files/all/import') +@blueprint_app_all.route('/task/files/all/import') def url_task_admin_import_all_files(): app.logger.info("url_task_admin_import_all_files [start]") task_admin_import_all_files.apply_async() @@ -330,17 +322,17 @@ def url_task_admin_import_all_files(): return redirect(url_for('app_admin.url_admin_tasks')) -@app_admin.route('/task/update/all/dimension_tables') +@blueprint_app_all.route('/task/update/all/dimension_tables') def url_task_admin_update_dimension_tables(): app.logger.info("url_task_admin_update_dimension_tables [start]") - task_admin_update_dimension_tables_only.apply_async() - flash(message="async task_admin_update_dimension_tables_only [start]", category="warning") - app.logger.warn("async task_admin_update_dimension_tables_only [start]") + task_admin_update_dimension_tables.apply_async() + flash(message="async task_admin_update_dimension_tables [start]", category="warning") + app.logger.warn("async task_admin_update_dimension_tables [start]") app.logger.info("url_task_admin_update_dimension_tables [done]") return redirect(url_for('app_admin.url_admin_tasks')) -@app_admin.route('/task/update/full/all/dimension_tables') +@blueprint_app_all.route('/task/full/update/all/dimension_tables') def url_task_admin_update_full_dimension_tables(): app.logger.info("url_task_admin_update_full_dimension_tables [start]") task_admin_update_full_dimension_tables.apply_async() @@ -350,52 +342,52 @@ def url_task_admin_update_full_dimension_tables(): return redirect(url_for('app_admin.url_admin_tasks')) -@app_admin.route('/task/update/full/all/fact_tables') -def url_task_admin_update_full_fact_tables(): - app.logger.info("url_task_admin_update_full_fact_tables [start]") - task_admin_update_fact_table_initial_only.apply_async() - flash(message="async task_admin_update_fact_table_initial_only [start]", category="warning") - app.logger.warn("async task_admin_update_fact_table_initial_only [start]") - app.logger.info("url_task_admin_update_full_fact_tables [done]") +@blueprint_app_all.route('/task/full/update/all/fact_tables') +def url_task_admin_full_update_fact_table(): + app.logger.info("url_task_admin_full_update_fact_table [start]") + task_admin_full_update_fact_table.apply_async() + flash(message="async task_admin_full_update_fact_table [start]", category="warning") + app.logger.warn("async task_admin_full_update_fact_table [start]") + app.logger.info("url_task_admin_full_update_fact_table [done]") return redirect(url_for('app_admin.url_admin_tasks')) -@app_admin.route('/task/update/all/fact_tables') -def url_task_admin_update_fact_tables(): - app.logger.info("url_admin_update_fact_table_incremental_only [start]") - task_admin_update_fact_table_incremental_only.apply_async() - flash(message="async task_admin_update_fact_table_incremental_only [start]", category="warning") - app.logger.warn("async task_admin_update_fact_table_incremental_only [start]") - app.logger.info("url_admin_update_fact_table_incremental_only [done]") +@blueprint_app_all.route('/task/update/all/fact_tables') +def url_task_admin_update_fact_table(): + app.logger.info("url_task_admin_update_fact_table [start]") + task_admin_update_fact_table.apply_async() + flash(message="async task_admin_update_fact_table [start]", category="warning") + app.logger.warn("async task_admin_update_fact_table [start]") + app.logger.info("url_task_admin_update_fact_table [done]") return redirect(url_for('app_admin.url_admin_tasks')) -@app_admin.route('/task/update/full/star_schema') +@blueprint_app_all.route('/task/full/update/star_schema') def url_task_admin_full_update_star_schema(): app.logger.info("url_task_admin_full_update_star_schema [start]") - task_admin_update_star_schema_initial.apply_async() - flash(message="async task_admin_update_star_schema_initial [start]", category="warning") - app.logger.warn("async task_admin_update_star_schema_initial [start]") + task_admin_full_update_star_schema.apply_async() + flash(message="async task_admin_full_update_star_schema [start]", category="warning") + app.logger.warn("async task_admin_full_update_star_schema [start]") app.logger.info("url_task_admin_full_update_star_schema [done]") return redirect(url_for('app_admin.url_admin_tasks')) -@app_admin.route('/task/update/star_schema') +@blueprint_app_all.route('/task/update/star_schema') def url_task_admin_update_star_schema(): app.logger.info("url_task_admin_update_star_schema [start]") - task_admin_update_star_schema_incremental.apply_async() - flash(message="async task_admin_update_star_schema_incremental [start]", category="warning") - app.logger.warn("async task_admin_update_star_schema_incremental [start]") + task_admin_update_star_schema.apply_async() + flash(message="async task_admin_update_star_schema [start]", category="warning") + app.logger.warn("async task_admin_update_star_schema [start]") app.logger.info("url_task_admin_update_star_schema [done]") return redirect(url_for('app_admin.url_admin_tasks')) -@app_admin.route('/task/update/do/all/initial') +@blueprint_app_all.route('/task/full/update/do/all') def url_task_admin_full_update_do_all(): - app.logger.info("url_admin_update_do_all_initial [start]") + app.logger.info("url_task_admin_full_update_do_all [start]") who_service.download_files() flash("who_service.download_files() [done]") - divi_service.download_files() + # divi_service.download_files() flash("divi_service.download_files() [done]") ecdc_service.download_all_files() flash("ecdc_service.download_all_files() [done]") @@ -403,12 +395,10 @@ def url_task_admin_full_update_do_all(): flash("owid_service.download_all_files() [done]") rki_vaccination_service.download_all_files() flash("rki_vaccination_service.download_all_files() [done]") - rki_service_bundeslaender.download_all_files() + rki_service.download_all_files() flash("rki_service_bundeslaender.download_all_files() [done]") - rki_service_landkreise.download_all_files() - flash("rki_service_landkreise.download_all_files() [done]") - task_admin_update_star_schema_initial.apply_async() - flash(message="async task_admin_update_star_schema_initial [start]", category="warning") - app.logger.warn("async task_admin_update_star_schema_initial [start]") - app.logger.info("url_admin_update_do_all_initial [done]") + task_admin_full_update_star_schema.apply_async() + flash(message="async task_admin_full_update_star_schema [start]", category="warning") + app.logger.warn("async task_admin_full_update_star_schema [start]") + app.logger.info("url_task_admin_full_update_do_all [done]") return redirect(url_for('app_admin.url_admin_tasks')) diff --git a/src/covid19/blueprints/rki/__init__.py b/src/covid19/blueprints/app_all/templates/__init__.py similarity index 100% rename from src/covid19/blueprints/rki/__init__.py rename to src/covid19/blueprints/app_all/templates/__init__.py diff --git a/src/covid19/blueprints/admin/templates/admin/admin_tasks.html b/src/covid19/blueprints/app_all/templates/app_all/app_all_tasks.html similarity index 96% rename from src/covid19/blueprints/admin/templates/admin/admin_tasks.html rename to src/covid19/blueprints/app_all/templates/app_all/app_all_tasks.html index b180b9efc9811d7d3298e0aa729f825735ce6d1f..c65e0647e5b78f984ca7aaebf7ead30d604bd428 100644 --- a/src/covid19/blueprints/admin/templates/admin/admin_tasks.html +++ b/src/covid19/blueprints/app_all/templates/app_all/app_all_tasks.html @@ -1,8 +1,8 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} - {% include 'admin/navigation/admin_navtabs.html' %} + {% include 'app_all/navigation/app_all_navtabs.html' %} <div class="container"> <div class="row"> @@ -55,7 +55,7 @@ href="{{ url_for( 'app_admin.url_task_admin_update_full_dimension_tables') }}" role="button">Admin :: update :: dimension_tables :: full</a> <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'app_admin.url_task_admin_update_full_fact_tables') }}" + href="{{ url_for( 'app_admin.url_task_admin_full_update_fact_table') }}" role="button">Admin :: update :: fact_tables :: full</a> </div> </div> @@ -72,7 +72,7 @@ href="{{ url_for( 'app_admin.url_task_admin_update_dimension_tables') }}" role="button">Admin :: update :: dimension_tables</a> <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'app_admin.url_task_admin_update_fact_tables') }}" + href="{{ url_for( 'app_admin.url_task_admin_update_fact_table') }}" role="button">Admin :: update :: fact_table</a> </div> </div> diff --git a/src/covid19/blueprints/application/templates/application/fragments/fragment_flashed_messages.html b/src/covid19/blueprints/app_all/templates/app_all/fragments/fragment_flashed_messages.html similarity index 100% rename from src/covid19/blueprints/application/templates/application/fragments/fragment_flashed_messages.html rename to src/covid19/blueprints/app_all/templates/app_all/fragments/fragment_flashed_messages.html diff --git a/src/covid19/blueprints/application/templates/application/fragments/fragment_pagination.html b/src/covid19/blueprints/app_all/templates/app_all/fragments/fragment_pagination.html similarity index 100% rename from src/covid19/blueprints/application/templates/application/fragments/fragment_pagination.html rename to src/covid19/blueprints/app_all/templates/app_all/fragments/fragment_pagination.html diff --git a/src/covid19/blueprints/application/templates/application/page_layout.html b/src/covid19/blueprints/app_all/templates/app_all/layout/page_layout.html similarity index 78% rename from src/covid19/blueprints/application/templates/application/page_layout.html rename to src/covid19/blueprints/app_all/templates/app_all/layout/page_layout.html index 61c45d80fb01d662a2569db288a8968235337af9..9df897c13b28ca911c0f78ef8b680cc65be041b7 100644 --- a/src/covid19/blueprints/application/templates/application/page_layout.html +++ b/src/covid19/blueprints/app_all/templates/app_all/layout/page_layout.html @@ -13,7 +13,7 @@ {% block navbar %} - {% include 'application/navigation/navbar.html' %} + {% include 'app_application/navigation/navbar.html' %} {% endblock %} {% block content %} @@ -23,10 +23,10 @@ <h1 class="display-3">{{page_info.title}} | <small class="display-4">{{page_info.subtitle}}</small></h1> </div> <div class="row-cols-1"> - {% include 'application/fragments/fragment_flashed_messages.html' %} + {% include 'app_application/fragments/fragment_flashed_messages.html' %} </div> <div class="row-cols-1"> - {% include 'application/navigation/navtabs.html' %} + {% include 'app_application/navigation/navtabs.html' %} </div> </div> {% endblock %} diff --git a/src/covid19/blueprints/application/templates/application/page_layout_old.html b/src/covid19/blueprints/app_all/templates/app_all/layout/page_layout_old.html similarity index 85% rename from src/covid19/blueprints/application/templates/application/page_layout_old.html rename to src/covid19/blueprints/app_all/templates/app_all/layout/page_layout_old.html index 7737bfc1ae97091ac3af7abfcfd2faec0b7f5fe8..28d8cd9205a4db400d8cf7a99bcf7b18be404297 100644 --- a/src/covid19/blueprints/application/templates/application/page_layout_old.html +++ b/src/covid19/blueprints/app_all/templates/app_all/layout/page_layout_old.html @@ -11,13 +11,13 @@ <header> <div class="container tw_padding"> - {% include 'application/fragments/fragment_navbar.html' %} + {% include 'app_application/fragments/fragment_navbar.html' %} </div> </header> <section> <div class="container tw_padding"> - {% include 'application/fragments/fragment_navtabs.html' %} + {% include 'app_application/fragments/fragment_navtabs.html' %} </div> <div class="container"> {% block navigation_navtabs %}{% endblock %} @@ -29,7 +29,7 @@ <main> <div class="container tw_padding"> - {% include 'application/fragments/fragment_flashed_messages.html' %} + {% include 'app_application/fragments/fragment_flashed_messages.html' %} </div> <div class="container tw_padding"> {% block main_container %}{% endblock %} diff --git a/src/covid19/blueprints/app_all/templates/app_all/navigation/app_all_navbar_dropdown.html b/src/covid19/blueprints/app_all/templates/app_all/navigation/app_all_navbar_dropdown.html new file mode 100644 index 0000000000000000000000000000000000000000..4155fc29baf59332b5e8e358b456b0ac5198d160 --- /dev/null +++ b/src/covid19/blueprints/app_all/templates/app_all/navigation/app_all_navbar_dropdown.html @@ -0,0 +1,32 @@ + <li class="dropdown"> + <a class="dropdown-toggle nav-link" data-toggle="dropdown" href="javascript:void(0)"> + Admin<i class="glyphicon glyphicon-chevron-down small"></i> + </a> + <ul class="dropdown-menu"> + <li> + <a class="dropdown-item" href="{{ url_for( 'app_all.url_admin_index') }}"> + Admin + </a> + </li> + <li> + <div class="dropdown-divider"></div> + </li> + {% if current_user.is_authenticated %} + <li> + <a class="dropdown-item" href="{{ url_for( 'app_all.url_admin_tasks') }}"> + Admin Tasks + </a> + </li> + {% endif %} + <li> + <a class="dropdown-item" href="{{ url_for( 'app_all.url_admin_info') }}"> + Admin info + </a> + </li> + <li> + <a class="dropdown-item" href="{{ url_for( 'app_all.url_admin_index') }}"> + Flask Admin (CRUD) + </a> + </li> + </ul> + </li> \ No newline at end of file diff --git a/src/covid19/blueprints/app_all/templates/app_all/navigation/app_all_navtabs.html b/src/covid19/blueprints/app_all/templates/app_all/navigation/app_all_navtabs.html new file mode 100644 index 0000000000000000000000000000000000000000..9b8a454a099ed798e8c2c9bf81b784d5c3032ef8 --- /dev/null +++ b/src/covid19/blueprints/app_all/templates/app_all/navigation/app_all_navtabs.html @@ -0,0 +1,21 @@ + + <div class="container"> + <div class="row"> + <div class="col"> + <nav> + <ul class="nav nav-tabs"> + {% if current_user.is_authenticated %} + <li class="nav-item"> + <a class="nav-link" + href="{{ url_for( 'app_all.url_admin_tasks') }}">Admin Tasks</a> + </li> + {% endif %} + <li class="nav-item"> + <a class="nav-link" + href="{{ url_for( 'app_all.url_admin_index') }}">Database CRUD (flask admin)</a> + </li> + </ul> + </nav> + </div> + </div> + </div> \ No newline at end of file diff --git a/src/covid19/blueprints/rki/rki_bundeslaender/__init__.py b/src/covid19/blueprints/app_application/__init__.py similarity index 100% rename from src/covid19/blueprints/rki/rki_bundeslaender/__init__.py rename to src/covid19/blueprints/app_application/__init__.py diff --git a/src/covid19/blueprints/application/application_model_transient.py b/src/covid19/blueprints/app_application/application_model_transient.py similarity index 100% rename from src/covid19/blueprints/application/application_model_transient.py rename to src/covid19/blueprints/app_application/application_model_transient.py diff --git a/src/covid19/blueprints/application/application_service.py b/src/covid19/blueprints/app_application/application_service.py similarity index 99% rename from src/covid19/blueprints/application/application_service.py rename to src/covid19/blueprints/app_application/application_service.py index 6e8f2200c3eb41088dbf9d98d18055b97fcee20f..17b5b6763fa37016cddb539bf9482fa1b0118d20 100644 --- a/src/covid19/blueprints/application/application_service.py +++ b/src/covid19/blueprints/app_application/application_service.py @@ -1,5 +1,6 @@ from database import app + class ApplicationService: def __init__(self, database, user_service): app.logger.debug("------------------------------------------------------------") diff --git a/src/covid19/blueprints/application/application_views.py b/src/covid19/blueprints/app_application/application_views.py similarity index 51% rename from src/covid19/blueprints/application/application_views.py rename to src/covid19/blueprints/app_application/application_views.py index 9aa4ef9059000cf68ffc626b886e3f2026f21344..d57c7526007b486679cba5de0dc765231b77e485 100644 --- a/src/covid19/blueprints/application/application_views.py +++ b/src/covid19/blueprints/app_application/application_views.py @@ -1,37 +1,46 @@ from flask import render_template, redirect, url_for, Blueprint from database import app -from covid19.blueprints.application.application_model_transient import ApplicationPage +from covid19.blueprints.app_application.application_model_transient import ApplicationPage + + +from covid19.blueprints.app_user.user_views import blueprint_app_user +from covid19.blueprints.app_admin.app_admin_views import blueprint_app_admin +from covid19.blueprints.app_all.all_views import blueprint_app_all -from covid19.blueprints.admin.admin_views import app_admin -from covid19.blueprints.ecdc.ecdc_views import app_ecdc -from covid19.blueprints.rki.rki_bundeslaender.rki_bundeslaender_views import app_rki_bundeslaender -from covid19.blueprints.rki.rki_landkreise.rki_landkreise_views import app_rki_landkreise -from covid19.blueprints.rki.rki_vaccination.rki_vaccination_views import app_rki_vaccination from covid19.blueprints.who.who_views import app_who from covid19.blueprints.owid.owid_views import app_owid -from covid19.blueprints.user.user_views import app_user +from covid19.blueprints.ecdc.ecdc_views import app_ecdc +from covid19.blueprints.rki_vaccination.rki_vaccination_views import app_rki_vaccination +from covid19.blueprints.rki_cases.rki_views import app_rki from covid19.blueprints.intensivregister.divi_views import app_divi -from covid19.blueprints.intensivregister_test.divi_test_views import app_divi_test -from covid19.blueprints.owid_test.owid_test_views import app_owid_test from covid19.blueprints.who_test.who_test_views import app_who_test +from covid19.blueprints.owid_test.owid_test_views import app_owid_test +from covid19.blueprints.ecdc_test.ecdc_test_views import app_ecdc_test +from covid19.blueprints.rki_cases_test.rki_test_views import app_rki_test +from covid19.blueprints.intensivregister_test.divi_test_views import app_divi_test -app_application = Blueprint('application', __name__, template_folder='templates', url_prefix='/') +blueprint_application = Blueprint('application', __name__, template_folder='templates', url_prefix='/') + +app.register_blueprint(blueprint_application, url_prefix='/') + +app.register_blueprint(blueprint_app_user, url_prefix='/app/usr') +app.register_blueprint(blueprint_app_admin, url_prefix='/app/admin') +app.register_blueprint(blueprint_app_all, url_prefix='/app/all') -app.register_blueprint(app_admin, url_prefix='/admin') -app.register_blueprint(app_application, url_prefix='/application') -app.register_blueprint(app_ecdc, url_prefix='/ecdc') -app.register_blueprint(app_rki_bundeslaender, url_prefix='/rki/bundeslaender') -app.register_blueprint(app_rki_landkreise, url_prefix='/rki/landkreise') -app.register_blueprint(app_rki_vaccination, url_prefix='/rki/vaccination') app.register_blueprint(app_who, url_prefix='/who') app.register_blueprint(app_owid, url_prefix='/owid') -app.register_blueprint(app_user, url_prefix='/usr') +app.register_blueprint(app_ecdc, url_prefix='/ecdc') +app.register_blueprint(app_rki_vaccination, url_prefix='/rki/vaccination') +app.register_blueprint(app_rki, url_prefix='/rki/cases') app.register_blueprint(app_divi, url_prefix='/divi') -app.register_blueprint(app_owid_test, url_prefix='/owid/test') app.register_blueprint(app_who_test, url_prefix='/who/test') +app.register_blueprint(app_owid_test, url_prefix='/owid/test') +app.register_blueprint(app_ecdc_test, url_prefix='/ecdc/test') +# app.register_blueprint(app_rki_vaccination_test, url_prefix='/rki/vaccination/test') +app.register_blueprint(app_rki_test, url_prefix='/rki/cases/test') app.register_blueprint(app_divi_test, url_prefix='/divi/test') @@ -43,7 +52,7 @@ app.register_blueprint(app_divi_test, url_prefix='/divi/test') def url_home(): page_info = ApplicationPage('Home', "Covid19 Data") return render_template( - 'application/page_home.html', + 'app_application/page_home.html', page_info=page_info) diff --git a/src/covid19/blueprints/app_application/templates/app_application/fragments/fragment_flashed_messages.html b/src/covid19/blueprints/app_application/templates/app_application/fragments/fragment_flashed_messages.html new file mode 100644 index 0000000000000000000000000000000000000000..b2b376229bec5e5bfa6b0a9c3e5a9beab518ec22 --- /dev/null +++ b/src/covid19/blueprints/app_application/templates/app_application/fragments/fragment_flashed_messages.html @@ -0,0 +1,38 @@ +<div class="fragment-flash-messages"> +{% with errors = get_flashed_messages(category_filter=["error"]) %} + {% if errors %} + {% for message in errors %} + <div class="alert alert-danger" role="alert"> + <span>{{ message }}</span> + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + {% endfor %} + {% endif %} +{% endwith %} +{% with errors = get_flashed_messages(category_filter=["warning"]) %} + {% if errors %} + {% for message in errors %} + <div class="alert alert-warning" role="alert"> + <span>{{ message }}</span> + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + {% endfor %} + {% endif %} +{% endwith %} +{% with messages = get_flashed_messages(category_filter=["message"]) %} + {% if messages %} + {% for message in messages %} + <div class="alert alert-success" role="alert"> + <span>{{ message }}</span> + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + {% endfor %} + {% endif %} +{% endwith %} +</div> \ No newline at end of file diff --git a/src/covid19/blueprints/app_application/templates/app_application/fragments/fragment_pagination.html b/src/covid19/blueprints/app_application/templates/app_application/fragments/fragment_pagination.html new file mode 100644 index 0000000000000000000000000000000000000000..65df8fa2b159e956b886312cff8639a6c3c37622 --- /dev/null +++ b/src/covid19/blueprints/app_application/templates/app_application/fragments/fragment_pagination.html @@ -0,0 +1,43 @@ +{% macro pagination_for_url( url_for_pagination ) -%} + <!-- previous page --> + <ul class="pagination"> + {% if page_data.has_prev %} + <li class="page-item"> + <a class="page-link" + href="{{ url_for( url_for_pagination, country_id=who_country.id, 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( url_for_pagination, country_id=who_country.id, 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( url_for_pagination, country_id=who_country.id, page=page_data.next_num) }}"> + Next + </a> + </li> + {% endif %} + </ul> +{%- endmacro %} \ No newline at end of file diff --git a/src/covid19/blueprints/application/templates/application/navigation/navbar.html b/src/covid19/blueprints/app_application/templates/app_application/navigation/navbar.html similarity index 89% rename from src/covid19/blueprints/application/templates/application/navigation/navbar.html rename to src/covid19/blueprints/app_application/templates/app_application/navigation/navbar.html index 154f4a42546c3794ce9d40108c1392be407729a2..4754814e661c534f89a1e877d7dd26d90e469184 100644 --- a/src/covid19/blueprints/application/templates/application/navigation/navbar.html +++ b/src/covid19/blueprints/app_application/templates/app_application/navigation/navbar.html @@ -16,17 +16,19 @@ {% include 'who/navigation/who_navbar_dropdown.html' %} - {% include 'divi/navigation/divi_navbar_dropdown.html' %} + {% include 'owid/navigation/owid_navbar_dropdown.html' %} {% include 'ecdc/navigation/ecdc_navbar_dropdown.html' %} - {% include 'owid/navigation/owid_navbar_dropdown.html' %} - {% include 'rki_vaccination/navigation/rki_vaccination_navbar_dropdown.html' %} + {% include 'rki/navigation/rki_navbar_dropdown.html' %} + + {% include 'divi/navigation/divi_navbar_dropdown.html' %} + {% include 'usr/navigation/usr_navbar_dropdown.html' %} - {% include 'admin/navigation/admin_navbar_dropdown.html' %} + {% include 'app_admin/navigation/app_admin_navbar_dropdown.html' %} </ul> </div> diff --git a/src/covid19/blueprints/application/templates/application/navigation/navtabs.html b/src/covid19/blueprints/app_application/templates/app_application/navigation/navtabs.html similarity index 80% rename from src/covid19/blueprints/application/templates/application/navigation/navtabs.html rename to src/covid19/blueprints/app_application/templates/app_application/navigation/navtabs.html index d4e1684086bf977db97950c000b4fc8e951ee693..142582967d7a35a3e36b0da40f9c47397ceac007 100644 --- a/src/covid19/blueprints/application/templates/application/navigation/navtabs.html +++ b/src/covid19/blueprints/app_application/templates/app_application/navigation/navtabs.html @@ -14,8 +14,8 @@ </li> <li class="nav-item"> <a class="nav-link" - href="{{ url_for( 'divi.url_divi_info') }}"> - DIVI + href="{{ url_for( 'owid.url_owid_info') }}"> + OWID </a> </li> <li class="nav-item"> @@ -26,14 +26,26 @@ </li> <li class="nav-item"> <a class="nav-link" - href="{{ url_for( 'owid.url_owid_info') }}"> - OWID + href="{{ url_for( 'rki_vaccination.url_vaccination_info') }}"> + RKI Vaccination </a> </li> <li class="nav-item"> <a class="nav-link" - href="{{ url_for( 'rki_vaccination.url_vaccination_info') }}"> - RKI Vaccination + href="{{ url_for( 'rki.url_rki_info') }}"> + RKI + </a> + </li> + <li class="nav-item"> + <a class="nav-link" + href="{{ url_for( 'divi.url_divi_info') }}"> + DIVI + </a> + </li> + <li class="nav-item"> + <a class="nav-link" + href="{{ url_for( 'app_all.url_admin_tasks') }}"> + All </a> </li> <li class="nav-item"> diff --git a/src/covid19/blueprints/application/templates/application/page_home.html b/src/covid19/blueprints/app_application/templates/app_application/page_home.html similarity index 90% rename from src/covid19/blueprints/application/templates/application/page_home.html rename to src/covid19/blueprints/app_application/templates/app_application/page_home.html index 2c42f67b0b8c021db72aca405c195dd1d48b9368..30bca9edcbfea68203177cb281e76a8c24b171b8 100644 --- a/src/covid19/blueprints/application/templates/application/page_home.html +++ b/src/covid19/blueprints/app_application/templates/app_application/page_home.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/rki/rki_bundeslaender/templates/__init__.py b/src/covid19/blueprints/app_mq/__init__.py similarity index 100% rename from src/covid19/blueprints/rki/rki_bundeslaender/templates/__init__.py rename to src/covid19/blueprints/app_mq/__init__.py diff --git a/src/covid19/blueprints/application/application_workers.py b/src/covid19/blueprints/app_mq/application_workers.py similarity index 68% rename from src/covid19/blueprints/application/application_workers.py rename to src/covid19/blueprints/app_mq/application_workers.py index 51fbe15c1772da2f67973d84e83daef67a0d0a47..3c0be69de70756d8074ac86fe59044cf885b82d9 100644 --- a/src/covid19/blueprints/application/application_workers.py +++ b/src/covid19/blueprints/app_mq/application_workers.py @@ -1,8 +1,8 @@ import sys from covid19 import app from database import create_celery, db -from covid19.blueprints.application.application_services import user_service -from covid19.blueprints.application.application_service import ApplicationService +from covid19.blueprints.app_all.all_services import app_user_service +from covid19.blueprints.app_application.application_service import ApplicationService def start_redis(application_service): @@ -13,7 +13,7 @@ def start_redis(application_service): def run_mq(my_app, my_celery): - application_service = ApplicationService(db, user_service) + application_service = ApplicationService(db, app_user_service) start_redis(application_service) application_service.prepare_run_mq() args = ['worker', '-l', 'INFO'] diff --git a/src/covid19/blueprints/rki/rki_landkreise/__init__.py b/src/covid19/blueprints/app_user/__init__.py similarity index 100% rename from src/covid19/blueprints/rki/rki_landkreise/__init__.py rename to src/covid19/blueprints/app_user/__init__.py diff --git a/src/covid19/blueprints/rki/rki_landkreise/templates/__init__.py b/src/covid19/blueprints/app_user/templates/__init__.py similarity index 100% rename from src/covid19/blueprints/rki/rki_landkreise/templates/__init__.py rename to src/covid19/blueprints/app_user/templates/__init__.py diff --git a/src/covid19/blueprints/user/templates/usr/login.html b/src/covid19/blueprints/app_user/templates/usr/login.html similarity index 98% rename from src/covid19/blueprints/user/templates/usr/login.html rename to src/covid19/blueprints/app_user/templates/usr/login.html index cba0f3dcb4429d10a5e0e6e0a395c68eb178ca69..e6573c294f6e25299711ac3735aa49822017d5f6 100644 --- a/src/covid19/blueprints/user/templates/usr/login.html +++ b/src/covid19/blueprints/app_user/templates/usr/login.html @@ -1,5 +1,4 @@ -{% extends 'application/page_layout.html' %} - +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} {% include 'usr/navigation/usr_navtabs.html' %} diff --git a/src/covid19/blueprints/user/templates/usr/navigation/usr_navbar_dropdown.html b/src/covid19/blueprints/app_user/templates/usr/navigation/usr_navbar_dropdown.html similarity index 100% rename from src/covid19/blueprints/user/templates/usr/navigation/usr_navbar_dropdown.html rename to src/covid19/blueprints/app_user/templates/usr/navigation/usr_navbar_dropdown.html diff --git a/src/covid19/blueprints/user/templates/usr/navigation/usr_navtabs.html b/src/covid19/blueprints/app_user/templates/usr/navigation/usr_navtabs.html similarity index 100% rename from src/covid19/blueprints/user/templates/usr/navigation/usr_navtabs.html rename to src/covid19/blueprints/app_user/templates/usr/navigation/usr_navtabs.html diff --git a/src/covid19/blueprints/user/templates/usr/profile.html b/src/covid19/blueprints/app_user/templates/usr/profile.html similarity index 85% rename from src/covid19/blueprints/user/templates/usr/profile.html rename to src/covid19/blueprints/app_user/templates/usr/profile.html index dbcf3c5165a09426f7200495e7a30dab070d1e52..202fa8fa04565c52f84cfaf7aca45cfd7cc666f2 100644 --- a/src/covid19/blueprints/user/templates/usr/profile.html +++ b/src/covid19/blueprints/app_user/templates/usr/profile.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/user/templates/usr/user_info.html b/src/covid19/blueprints/app_user/templates/usr/user_info.html similarity index 88% rename from src/covid19/blueprints/user/templates/usr/user_info.html rename to src/covid19/blueprints/app_user/templates/usr/user_info.html index 66af388f4d8a1701e59594d7915efdef1d187a72..6bf18411f42acd9c07f73e6be8bb53e48020e46a 100644 --- a/src/covid19/blueprints/user/templates/usr/user_info.html +++ b/src/covid19/blueprints/app_user/templates/usr/user_info.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/user/templates/usr/user_tasks.html b/src/covid19/blueprints/app_user/templates/usr/user_tasks.html similarity index 97% rename from src/covid19/blueprints/user/templates/usr/user_tasks.html rename to src/covid19/blueprints/app_user/templates/usr/user_tasks.html index 868afa3cc2450d7681c83b58815b2e5422e8dec0..55d5a8d7725d35d98420952dd7bea09e986cbf2d 100644 --- a/src/covid19/blueprints/user/templates/usr/user_tasks.html +++ b/src/covid19/blueprints/app_user/templates/usr/user_tasks.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/user/templates/usr/usr_table.html b/src/covid19/blueprints/app_user/templates/usr/usr_table.html similarity index 100% rename from src/covid19/blueprints/user/templates/usr/usr_table.html rename to src/covid19/blueprints/app_user/templates/usr/usr_table.html diff --git a/src/covid19/blueprints/user/user_model.py b/src/covid19/blueprints/app_user/user_model.py similarity index 100% rename from src/covid19/blueprints/user/user_model.py rename to src/covid19/blueprints/app_user/user_model.py diff --git a/src/covid19/blueprints/user/user_service.py b/src/covid19/blueprints/app_user/user_service.py similarity index 94% rename from src/covid19/blueprints/user/user_service.py rename to src/covid19/blueprints/app_user/user_service.py index 240d6acfafc26b01f370996a56acf7edf3ac600a..c4a503f2fc711a8b495cc0bd361e0f94794b7d95 100644 --- a/src/covid19/blueprints/user/user_service.py +++ b/src/covid19/blueprints/app_user/user_service.py @@ -1,5 +1,5 @@ from database import app -from covid19.blueprints.user.user_model import User, LoginForm +from covid19.blueprints.app_user.user_model import User, LoginForm class UserService: diff --git a/src/covid19/blueprints/user/user_views.py b/src/covid19/blueprints/app_user/user_views.py similarity index 75% rename from src/covid19/blueprints/user/user_views.py rename to src/covid19/blueprints/app_user/user_views.py index e1b15b42130a68881a3f33e2baf2dd74a45eee2e..4a9a5587ea423a152a957f9202c88c63c50b61a2 100644 --- a/src/covid19/blueprints/user/user_views.py +++ b/src/covid19/blueprints/app_user/user_views.py @@ -8,13 +8,13 @@ import flask from database import admin, db, login_manager -from covid19.blueprints.user.user_model import User, LoginForm -from covid19.blueprints.application.application_model_transient import ApplicationPage +from covid19.blueprints.app_application.application_model_transient import ApplicationPage +from covid19.blueprints.app_user.user_model import User, LoginForm -app_user = Blueprint('usr', __name__, template_folder='templates', url_prefix='/usr') +blueprint_app_user = Blueprint('usr', __name__, template_folder='templates', url_prefix='/app/usr') -admin.add_view(ModelView(User, db.session, category="usr")) +admin.add_view(ModelView(User, db.session, category="USR")) # --------------------------------------------------------------------------------------------------------------- @@ -22,7 +22,7 @@ admin.add_view(ModelView(User, db.session, category="usr")) # --------------------------------------------------------------------------------------------------------------- -@app_user.route('/login', methods=['GET']) +@blueprint_app_user.route('/login', methods=['GET']) def login_form(): page_info = ApplicationPage('usr', "Login") if current_user.is_authenticated: @@ -31,9 +31,9 @@ def login_form(): return flask.render_template('usr/login.html', form=form, page_info=page_info) -@app_user.route('/login', methods=['POST']) +@blueprint_app_user.route('/login', methods=['POST']) def login(): - page_info = ApplicationPage('usr', "Login") + page_info = ApplicationPage('USR', "Login") if current_user.is_authenticated: return redirect(url_for('usr.profile')) form = LoginForm() @@ -47,14 +47,14 @@ def login(): return flask.render_template('usr/login.html', form=form, page_info=page_info) -@app_user.route("/profile") +@blueprint_app_user.route("/profile") @login_required def profile(): - page_info = ApplicationPage('usr', "profile") + page_info = ApplicationPage('USR', "profile") return flask.render_template('usr/profile.html', page_info=page_info) -@app_user.route("/logout") +@blueprint_app_user.route("/logout") @login_required def logout(): logout_user() @@ -75,10 +75,11 @@ def unauthorized(): # Url Routes Frontend # --------------------------------------------------------------------------------------------------------------- -@app_user.route('/info/page/<int:page>') -@app_user.route('/info') + +@blueprint_app_user.route('/info/page/<int:page>') +@blueprint_app_user.route('/info') def url_user_info(page=1): - page_info = ApplicationPage('usr', "Info") + page_info = ApplicationPage('USR', "Info") try: page_data = User.get_all_as_page(page) except OperationalError: @@ -90,9 +91,9 @@ def url_user_info(page=1): page_info=page_info) -@app_user.route('/tasks') +@blueprint_app_user.route('/tasks') def url_user_tasks(): - page_info = ApplicationPage('usr', "Tasks") + page_info = ApplicationPage('USR', "Tasks") return render_template( 'usr/user_tasks.html', page_info=page_info) diff --git a/src/covid19/blueprints/application/application_services.py b/src/covid19/blueprints/application/application_services.py deleted file mode 100644 index 514cfb76ac4c8de2204a887a43ce5a115786176a..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/application/application_services.py +++ /dev/null @@ -1,26 +0,0 @@ -from database import db - -from covid19.blueprints.admin.admin_service import AdminService -from covid19.blueprints.ecdc.ecdc_service import EcdcService -from covid19.blueprints.owid.owid_service import OwidService -from covid19.blueprints.rki.rki_bundeslaender.rki_bundeslaender_service import RkiBundeslaenderService -from covid19.blueprints.rki.rki_landkreise.rki_landkreise_service import RkiLandkreiseService -from covid19.blueprints.rki.rki_vaccination.rki_vaccination_service import RkiVaccinationService -from covid19.blueprints.who.who_service import WhoService -from covid19.blueprints.user.user_service import UserService -from covid19.blueprints.intensivregister.divi_service import DiviService - -############################################################################################ -# -# Services -# -admin_service = AdminService(db) -ecdc_service = EcdcService(db) -owid_service = OwidService(db) -rki_service_bundeslaender = RkiBundeslaenderService(db) -rki_service_landkreise = RkiLandkreiseService(db) -rki_vaccination_service = RkiVaccinationService(db) -who_service = WhoService(db) -user_service = UserService(db) -divi_service = DiviService(db) -db.create_all() diff --git a/src/covid19/blueprints/ecdc/ecdc_model.py b/src/covid19/blueprints/ecdc/ecdc_model.py index 3d82d4fe9de24cb494612105f42584e6f329442d..d7127da319d1f6db0b16e6520c4b16e91a586f86 100644 --- a/src/covid19/blueprints/ecdc/ecdc_model.py +++ b/src/covid19/blueprints/ecdc/ecdc_model.py @@ -1,6 +1,6 @@ from sqlalchemy import and_ from database import db, ITEMS_PER_PAGE -from covid19.blueprints.application.application_model import ApplicationDateReported, ApplicationRegion +from covid19.blueprints.app_all.all_model import ApplicationDateReported, ApplicationRegion class EcdcDateReported(ApplicationDateReported): @@ -119,10 +119,13 @@ class EcdcCountry(db.Model): @classmethod def remove_all(cls): - for one in cls.get_all(): - db.session.delete(one) - db.session.commit() - return None + num_rows_deleted = 0 + try: + num_rows_deleted = db.session.query(cls).delete() + db.session.commit() + except Exception: + db.session.rollback() + return num_rows_deleted @classmethod def get_all_as_page(cls, page): @@ -209,10 +212,13 @@ class EcdcData(db.Model): @classmethod def remove_all(cls): - for one in cls.get_all(): - db.session.delete(one) - db.session.commit() - return None + num_rows_deleted = 0 + try: + num_rows_deleted = db.session.query(cls).delete() + db.session.commit() + except Exception: + db.session.rollback() + return num_rows_deleted @classmethod def get_all_as_page(cls, page): diff --git a/src/covid19/blueprints/ecdc/ecdc_model_import.py b/src/covid19/blueprints/ecdc/ecdc_model_import.py index 1aacdf88fb39801c2a495d37b5fee444a3965ea2..fba66476d352f72928a1e5d1c0248fcca4ee5e6d 100644 --- a/src/covid19/blueprints/ecdc/ecdc_model_import.py +++ b/src/covid19/blueprints/ecdc/ecdc_model_import.py @@ -6,9 +6,9 @@ class EcdcImport(db.Model): id = db.Column(db.Integer, primary_key=True) date_rep = db.Column(db.String(255), nullable=False) - day = db.Column(db.String(255), nullable=False) - month = db.Column(db.String(255), nullable=False) - year = db.Column(db.String(255), nullable=False) + date_rep_day = db.Column(db.String(255), nullable=False) + date_rep_month = db.Column(db.String(255), nullable=False) + date_rep_year = db.Column(db.String(255), nullable=False) cases = db.Column(db.String(255), nullable=False) deaths = db.Column(db.String(255), nullable=False) pop_data_2019 = db.Column(db.String(255), nullable=False) @@ -17,29 +17,39 @@ class EcdcImport(db.Model): country_territory_code = db.Column(db.String(255), nullable=False) continent_exp = db.Column(db.String(255), nullable=False) cumulative_number_for_14_days_of_covid19_cases_per_100000 = db.Column(db.String(255), nullable=False) + datum = db.Column(db.Date, nullable=False) + year = db.Column(db.Integer, nullable=False) + month = db.Column(db.Integer, nullable=False) + day_of_month = db.Column(db.Integer, nullable=False) + day_of_week = db.Column(db.Integer, nullable=False) + week_of_year = db.Column(db.Integer, nullable=False) + year_week = db.Column(db.String(255), nullable=False) @classmethod def remove_all(cls): - for one in cls.get_all(): - db.session.delete(one) - db.session.commit() - return None + num_rows_deleted = 0 + try: + num_rows_deleted = db.session.query(cls).delete() + db.session.commit() + except Exception: + db.session.rollback() + return num_rows_deleted @classmethod def get_all_as_page(cls, page: int): return db.session.query(cls).order_by( - cls.year, - cls.month, - cls.day, + cls.date_rep_year, + cls.date_rep_month, + cls.date_rep_day, cls.countries_and_territories ).paginate(page, per_page=ITEMS_PER_PAGE) @classmethod def get_all(cls): return db.session.query(cls).order_by( - cls.year, - cls.month, - cls.day, + cls.date_rep_year, + cls.date_rep_month, + cls.date_rep_day, cls.countries_and_territories ).all() diff --git a/src/covid19/blueprints/ecdc/ecdc_service.py b/src/covid19/blueprints/ecdc/ecdc_service.py index 6978f07b87b17763444ea02767065cb96a71664b..3bcde8a62e9990ff915b3d12e6696c41d514c8d8 100644 --- a/src/covid19/blueprints/ecdc/ecdc_service.py +++ b/src/covid19/blueprints/ecdc/ecdc_service.py @@ -1,10 +1,8 @@ -from flask import flash - from database import app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig -from covid19.blueprints.application.application_service_download import ApplicationServiceDownload +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig +from covid19.blueprints.app_all.all_service_download import ApplicationServiceDownload from covid19.blueprints.ecdc.ecdc_service_import import EcdcServiceImport -from covid19.blueprints.ecdc.ecdc_service_update import EcdcServiceUpdate +from covid19.blueprints.ecdc.ecdc_service_update import EcdcServiceUpdate, EcdcServiceUpdateFull class EcdcService: @@ -17,22 +15,17 @@ class EcdcService: self.service_download = ApplicationServiceDownload(database, self.cfg) self.service_import = EcdcServiceImport(database, self.cfg) self.service_update = EcdcServiceUpdate(database, self.cfg) + self.service_update_full = EcdcServiceUpdateFull(database, self.cfg) app.logger.debug("------------------------------------------------------------") app.logger.info(" ECDC Service [ready] ") def pretask_database_drop_create(self): - flash("ecdc_service.download started") - app.logger.info("ecdc_service.download started") self.service_download.download_file() - app.logger.info("ecdc_service.download done") - flash("ecdc_service.download done") return self def task_database_drop_create(self): - app.logger.info("ecdc_service.task_database_drop_create started") self.service_import.import_file() - self.service_update.update_star_schema_initial() - app.logger.info("ecdc_service.task_database_drop_create done") + self.service_update_full.full_update_star_schema() return self def run_download_only(self): @@ -43,48 +36,48 @@ class EcdcService: self.service_import.import_file() return self - def full_update_dimension_tables(self): - # self.service_update_full.full_update_dimension_tables() + def run_full_update_dimension_tables(self): + self.service_update_full.full_update_dimension_tables() return self - def run_update_dimension_tables_only(self): - self.service_update.update_dimension_tables_only() + def run_update_dimension_tables(self): + self.service_update.update_dimension_tables() return self - def run_update_fact_table_incremental_only(self): - self.service_update.update_fact_table_incremental_only() + def run_update_fact_table(self): + self.service_update.update_fact_table() return self - def run_update_fact_table_initial_only(self): - self.service_update.update_fact_table_initial_only() + def run_full_update_fact_table(self): + self.service_update_full.full_update_fact_table() return self - def run_update_star_schema_incremental(self): + def run_update_star_schema(self): self.service_import.import_file() - self.service_update.update_star_schema_incremental() + self.service_update.update_star_schema() return self - def run_update_star_schema_initial(self): + def task_admin_full_update_star_schema(self): self.service_import.import_file() - self.service_update.update_star_schema_initial() + self.service_update_full.full_update_star_schema() return self def download_all_files(self): self.service_download.download_file() return self - def task_import_all_files(self): + def task_admin_import_all_files(self): self.service_import.import_file() return self - def update_dimension_tables_only(self): - self.service_update.update_dimension_tables_only() + def task_admin_update_dimension_tables(self): + self.service_update.update_dimension_tables() return self def update_fact_table_initial_only(self): - self.service_update.update_fact_table_initial_only() + self.service_update_full.full_update_fact_table() return self def update_fact_table_incremental_only(self): - self.service_update.update_fact_table_incremental_only() + self.service_update.update_fact_table() return self diff --git a/src/covid19/blueprints/ecdc/ecdc_service_import.py b/src/covid19/blueprints/ecdc/ecdc_service_import.py index a56b1a666004845b33d2f5cc6d1162abe4587450..6c19fca07733dfac733b30b7b43db5813857fb13 100644 --- a/src/covid19/blueprints/ecdc/ecdc_service_import.py +++ b/src/covid19/blueprints/ecdc/ecdc_service_import.py @@ -2,7 +2,8 @@ import csv import psycopg2 from database import db, app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig +from covid19.blueprints.ecdc.ecdc_model import EcdcDateReported from covid19.blueprints.ecdc.ecdc_model_import import EcdcImport @@ -27,11 +28,13 @@ class EcdcServiceImport: with open(self.cfg.cvsfile_path, newline='') as csv_file: file_reader = csv.DictReader(csv_file, delimiter=',', quotechar='"') for row in file_reader: + date_rep = row['dateRep'] + d = EcdcDateReported.create_new_object_factory(my_date_rep=date_rep) o = EcdcImport( - date_rep=row['dateRep'], - day=row['day'], - month=row['month'], - year=row['year'], + date_rep=date_rep, + date_rep_day=row['day'], + date_rep_month=row['month'], + date_rep_year=row['year'], cases=row['cases'], deaths=row['deaths'], countries_and_territories=row['countriesAndTerritories'], @@ -40,7 +43,14 @@ class EcdcServiceImport: pop_data_2019=row['popData2019'], continent_exp=row['continentExp'], cumulative_number_for_14_days_of_covid19_cases_per_100000 - =row['Cumulative_number_for_14_days_of_COVID-19_cases_per_100000'] + =row['Cumulative_number_for_14_days_of_COVID-19_cases_per_100000'], + datum=d.datum, + year=d.year, + month=d.month, + day_of_month=d.day_of_month, + day_of_week=d.day_of_week, + week_of_year=d.day_of_week, + year_week=d.year_week ) db.session.add(o) k = k + 1 diff --git a/src/covid19/blueprints/ecdc/ecdc_service_update.py b/src/covid19/blueprints/ecdc/ecdc_service_update.py index 3ae12a06130e7d3149c3633ba75bb9bb420bc4bd..102bba879a74f6a9f53050807209a6bc2f20e13b 100644 --- a/src/covid19/blueprints/ecdc/ecdc_service_update.py +++ b/src/covid19/blueprints/ecdc/ecdc_service_update.py @@ -1,10 +1,10 @@ from database import db, app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig from covid19.blueprints.ecdc.ecdc_model_import import EcdcImport from covid19.blueprints.ecdc.ecdc_model import EcdcDateReported, EcdcContinent, EcdcCountry, EcdcData -class EcdcServiceUpdate: +class EcdcServiceUpdateBase: def __init__(self, database, config: ApplicationServiceConfig): app.logger.debug("------------------------------------------------------------") app.logger.debug(" ECDC Service Update [init]") @@ -14,6 +14,201 @@ class EcdcServiceUpdate: app.logger.debug("------------------------------------------------------------") app.logger.debug(" ECDC Service Update [ready] ") + +class EcdcServiceUpdateFull(EcdcServiceUpdateBase): + + def __full_update_date_reported(self): + app.logger.info(" __full_update_date_reported [begin]") + app.logger.info("------------------------------------------------------------") + EcdcData.remove_all() + EcdcDateReported.remove_all() + result_date_rep = EcdcImport.get_date_rep() + k = 0 + for result_item in result_date_rep: + k += 1 + my_date_rep = result_item[0] + o = EcdcDateReported.create_new_object_factory( + my_date_rep=my_date_rep + ) + db.session.add(o) + app.logger.info("| full update date_reported " + str(o) + " | " + str(k) + " rows ") + db.session.commit() + app.logger.info(" __full_update_date_reported [done]") + app.logger.info("------------------------------------------------------------") + return self + + def __full_update_continent(self): + app.logger.info(" __full_update_continent [begin]") + app.logger.info("------------------------------------------------------------") + EcdcContinent.remove_all() + result_continent = EcdcImport.get_continent() + for result_item in result_continent: + my_continent_exp = result_item[0] + o = EcdcContinent( + region=my_continent_exp + ) + app.logger.info(" full update continent | " + str(o) + " |") + db.session.add(o) + db.session.commit() + app.logger.info(" __full_update_continent [done]") + app.logger.info("------------------------------------------------------------") + return self + + def __full_update_country(self): + app.logger.info(" __full_update_country [begin]") + app.logger.info("------------------------------------------------------------") + EcdcData.remove_all() + EcdcCountry.remove_all() + self.__full_update_continent() + all_continents = EcdcContinent.get_all() + for my_continent in all_continents: + result_countries_of_continent = EcdcImport.get_countries_of_continent(my_continent) + for c in result_countries_of_continent: + o = EcdcCountry( + countries_and_territories=c[0], + pop_data_2019=c[1], + geo_id=c[2], + country_territory_code=c[3], + continent=my_continent) + app.logger.info(" full update country | " + str(o) + " |") + db.session.add(o) + db.session.commit() + app.logger.info(" __full_update_country [done]") + app.logger.info("------------------------------------------------------------") + return self + + def __get_date_reported_from_import(self): + dict_date_reported_from_import = {} + result_date_str_from_ecdc_import = EcdcImport.get_date_rep() + for item_date_str_from_ecdc_import in result_date_str_from_ecdc_import: + item_date_str_from_ecdc_import_str = str(item_date_str_from_ecdc_import[0]) + app.logger.info(item_date_str_from_ecdc_import_str) + my_date_reported_search_str = EcdcDateReported.get_date_format_from_ecdc_import_format( + date_reported_ecdc_import_fomat=item_date_str_from_ecdc_import_str + ) + app.logger.debug(my_date_reported_search_str) + my_ecdc_date_reported_obj = EcdcDateReported.find_by_date_reported( + p_date_reported=my_date_reported_search_str + ) + if my_ecdc_date_reported_obj is None: + my_ecdc_date_reported_obj = EcdcDateReported.create_new_object_factory( + my_date_rep=item_date_str_from_ecdc_import_str + ) + db.session.add(my_ecdc_date_reported_obj) + db.session.commit() + my_ecdc_date_reported_obj = EcdcDateReported.get_by_date_reported( + p_date_reported=my_date_reported_search_str + ) + dict_date_reported_from_import[item_date_str_from_ecdc_import_str] = my_ecdc_date_reported_obj + return dict_date_reported_from_import + + def __get_continent_from_import(self, ecdc_import: EcdcImport): + my_a = ecdc_import.continent_exp + ecdc_continent = EcdcContinent.find_by_region(my_a) + if ecdc_continent in None: + ecdc_continent = EcdcContinent(region=my_a) + db.session.add(ecdc_continent) + db.session.commit() + ecdc_continent = EcdcContinent.find_by_region(my_a) + return ecdc_continent + + def __get_country_from_import(self, ecdc_import: EcdcImport): + my_countries_and_territories = ecdc_import.countries_and_territories + my_geo_id = ecdc_import.geo_id + my_country_territory_code = ecdc_import.country_territory_code + my_pop_data_2019 = ecdc_import.pop_data_2019 + ecdc_country = EcdcCountry.find_by( + countries_and_territories=my_countries_and_territories, + geo_id=my_geo_id, + country_territory_code=my_country_territory_code + ) + if ecdc_country is None: + my_continent = self.__get_continent_from_import(ecdc_import) + app.logger.info(my_continent.id + " "+my_continent.region) + o = EcdcCountry( + countries_and_territories=my_countries_and_territories, + pop_data_2019=my_pop_data_2019, + geo_id=my_geo_id, + country_territory_code=my_country_territory_code, + continent=my_continent + ) + db.session.add(o) + db.session.commit() + ecdc_country = EcdcCountry.get_by( + countries_and_territories=my_countries_and_territories, + geo_id=my_geo_id, + country_territory_code=my_country_territory_code + ) + return ecdc_country + + def __full_update_data(self): + app.logger.info(" __update_data_initial [begin]") + app.logger.info("------------------------------------------------------------") + EcdcData.remove_all() + i = 0 + k = 0 + d = 0 + dict_date_reported_from_import = self.__get_date_reported_from_import() + for my_date_reported in dict_date_reported_from_import.keys(): + ecdc_datereported = dict_date_reported_from_import[my_date_reported] + d += 1 + for ecdc_import in EcdcImport.find_by_date_reported(my_date_reported): + ecdc_country = self.__get_country_from_import(ecdc_import) + my_deaths = int(ecdc_import.deaths) + my_cases = int(ecdc_import.cases) + if ecdc_import.cumulative_number_for_14_days_of_covid19_cases_per_100000 == '': + my_cumulative_number = 0.0 + else: + my_cumulative_number = \ + float(ecdc_import.cumulative_number_for_14_days_of_covid19_cases_per_100000) + o = EcdcData( + ecdc_country=ecdc_country, + ecdc_datereported=ecdc_datereported, + deaths=my_deaths, + cases=my_cases, + cumulative_number_for_14_days_of_covid19_cases_per_100000=my_cumulative_number + ) + db.session.add(o) + i += 1 + k += 1 + if d % 7 == 0: + app.logger.info(" full update EDCD ... " + str(i) + " rows for " + str(ecdc_datereported) + " ("+str(k)+")") + k = 0 + db.session.commit() + db.session.commit() + app.logger.info(" update ECDC initial ... " + str(i) + " rows total") + app.logger.info(" __update_data_initial [done]") + app.logger.info("------------------------------------------------------------") + return self + + def full_update_fact_table(self): + self.__full_update_data() + return self + + def full_update_dimension_tables(self): + EcdcData.remove_all() + EcdcCountry.remove_all() + EcdcContinent.remove_all() + EcdcDateReported.remove_all() + self.__full_update_date_reported() + self.__full_update_continent() + self.__full_update_country() + return self + + def full_update_star_schema(self): + EcdcData.remove_all() + EcdcCountry.remove_all() + EcdcContinent.remove_all() + EcdcDateReported.remove_all() + self.__full_update_date_reported() + self.__full_update_continent() + self.__full_update_country() + self.__full_update_data() + return self + + +class EcdcServiceUpdate(EcdcServiceUpdateBase): + def __update_date_reported(self): app.logger.info(" __update_date_reported [begin]") app.logger.info("------------------------------------------------------------") @@ -141,7 +336,16 @@ class EcdcServiceUpdate: dict_date_reported_from_import[item_date_str_from_ecdc_import_str] = my_ecdc_date_reported_obj return dict_date_reported_from_import - def __update_data_initial(self): + def update_dimension_tables(self): + EcdcData.remove_all() + EcdcCountry.remove_all() + EcdcContinent.remove_all() + self.__update_date_reported() + self.__update_continent() + self.__update_country() + return self + + def __update_data(self): app.logger.info(" __update_data_initial [begin]") app.logger.info("------------------------------------------------------------") EcdcData.remove_all() @@ -176,24 +380,11 @@ class EcdcServiceUpdate: app.logger.info("------------------------------------------------------------") return self - def update_dimension_tables_only(self): - EcdcData.remove_all() - EcdcCountry.remove_all() - EcdcContinent.remove_all() - self.__update_date_reported() - self.__update_continent() - self.__update_country() - return self - - def update_fact_table_incremental_only(self): - self.__update_data_initial() - return self - - def update_fact_table_initial_only(self): - self.__update_data_initial() + def update_fact_table(self): + self.__update_data() return self - def update_star_schema_incremental(self): + def update_star_schema(self): EcdcData.remove_all() EcdcCountry.remove_all() EcdcContinent.remove_all() @@ -201,16 +392,6 @@ class EcdcServiceUpdate: self.__update_date_reported() self.__update_continent() self.__update_country() - self.__update_data_initial() + self.__update_data() return self - def update_star_schema_initial(self): - EcdcData.remove_all() - EcdcCountry.remove_all() - EcdcContinent.remove_all() - EcdcDateReported.remove_all() - self.__update_date_reported() - self.__update_continent() - self.__update_country() - self.__update_data_initial() - return self diff --git a/src/covid19/blueprints/ecdc/ecdc_views.py b/src/covid19/blueprints/ecdc/ecdc_views.py index a7e011edf9d0beba1cf81fd1f0672e43532ad2d3..438851cf54bb6547e0499c3dcf86b2c2d39bb66c 100644 --- a/src/covid19/blueprints/ecdc/ecdc_views.py +++ b/src/covid19/blueprints/ecdc/ecdc_views.py @@ -4,12 +4,15 @@ from celery.utils.log import get_task_logger from flask_admin.contrib.sqla import ModelView from database import admin, db -from covid19.blueprints.application.application_services import ecdc_service -from covid19.blueprints.application.application_workers import celery +from covid19.blueprints.app_all.all_services import who_service, owid_service +from covid19.blueprints.app_all.all_services import rki_service, rki_vaccination_service +from covid19.blueprints.app_all.all_services import ecdc_service, divi_service +from covid19.blueprints.app_all.all_services import app_admin_service, app_user_service +from covid19.blueprints.app_mq.application_workers import celery from covid19.blueprints.ecdc.ecdc_model_import import EcdcImport from covid19.blueprints.ecdc.ecdc_model import EcdcDateReported, EcdcContinent, EcdcCountry, EcdcData -from covid19.blueprints.application.application_model_transient import ApplicationPage +from covid19.blueprints.app_application.application_model_transient import ApplicationPage app_ecdc = Blueprint('ecdc', __name__, template_folder='templates', url_prefix='/ecdc') @@ -176,106 +179,119 @@ def url_ecdc_country_germany(page=1): @celery.task(bind=True) -def task_ecdc_download_only(self): +def task_ecdc_import(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") - logger.info(" Received: task_ecdc_download_only [OK] ") + logger.info(" Received: task_ecdc_import [OK] ") logger.info("------------------------------------------------------------") - ecdc_service.run_download_only() + ecdc_service.run_import_only() self.update_state(state=states.SUCCESS) - result = "OK (task_ecdc_download_only)" + result = "OK (task_ecdc_import)" return result @celery.task(bind=True) -def task_ecdc_import_only(self): +def task_ecdc_full_update_dimension_tables(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") - logger.info(" Received: task_ecdc_import_only [OK] ") + logger.info(" Received: task_ecdc_full_update_dimension_tables [OK] ") logger.info("------------------------------------------------------------") - ecdc_service.run_import_only() + ecdc_service.run_full_update_dimension_tables() self.update_state(state=states.SUCCESS) - result = "OK (task_ecdc_import_only)" + result = "OK (task_ecdc_full_update_dimension_tables)" return result @celery.task(bind=True) -def task_ecdc_update_dimension_tables_only(self): +def task_ecdc_update_dimension_tables(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") - logger.info(" Received: task_ecdc_update_dimension_tables_only [OK] ") + logger.info(" Received: task_ecdc_update_dimension_tables [OK] ") logger.info("------------------------------------------------------------") - ecdc_service.run_update_dimension_tables_only() + ecdc_service.run_update_dimension_tables() self.update_state(state=states.SUCCESS) - result = "OK (task_ecdc_update_dimension_tables_only)" + result = "OK (task_ecdc_update_dimension_tables)" return result @celery.task(bind=True) -def task_ecdc_update_fact_table_incremental_only(self): +def task_ecdc_full_update_fact_table(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") - logger.info(" Received: task_ecdc_update_fact_table_incremental_only [OK] ") + logger.info(" Received: task_ecdc_full_update_fact_table [OK] ") logger.info("------------------------------------------------------------") - ecdc_service.run_update_fact_table_incremental_only() + ecdc_service.run_full_update_fact_table() self.update_state(state=states.SUCCESS) - result = "OK (task_ecdc_update_fact_table_incremental_only)" + result = "OK (task_ecdc_full_update_fact_table)" return result @celery.task(bind=True) -def task_ecdc_update_fact_table_incremental_only(self): +def task_ecdc_update_fact_table(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") - logger.info(" Received: task_ecdc_update_fact_table_incremental_only [OK] ") + logger.info(" Received: task_ecdc_update_fact_table [OK] ") logger.info("------------------------------------------------------------") - ecdc_service.run_update_fact_table_incremental_only() + ecdc_service.run_update_fact_table() self.update_state(state=states.SUCCESS) - result = "OK (task_ecdc_update_fact_table_incremental_only)" + result = "OK (task_ecdc_update_fact_table)" return result @celery.task(bind=True) -def task_ecdc_update_fact_table_initial_only(self): +def task_ecdc_full_update_fact_table(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") - logger.info(" Received: task_ecdc_update_fact_table_initial_only [OK] ") + logger.info(" Received: task_ecdc_full_update_fact_table [OK] ") logger.info("------------------------------------------------------------") - ecdc_service.run_update_fact_table_initial_only() + ecdc_service.run_full_update_fact_table() self.update_state(state=states.SUCCESS) - result = "OK (task_ecdc_update_fact_table_initial_only)" + result = "OK (task_ecdc_full_update_fact_table)" return result @celery.task(bind=True) -def task_ecdc_update_star_schema_incremental(self): +def task_ecdc_full_update_star_schema(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") - logger.info(" Received: task_ecdc_update_star_schema_incremental [OK] ") + logger.info(" Received: task_ecdc_full_update_star_schema [OK] ") logger.info("------------------------------------------------------------") - ecdc_service.run_update_star_schema_incremental() + ecdc_service.run_full_update_star_schema() self.update_state(state=states.SUCCESS) result = "OK (task_ecdc_update_star_schema_incremental)" return result @celery.task(bind=True) -def task_ecdc_update_star_schema_initial(self): +def task_ecdc_update_star_schema(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") - logger.info(" Received: task_ecdc_update_star_schema_initial [OK] ") + logger.info(" Received: task_ecdc_update_star_schema [OK] ") logger.info("------------------------------------------------------------") - ecdc_service.run_update_star_schema_initial() + ecdc_service.run_update_star_schema() self.update_state(state=states.SUCCESS) - result = "OK (task_ecdc_update_star_schema_initial)" + result = "OK (task_ecdc_update_star_schema)" + return result + + +@celery.task(bind=True) +def task_ecdc_full_update_star_schema(self): + logger = get_task_logger(__name__) + self.update_state(state=states.STARTED) + logger.info("------------------------------------------------------------") + logger.info(" Received: task_ecdc_full_update_star_schema [OK] ") + logger.info("------------------------------------------------------------") + ecdc_service.run_full_update_star_schema() + self.update_state(state=states.SUCCESS) + result = "OK (task_ecdc_full_update_star_schema)" return result # ---------------------------------------------------------------------------------------------------------------- @@ -283,59 +299,59 @@ def task_ecdc_update_star_schema_initial(self): # ---------------------------------------------------------------------------------------------------------------- -# TODO: #163 implement url_ecdc_task_update_star_schema_initial in europe_views.py -@app_ecdc.route('/task/update/star_schema/initial') -def url_ecdc_task_update_star_schema_initial(): - flash("url_ecdc_task_update_star_schema_initial started") +@app_ecdc.route('/task/download') +def url_ecdc_task_download(): + flash("url_ecdc_task_download started") ecdc_service.run_download_only() - task_ecdc_update_star_schema_initial.apply_async() return redirect(url_for('ecdc.url_ecdc_tasks')) -# TODO: #164 implement url_ecdc_task_update_starschema_incremental in europe_views.py -@app_ecdc.route('/task/update/star_schema/incremental') -def url_ecdc_task_update_starschema_incremental(): - flash("url_ecdc_task_update_starschema_incremental started") - ecdc_service.run_download_only() - task_ecdc_update_star_schema_incremental.apply_async() +@app_ecdc.route('/task/import') +def url_ecdc_task_import(): + flash("url_ecdc_task_import started") + task_ecdc_import.apply_async() return redirect(url_for('ecdc.url_ecdc_tasks')) -# TODO: #165 implement url_ecdc_task_download_only in europe_views.py -@app_ecdc.route('/task/download/only') -def url_ecdc_task_download_only(): - flash("url_ecdc_task_download_only started") - ecdc_service.run_download_only() +@app_ecdc.route('/task/update/dimension-tables') +def url_ecdc_task_update_dimensiontables(): + flash("url_ecdc_task_update_dimensiontables started") + task_ecdc_update_dimension_tables.apply_async() return redirect(url_for('ecdc.url_ecdc_tasks')) -# TODO: #166 implement url_ecdc_task_import_only in europe_views.py -@app_ecdc.route('/task/import/only') -def url_ecdc_task_import_only(): - flash("url_ecdc_task_import_only started") - task_ecdc_import_only.apply_async() +@app_ecdc.route('/task/update/full/dimension-tables') +def url_ecdc_task_full_update_dimensiontables(): + flash("url_ecdc_task_full_update_dimensiontables started") + task_ecdc_full_update_dimension_tables.apply_async() return redirect(url_for('ecdc.url_ecdc_tasks')) -# TODO: #167 implement url_ecdc_task_update_dimensiontables_only in europe_views.py -@app_ecdc.route('/task/update/dimension-tables/only') -def url_ecdc_task_update_dimensiontables_only(): - flash("url_ecdc_task_update_dimensiontables_only started") - task_ecdc_update_dimension_tables_only.apply_async() +@app_ecdc.route('/task/update/fact-table') +def url_task_ecdc_update_fact_table(): + flash("url_ecdc_task_update_facttable started") + task_ecdc_update_fact_table.apply_async() return redirect(url_for('ecdc.url_ecdc_tasks')) -# TODO: #168 implement url_ecdc_task_update_facttable_incremental_only in europe_views.py -@app_ecdc.route('/task/update/fact-table/incremental/only') -def url_ecdc_task_update_facttable_incremental_only(): - flash("url_ecdc_task_update_facttable_incremental_only started") - task_ecdc_update_fact_table_incremental_only.apply_async() +@app_ecdc.route('/task/full/update/fact-table') +def url_task_ecdc_full_update_fact_table(): + flash("url_ecdc_task_full_update_facttable started") + task_ecdc_full_update_fact_table.apply_async() return redirect(url_for('ecdc.url_ecdc_tasks')) -# TODO: #169 implement url_ecdc_task_update_facttable_initial_only in europe_views.py -@app_ecdc.route('/task/update/fact-table/initial/only') -def url_ecdc_task_update_facttable_initial_only(): - flash("url_ecdc_task_update_facttable_initial_only started") - task_ecdc_update_fact_table_initial_only.apply_async() +@app_ecdc.route('/task/update/full/star_schema') +def url_task_ecdc_full_update_star_schema(): + flash("url_ecdc_task_full_update_star_schema started") + ecdc_service.run_download_only() + task_ecdc_full_update_star_schema.apply_async() + return redirect(url_for('ecdc.url_ecdc_tasks')) + + +@app_ecdc.route('/task/update/star_schema') +def url_task_ecdc_update_star_schema(): + flash("url_ecdc_task_update_starschema started") + ecdc_service.run_download_only() + task_ecdc_update_star_schema.apply_async() return redirect(url_for('ecdc.url_ecdc_tasks')) diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/continent/ecdc_continent_all.html b/src/covid19/blueprints/ecdc/templates/ecdc/continent/ecdc_continent_all.html index e95a022bdddd3da1cff1581b7e9f84ca9b4d7a4a..c73766edde2b13de3fadf86bc8dd5e36319d695e 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/continent/ecdc_continent_all.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/continent/ecdc_continent_all.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/continent/ecdc_continent_one.html b/src/covid19/blueprints/ecdc/templates/ecdc/continent/ecdc_continent_one.html index c49b6f3b7c79933d892021f4253a65fa86a5d343..5c91944b04bbcfc9153489e5cbde32bbdb0b2cc3 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/continent/ecdc_continent_one.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/continent/ecdc_continent_one.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/country/ecdc_country_all.html b/src/covid19/blueprints/ecdc/templates/ecdc/country/ecdc_country_all.html index ca07d13d72e84eebdd525463fca52eb5e6d84a17..daad877ca84b41c5024ea4f25e00e1d7280d7bf0 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/country/ecdc_country_all.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/country/ecdc_country_all.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/country/ecdc_country_germany.html b/src/covid19/blueprints/ecdc/templates/ecdc/country/ecdc_country_germany.html index 61bbe32ecab690e73f20df2159ca8ad42b635cb3..7934f52cae81cdfe9a1f62801b3b010de812d5f8 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/country/ecdc_country_germany.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/country/ecdc_country_germany.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/country/ecdc_country_one.html b/src/covid19/blueprints/ecdc/templates/ecdc/country/ecdc_country_one.html index b15f0c5513d61b44caf5cb2672c574c20600248a..3c97a76e46085d0ac32b365a657e04d39267b99a 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/country/ecdc_country_one.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/country/ecdc_country_one.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_all.html b/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_all.html index f1ab8fb0340938fb988b2dca61e5f44e56095a0d..c0d5a0b0f944a4091a93693a7b1c6b3907b269ea 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_all.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_all.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_one.html b/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_one.html index 6c49dceca6c6e681292bf281b38f22537daeff1e..1413508e2f75506bfdd9fedd6e53f6b780b33946 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_one.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_one.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_one_cases_weekly.html b/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_one_cases_weekly.html index 7201c1dbafe755fec4755821629080bcbba706f5..19b50872c3f9bcda23687e408ba49400b7324e5d 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_one_cases_weekly.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_one_cases_weekly.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_one_deaths_weekly.html b/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_one_deaths_weekly.html index 3f64c59be09f3c0922e210cee01a3e0d9901f489..50dd2c345f1255ee1ed811febfc47a2bb9bb0d3c 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_one_deaths_weekly.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_one_deaths_weekly.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_one_notification_rate.html b/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_one_notification_rate.html index cba646907eb781a479bffecce3637ce318a1964e..59800018961f5663d868e4452f71eb811d406cd0 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_one_notification_rate.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/date_reported/ecdc_date_reported_one_notification_rate.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/ecdc_data/ecdc_data.html b/src/covid19/blueprints/ecdc/templates/ecdc/ecdc_data/ecdc_data.html index bbfcd08a419e1ed38110a8ae5cd61e7d7233c5cd..80ee2dd70557717ccb9e96fd99e8c8287ef3381c 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/ecdc_data/ecdc_data.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/ecdc_data/ecdc_data.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/ecdc_info.html b/src/covid19/blueprints/ecdc/templates/ecdc/ecdc_info.html index 4b5230adafd1562647b673efb9e877d4c4d9ffac..a24d699ac4a6a192ebec3d2409af519722ed327a 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/ecdc_info.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/ecdc_info.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/ecdc_tasks.html b/src/covid19/blueprints/ecdc/templates/ecdc/ecdc_tasks.html index 7051468374b437ddced452acad054ff76783de81..0c4d387f1ebcb493e3bb1147c4a4ff9eb748b583 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/ecdc_tasks.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/ecdc_tasks.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} @@ -6,33 +6,53 @@ <div class="container"> <div class="row"> + <div class="col"> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-danger btn-lg btn-block text-left" + href="{{ url_for( 'ecdc.url_task_ecdc_full_update_star_schema') }}" + role="button">ECDC :: Task :: update :: star_schema :: full</a> + </div> + </div> <div class="col"> <div class="btn-group-vertical" role="group" aria-label="Views"> <a class="btn btn-primary btn-lg btn-block text-left" - href="{{ url_for( 'ecdc.url_ecdc_task_update_star_schema_initial') }}" - role="button">ECDC :: Task :: update :: star_schema :: initial</a> - <a class="btn btn-primary btn-lg btn-block text-left" - href="{{ url_for( 'ecdc.url_ecdc_task_update_starschema_incremental') }}" - role="button">ECDC :: Task :: update :: star_schema :: incremental</a> + href="{{ url_for( 'ecdc.url_task_ecdc_update_star_schema') }}" + role="button">ECDC :: Task :: update :: star_schema</a> </div> </div> + </div> + <p></p> + <div class="row"> <div class="col"> <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-success btn-lg btn-block text-left" + href="{{ url_for( 'ecdc.url_ecdc_task_download') }}" + role="button">ECDC :: Task :: download</a> + <a class="btn btn-info btn-lg btn-block text-left" + href="{{ url_for( 'ecdc.url_ecdc_task_import') }}" + role="button">ECDC :: Task :: import</a> + <a class="btn btn-warning btn-lg btn-block text-left" + href="{{ url_for( 'ecdc.url_ecdc_task_full_update_dimensiontables') }}" + role="button">ECDC :: Task :: update :: dimension-tables :: full</a> <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'ecdc.url_ecdc_task_download_only') }}" - role="button">ECDC :: Task :: download :: only</a> - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'ecdc.url_ecdc_task_import_only') }}" - role="button">ECDC :: Task :: import :: only</a> - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'ecdc.url_ecdc_task_update_dimensiontables_only') }}" - role="button">ECDC :: Task :: update :: dimension-tables : only</a> - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'ecdc.url_ecdc_task_update_facttable_incremental_only') }}" - role="button">ECDC :: Task :: update :: fact-table :: only :: incremental</a> + href="{{ url_for( 'ecdc.url_task_ecdc_full_update_fact_table') }}" + role="button">ECDC :: Task :: update :: fact-table :: full</a> + </div> + </div> + <div class="col"> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-success btn-lg btn-block text-left" + href="{{ url_for( 'ecdc.url_ecdc_task_download') }}" + role="button">ECDC :: Task :: download</a> + <a class="btn btn-info btn-lg btn-block text-left" + href="{{ url_for( 'ecdc.url_ecdc_task_import') }}" + role="button">ECDC :: Task :: import</a> + <a class="btn btn-warning btn-lg btn-block text-left" + href="{{ url_for( 'ecdc.url_ecdc_task_update_dimensiontables') }}" + role="button">ECDC :: Task :: update :: dimension-tables</a> <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'ecdc.url_ecdc_task_update_facttable_initial_only') }}" - role="button">ECDC :: Task :: update :: fact-table :: only :: initial</a> + href="{{ url_for( 'ecdc.url_task_ecdc_update_fact_table') }}" + role="button">ECDC :: Task :: update :: fact-table</a> </div> </div> </div> diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/imported/ecdc_imported.html b/src/covid19/blueprints/ecdc/templates/ecdc/imported/ecdc_imported.html index 157df00e27fdcb19ef9aea0d6b5d8a2101df1ed6..f59ecbbda75554d4448838295461cafd0c9d3dd9 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/imported/ecdc_imported.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/imported/ecdc_imported.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/imported/ecdc_imported_table.html b/src/covid19/blueprints/ecdc/templates/ecdc/imported/ecdc_imported_table.html index fe122cb04e714b7b57bc64d66239c5f4a9936ff2..b6a794f336b02e2885d848eaf9d4c5a0bcefb281 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/imported/ecdc_imported_table.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/imported/ecdc_imported_table.html @@ -2,7 +2,9 @@ <thead class="table-secondary"> <tr> <th scope="col">date reported</th> - <th scope="col">year_week</th> + <th scope="col">date rep year</th> + <th scope="col">date rep month</th> + <th scope="col">date rep day</th> <th scope="col">cases weekly</th> <th scope="col">deaths weekly</th> <th scope="col">population data 2019</th> @@ -17,7 +19,9 @@ {% for o in page_data.items %} <tr> <td>{{ o.date_rep }}</td> - <td>{{ o.year }}</td> + <td>{{ o.date_rep_year }}</td> + <td>{{ o.date_rep_month }}</td> + <td>{{ o.date_rep_day }}</td> <td>{{ o.cases }}</td> <td>{{ o.deaths }}</td> <td>{{ o.pop_data_2019 }}</td> diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/navigation/ecdc_navbar_dropdown.html b/src/covid19/blueprints/ecdc/templates/ecdc/navigation/ecdc_navbar_dropdown.html index df37584a01592b9b5baa489db0c4c2bbf84e5c18..ddadab92d7e714d41f612008da3f113fb46d2a78 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/navigation/ecdc_navbar_dropdown.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/navigation/ecdc_navbar_dropdown.html @@ -43,13 +43,13 @@ <div class="dropdown-divider"></div> </li> <li> - <a class="dropdown-item" href="{{ url_for( 'ecdc.url_ecdc_task_update_star_schema_initial') }}"> - Task: ECDC :: update :: initial + <a class="dropdown-item" href="{{ url_for( 'ecdc.url_task_ecdc_full_update_star_schema') }}"> + Task: ECDC :: update :: full </a> </li> <li> - <a class="dropdown-item" href="{{ url_for( 'ecdc.url_ecdc_task_update_starschema_incremental') }}"> - Task: ECDC :: update :: incremental + <a class="dropdown-item" href="{{ url_for( 'ecdc.url_task_ecdc_update_star_schema') }}"> + Task: ECDC :: update </a> </li> <li> diff --git a/src/covid19/blueprints/ecdc/templates/ecdc/navigation/ecdc_navtabs.html b/src/covid19/blueprints/ecdc/templates/ecdc/navigation/ecdc_navtabs.html index 20f4f779fce7ff71a241e33f2b70b6338d06664e..6d31235a5bc96137ac1b4ded252d85f86273ff2b 100644 --- a/src/covid19/blueprints/ecdc/templates/ecdc/navigation/ecdc_navtabs.html +++ b/src/covid19/blueprints/ecdc/templates/ecdc/navigation/ecdc_navtabs.html @@ -11,12 +11,14 @@ <a class="nav-link" href="{{ url_for( 'ecdc.url_ecdc_tasks') }}">ECDC tasks</a> </li> + <li class="nav-item"> + <a class="nav-link" + href="{{ url_for( 'ecdc.url_ecdc_data_imported') }}">ECDC imported</a> + </li> {% endif %} <li class="nav-item"> <a class="nav-link" - href="{{ url_for( 'ecdc.url_ecdc_date_reported_all') }}"> - ECDC date_reported - </a> + href="{{ url_for( 'ecdc.url_ecdc_date_reported_all') }}">ECDC date_reported</a> </li> <li class="nav-item"> <a class="nav-link" @@ -30,12 +32,6 @@ <a class="nav-link" href="{{ url_for( 'ecdc.url_ecdc_country_all') }}">ECDC country</a> </li> - {% if current_user.is_authenticated %} - <li class="nav-item"> - <a class="nav-link" - href="{{ url_for( 'ecdc.url_ecdc_data_imported') }}">ECDC imported</a> - </li> - {% endif %} </ul> </nav> </div> diff --git a/src/covid19/blueprints/rki/rki_vaccination/__init__.py b/src/covid19/blueprints/ecdc_test/__init__.py similarity index 100% rename from src/covid19/blueprints/rki/rki_vaccination/__init__.py rename to src/covid19/blueprints/ecdc_test/__init__.py diff --git a/src/covid19/blueprints/ecdc_test/ecdc_test_service.py b/src/covid19/blueprints/ecdc_test/ecdc_test_service.py new file mode 100644 index 0000000000000000000000000000000000000000..987c724ba5acf544ef8fd604638041c29046118b --- /dev/null +++ b/src/covid19/blueprints/ecdc_test/ecdc_test_service.py @@ -0,0 +1,44 @@ +from database import app +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig +from covid19.blueprints.ecdc.ecdc_model import EcdcDateReported, EcdcData + + +class EcdcTestService: + def __init__(self, database, ecdc_service): + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" ECDC Test Service [init]") + app.logger.debug("------------------------------------------------------------") + self.__database = database + self.__ecdc_service = ecdc_service + self.cfg = ApplicationServiceConfig.create_config_for_ecdc() + app.logger.debug("------------------------------------------------------------") + app.logger.info(" ECDC Test Service [ready]") + + def delete_last_day(self): + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" EcdcTestService.delete_last_day() [START]") + app.logger.debug("------------------------------------------------------------") + joungest_datum_str = EcdcData.get_joungest_datum() + joungest_datum = EcdcDateReported.find_by_date_reported(joungest_datum_str) + app.logger.info("joungest_datum:") + app.logger.info(joungest_datum) + app.logger.info("WhoData.get_data_for_one_day(joungest_datum):") + i = 0 + for data in EcdcData.get_data_for_one_day(joungest_datum): + i += 1 + line = " | " + str(i) + " | " + str(data.date_reported) + " | " + data.country.country + " | to be deleted" + app.logger.info(line) + app.logger.info("WhoData.delete_data_for_one_day(joungest_datum)") + EcdcData.delete_data_for_one_day(joungest_datum) + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" EcdcTestService.delete_last_day() [DONE]") + app.logger.debug("------------------------------------------------------------") + + def run_update_star_schema_incremental(self): + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" EcdcTestService.run_update_star_schema_incremental() [START]") + app.logger.debug("------------------------------------------------------------") + self.__ecdc_service.run_update_star_schema_incremental() + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" EcdcTestService.run_update_star_schema_incremental() [DONE]") + app.logger.debug("------------------------------------------------------------") diff --git a/src/covid19/blueprints/ecdc_test/ecdc_test_views.py b/src/covid19/blueprints/ecdc_test/ecdc_test_views.py new file mode 100644 index 0000000000000000000000000000000000000000..dd6bac1cba18ebf2696441347d5cba61c04c8e45 --- /dev/null +++ b/src/covid19/blueprints/ecdc_test/ecdc_test_views.py @@ -0,0 +1,143 @@ +from flask import render_template, redirect, url_for, flash, Blueprint +from celery import states +from celery.utils.log import get_task_logger +from flask_login import login_required + +from database import app, db +from covid19.blueprints.app_all.all_services import who_service, owid_service +from covid19.blueprints.app_all.all_services import rki_service, rki_vaccination_service +from covid19.blueprints.app_all.all_services import ecdc_service, divi_service +from covid19.blueprints.app_all.all_services import app_admin_service, app_user_service +from covid19.blueprints.app_mq.application_workers import celery +from covid19.blueprints.app_application.application_model_transient import ApplicationPage + +from covid19.blueprints.ecdc.ecdc_model_import import EcdcImport +from covid19.blueprints.ecdc_test.ecdc_test_service import EcdcTestService + +ecdc_test_service = EcdcTestService(db, ecdc_service) + +app_ecdc_test = Blueprint('ecdc_test', __name__, template_folder='templates', url_prefix='/ecdc/test') + +# --------------------------------------------------------------------------------------------------------------- +# Url Routes Frontend +# --------------------------------------------------------------------------------------------------------------- + + +@app_ecdc_test.route('/tests') +@login_required +def url_ecdc_test_tests(): + page_info = ApplicationPage('ECDC', "Tests") + return render_template( + 'ecdc_test/ecdc_tests.html', + page_info=page_info) + + +@app_ecdc_test.route('/ecdc_import/countries') +@login_required +def url_ecdc_test_ecdc_import_countries(): + flash("url_ecdc_test_ecdc_import_countries - START: EcdcImport.countries()") + app.logger.info("url_ecdc_test_ecdc_import_countries - START: EcdcImport.countries()") + i = 0 + for c in EcdcImport.countries(): + i += 1 + line = " | " + str(i) + " | " + c.countries.country_code + " | " + c.countries.country + " | " + c.countries.ecdc_region + " | " + app.logger.info(line) + flash("url_ecdc_test_ecdc_import_countries - DONE: EcdcImport.countries()") + return redirect(url_for('ecdc_test.url_ecdc_test_tests')) + + +@app_ecdc_test.route('/ecdc_import/get_new_dates_as_array') +@login_required +def url_ecdc_test_ecdc_import_get_new_dates_as_array(): + app.logger.info("url_ecdc_mytest - DONE: EcdcImport.countries()") + flash("url_ecdc_mytest - START: EcdcImport.get_new_dates_as_array()") + app.logger.info("url_ecdc_mytest - START: EcdcImport.get_new_dates_as_array()") + app.logger.info("EcdcImport.get_new_dates_as_array():") + i = 0 + for date_reported in EcdcImport.get_new_dates_as_array(): + i += 1 + line = " | " + str(i) + " | " + date_reported + " | " + app.logger.info(line) + flash("url_ecdc_mytest - DONE: EcdcImport.get_new_dates_as_array()") + app.logger.info("url_ecdc_mytest - DONE: EcdcImport.get_new_dates_as_array()") + return redirect(url_for('ecdc_test.url_ecdc_test_tests')) + + +@app_ecdc_test.route('/ecdc_data/get_datum_of_all_ecdc_data') +@login_required +def url_ecdc_test_ecdc_data_get_datum_of_all_ecdc_data(): + app.logger.info("url_ecdc_test_ecdc_data_get_datum_of_all_ecdc_data - DONE: EcdcData.get_datum_of_all_ecdc_data()") + flash("url_ecdc_test_ecdc_data_get_datum_of_all_ecdc_data - START: EcdcData.get_datum_of_all_ecdc_data()") + for datum in EcdcImport.get_datum_of_all_data(): + app.logger.info(str(datum)) + flash("url_ecdc_test_ecdc_data_get_datum_of_all_ecdc_data - DONE: EcdcData.get_datum_of_all_ecdc_data()") + app.logger.info("url_ecdc_test_ecdc_data_get_datum_of_all_ecdc_data - DONE: EcdcData.get_datum_of_all_ecdc_data()") + return redirect(url_for('ecdc_test.url_ecdc_test_tests')) + + +@app_ecdc_test.route('/ecdc_data/get_datum_of_all_ecdc_import') +@login_required +def url_ecdc_test_ecdc_data_get_datum_of_all_ecdc_import(): + app.logger.info("url_ecdc_test_ecdc_data_get_datum_of_all_ecdc_import - START: EcdcImport.get_datum_of_all_ecdc_import()") + flash("url_ecdc_test_ecdc_data_get_datum_of_all_ecdc_import - START: EcdcImport.get_datum_of_all_ecdc_import()") + for datum in EcdcImport.get_datum_of_all_ecdc_import(): + app.logger.info(str(datum)) + flash("url_ecdc_test_ecdc_data_get_datum_of_all_ecdc_import - DONE: EcdcImport.get_datum_of_all_ecdc_import()") + app.logger.info("url_ecdc_test_ecdc_data_get_datum_of_all_ecdc_import - DONE: EcdcImport.get_datum_of_all_ecdc_import()") + return redirect(url_for('ecdc_test.url_ecdc_test_tests')) + + +@app_ecdc_test.route('/ecdc_service/service_update/ecdc_import_get_new_dates_as_array') +@login_required +def url_ecdc_test_ecdc_service_ecdc_import_get_new_dates_as_array(): + app.logger.info("url_ecdc_test_ecdc_import_get_new_dates_as_array - START: EcdcService.ecdc_import_get_new_dates_as_array()") + flash("url_ecdc_test_ecdc_import_get_new_dates_as_array - START: EcdcService.ecdc_import_get_new_dates_as_array()") + for datum in ecdc_service.service_update.ecdc_import_get_new_dates_as_array(): + app.logger.info(str(datum)) + flash("url_ecdc_test_ecdc_import_get_new_dates_as_array - DONE: EcdcService.ecdc_import_get_new_dates_as_array()") + app.logger.info("url_ecdc_test_ecdc_import_get_new_dates_as_array - DONE: EcdcService.ecdc_import_get_new_dates_as_array()") + return redirect(url_for('ecdc_test.url_ecdc_test_tests')) + + +@app_ecdc_test.route('/ecdc_test_service/delete_last_day') +@login_required +def url_ecdc_test_ecdc_test_service_delete_last_days_data(): + app.logger.info("url_ecdc_test_ecdc_test_service_delete_last_days_data - START: EcdcService.ecdc_import_get_new_dates_as_array()") + flash("url_ecdc_test_ecdc_test_service_delete_last_days_data - START: EcdcService.ecdc_import_get_new_dates_as_array()") + ecdc_test_service.delete_last_day() + flash("url_ecdc_test_ecdc_test_service_delete_last_days_data - DONE: EcdcService.ecdc_import_get_new_dates_as_array()") + app.logger.info("url_ecdc_test_ecdc_test_service_delete_last_days_data - DONE: EcdcService.ecdc_import_get_new_dates_as_array()") + return redirect(url_for('ecdc_test.url_ecdc_test_tests')) + + +# ---------------------------------------------------------------------------------------------------------------- +# Celery TASKS +# ---------------------------------------------------------------------------------------------------------------- + + +@celery.task(bind=True) +def task_ecdc_test_update_star_schema_incremental(self): + logger = get_task_logger(__name__) + self.update_state(state=states.STARTED) + logger.info("------------------------------------------------------------") + logger.info(" Received: task_ecdc_test_update_star_schema_incremental [OK] ") + logger.info("------------------------------------------------------------") + ecdc_test_service.run_update_star_schema_incremental() + self.update_state(state=states.SUCCESS) + result = "OK (task_ecdc_test_update_star_schema_incremental)" + return result + +# ---------------------------------------------------------------------------------------------------------------- +# URL Routes for Celery TASKS +# ---------------------------------------------------------------------------------------------------------------- + + +@app_ecdc_test.route('/task/update_star_schema_incremental') +@login_required +def url_task_ecdc_test_update_star_schema_incremental(): + app.logger.info("url_task_ecdc_test_update_star_schema_incremental - START: task_ecdc_test_update_star_schema_incremental()") + flash("url_task_ecdc_test_update_star_schema_incremental - START: task_ecdc_test_update_star_schema_incremental()") + task_ecdc_test_update_star_schema_incremental.apply_async() + flash("url_task_ecdc_test_update_star_schema_incremental - DONE: task_ecdc_test_update_star_schema_incremental()") + app.logger.info("url_task_ecdc_test_update_star_schema_incremental - DONE: task_ecdc_test_update_star_schema_incremental()") + return redirect(url_for('ecdc_test.url_ecdc_test_tests')) diff --git a/src/covid19/blueprints/rki/rki_vaccination/templates/__init__.py b/src/covid19/blueprints/ecdc_test/templates/__init__.py similarity index 100% rename from src/covid19/blueprints/rki/rki_vaccination/templates/__init__.py rename to src/covid19/blueprints/ecdc_test/templates/__init__.py diff --git a/src/covid19/blueprints/ecdc_test/templates/ecdc_test/ecdc_tests.html b/src/covid19/blueprints/ecdc_test/templates/ecdc_test/ecdc_tests.html new file mode 100644 index 0000000000000000000000000000000000000000..a8a283e6ef653a25cc264c33c566610300928c09 --- /dev/null +++ b/src/covid19/blueprints/ecdc_test/templates/ecdc_test/ecdc_tests.html @@ -0,0 +1,59 @@ +{% extends 'app_all/layout/page_layout.html' %} + +{% block content %} + {{super()}} + {% include 'ecdc/navigation/ecdc_navtabs.html' %} + + <div class="container"> + <div class="row"> + <div class="col"> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'ecdc.url_ecdc_tasks') }}" + role="button">ECDC :: Tasks</a> + </div> + </div> + </div> + <p></p> + <div class="row"> + <div class="col"> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-danger btn-lg btn-block text-left" + href="{{ url_for( 'ecdc_test.url_ecdc_test_ecdc_import_countries') }}" + role="button">url_who_test_who_import_countries</a> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'ecdc_test.url_ecdc_test_ecdc_import_get_new_dates_as_array') }}" + role="button">url_who_test_who_import_get_new_dates_as_array</a> + <a class="btn btn-danger btn-lg btn-block text-left" + href="{{ url_for( 'ecdc_test.url_ecdc_test_ecdc_data_get_datum_of_all_ecdc_data') }}" + role="button">url_who_test_who_data_get_datum_of_all_who_data</a> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'ecdc_test.url_ecdc_test_ecdc_data_get_datum_of_all_ecdc_import') }}" + role="button">url_who_test_who_data_get_datum_of_all_who_import</a> + <a class="btn btn-danger btn-lg btn-block text-left" + href="{{ url_for( 'ecdc_test.url_ecdc_test_ecdc_service_ecdc_import_get_new_dates_as_array') }}" + role="button">url_who_test_who_service_who_import_get_new_dates_as_array</a> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'ecdc_test.url_ecdc_test_ecdc_test_service_delete_last_days_data') }}" + role="button">url_who_test_who_test_service_delete_last_days_data</a> + </div> + </div> + <div class="col"> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'ecdc_test.url_task_ecdc_test_update_star_schema_incremental') }}" + role="button">url_task_who_test_update_star_schema_incremental</a> + </div> + </div> + </div> + </div> +{% endblock %} + + + +{% block footer_container %} + +{% endblock %} + + + diff --git a/src/covid19/blueprints/intensivregister/divi_model.py b/src/covid19/blueprints/intensivregister/divi_model.py index 6738dc4a947a79a17061a5cdbc4e3ba787d45b52..f1b6eadfeefc404d263ef8ab858c14cb3f0cd88a 100644 --- a/src/covid19/blueprints/intensivregister/divi_model.py +++ b/src/covid19/blueprints/intensivregister/divi_model.py @@ -2,7 +2,7 @@ from sqlalchemy import and_ from datetime import date from sqlalchemy.orm import joinedload, subqueryload from database import db, ITEMS_PER_PAGE -from covid19.blueprints.application.application_model import ApplicationDateReported, ApplicationRegion +from covid19.blueprints.app_all.all_model import ApplicationDateReported, ApplicationRegion class DiviDateReported(ApplicationDateReported): diff --git a/src/covid19/blueprints/intensivregister/divi_service.py b/src/covid19/blueprints/intensivregister/divi_service.py index 7b57959322e84681885c4f479c50463abb37b8f8..52f330a096960554c3598710e6caada1ce78e15b 100644 --- a/src/covid19/blueprints/intensivregister/divi_service.py +++ b/src/covid19/blueprints/intensivregister/divi_service.py @@ -1,8 +1,8 @@ from flask import flash from database import app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig -from covid19.blueprints.application.application_service_download import ApplicationServiceDownload +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig +from covid19.blueprints.app_all.all_service_download import ApplicationServiceDownload from covid19.blueprints.intensivregister.divi_service_import import DiviServiceImport from covid19.blueprints.intensivregister.divi_service_update import DiviServiceUpdate @@ -69,7 +69,7 @@ class DiviService: self.service_update.update_star_schema_incremental() return self - def run_update_star_schema_initial(self): + def task_admin_full_update_star_schema(self): self.service_import.import_file() self.service_update.update_star_schema_initial() return self diff --git a/src/covid19/blueprints/intensivregister/divi_service_import.py b/src/covid19/blueprints/intensivregister/divi_service_import.py index 40fd7cbbeb516f18bc48d0eee6c6be7775b17631..efa299a06b890a471c21579e750d51e420881656 100644 --- a/src/covid19/blueprints/intensivregister/divi_service_import.py +++ b/src/covid19/blueprints/intensivregister/divi_service_import.py @@ -1,9 +1,10 @@ import sys import csv import psycopg2 + from database import db, app +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig from covid19.blueprints.intensivregister.divi_model_import import DiviImport -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig class DiviServiceImport: diff --git a/src/covid19/blueprints/intensivregister/divi_service_update.py b/src/covid19/blueprints/intensivregister/divi_service_update.py index 153467070ec83e78aec60dfe66aa68f6c336c3f6..2194c9e571c8cd234b8d8fe074e653e61ee4875b 100644 --- a/src/covid19/blueprints/intensivregister/divi_service_update.py +++ b/src/covid19/blueprints/intensivregister/divi_service_update.py @@ -1,9 +1,11 @@ from database import db, app +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig + from covid19.blueprints.intensivregister.divi_model import DiviRegion, DiviDateReported, DiviCountry, DiviData from covid19.blueprints.intensivregister.divi_model_import import DiviImport -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig +# TODO: Split into two Services class DiviServiceUpdate: def __init__(self, database, config: ApplicationServiceConfig): app.logger.debug("------------------------------------------------------------") diff --git a/src/covid19/blueprints/intensivregister/divi_views.py b/src/covid19/blueprints/intensivregister/divi_views.py index c39e2489bedad9ad736701d313d6de3a1fa143ce..4eb79a7624baf72bd59cf1445a8d3f40c005c245 100644 --- a/src/covid19/blueprints/intensivregister/divi_views.py +++ b/src/covid19/blueprints/intensivregister/divi_views.py @@ -6,12 +6,15 @@ from flask_admin.contrib.sqla import ModelView from flask_login import login_required from database import app, admin, db -from covid19.blueprints.application.application_services import divi_service -from covid19.blueprints.application.application_workers import celery +from covid19.blueprints.app_all.all_services import who_service, owid_service +from covid19.blueprints.app_all.all_services import rki_service, rki_vaccination_service +from covid19.blueprints.app_all.all_services import ecdc_service, divi_service +from covid19.blueprints.app_all.all_services import app_admin_service, app_user_service +from covid19.blueprints.app_mq.application_workers import celery +from covid19.blueprints.app_application.application_model_transient import ApplicationPage from covid19.blueprints.intensivregister.divi_model import DiviRegion, DiviDateReported, DiviCountry, DiviData from covid19.blueprints.intensivregister.divi_model_import import DiviImport -from covid19.blueprints.application.application_model_transient import ApplicationPage app_divi = Blueprint('divi', __name__, template_folder='templates', url_prefix='/divi') diff --git a/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_all.html b/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_all.html index 4cf33bb185d154c1912746e73b3d3dd5b880bbf4..11d174f35eb3aa9639f086539f17f18af3e5cc1a 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_all.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_all.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_germany.html b/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_germany.html index 2ed20c2cf902a2e4a1252300bcecb4f481a9acf1..418cd0d22c1afdb743847dd916cd89daca84c4b6 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_germany.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_germany.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one.html b/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one.html index 2df755993825bf9a6c4b13a08c7674853cc30f82..24707cc6c37dcb71791c17e050cdc20296a59b44 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one_cases_cumulative.html b/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one_cases_cumulative.html index 52ffbeb0c25c13c099f271ca51389692313c6877..d00d2b42fd965150fd2431444cfd58c102d92c8a 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one_cases_cumulative.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one_cases_cumulative.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one_cases_new.html b/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one_cases_new.html index 2de058934da0aa6fc2d54113b717846e5b5e64c8..c69425fc881528eb8c7e3abb0214fca209736401 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one_cases_new.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one_cases_new.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one_deaths_cumulative.html b/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one_deaths_cumulative.html index 204f21353713a9690cb208f2f752d5970be3dc78..79a06e8d2aed8e6996fa183aebcf67db51b125fd 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one_deaths_cumulative.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one_deaths_cumulative.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one_deaths_new.html b/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one_deaths_new.html index 843cbfeca23f687f597e510119169a0581f4f715..10a6dfc36d48b27fefe90867cde7a7b62d448614 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one_deaths_new.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/country/divi_country_one_deaths_new.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_all.html b/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_all.html index fb27e4642fdff7cbfd7b48c4ea2c77a7e9be6ea2..8043263de87d2e9c10a0dec6b8aec8c6578d96fe 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_all.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_all.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one.html b/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one.html index ca967bdab4944dd98620e121fa660bf9fe80a9f4..d0ff5b66db16cf425c20b52fcbc8afb60a69b6ca 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one_cases_cumulative.html b/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one_cases_cumulative.html index a5a52426a8edf9de5852035f16b5fb314e19efbc..d3f18c90e66016c8e590ab6cd2adf08efb519373 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one_cases_cumulative.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one_cases_cumulative.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one_cases_new.html b/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one_cases_new.html index ca967bdab4944dd98620e121fa660bf9fe80a9f4..d0ff5b66db16cf425c20b52fcbc8afb60a69b6ca 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one_cases_new.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one_cases_new.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one_deaths_cumulative.html b/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one_deaths_cumulative.html index f296b13745eb259a179f12d6ee1954bd1d07f8a5..661ddff5a7993873b9d25149bf362567a2fd48bd 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one_deaths_cumulative.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one_deaths_cumulative.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one_deaths_new.html b/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one_deaths_new.html index 3e5b23329ef96799b90df030454ceb51de106d67..5bebe730368c524eaf6b80bc39969c9c85618f65 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one_deaths_new.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/date_reported/divi_date_reported_one_deaths_new.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/divi_imported.html b/src/covid19/blueprints/intensivregister/templates/divi/divi_imported.html index 8dbdc54648f6570b88c512297ab33bacdb1ef30d..631dafa31cf4b66c9ac2040573c1eb20dd1c3e90 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/divi_imported.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/divi_imported.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/divi_info.html b/src/covid19/blueprints/intensivregister/templates/divi/divi_info.html index a4dc0e5c8cbf545d3603987da136649c69067dde..c5fd34d550495ba59b5379f1836e28ce46b72b39 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/divi_info.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/divi_info.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/divi_tasks.html b/src/covid19/blueprints/intensivregister/templates/divi/divi_tasks.html index de4351b7d7a2612c4a40317485e8287e40dbfc7f..095ce8eafa49fc537191cd6a274dc0c4f7e525fc 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/divi_tasks.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/divi_tasks.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/region/divi_region_all.html b/src/covid19/blueprints/intensivregister/templates/divi/region/divi_region_all.html index 54bb8dc1109ab75359be94ffabd164d3443ba802..d8c915355c78c41fb45aea89581b849858b6d35d 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/region/divi_region_all.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/region/divi_region_all.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister/templates/divi/region/divi_region_one.html b/src/covid19/blueprints/intensivregister/templates/divi/region/divi_region_one.html index 1847e5d5cbe26faeebf98ca3571096a6a6128674..652fdf4adda2ca5e4c6b5298929e9e7d1f20ef98 100644 --- a/src/covid19/blueprints/intensivregister/templates/divi/region/divi_region_one.html +++ b/src/covid19/blueprints/intensivregister/templates/divi/region/divi_region_one.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/intensivregister_test/divi_test_service.py b/src/covid19/blueprints/intensivregister_test/divi_test_service.py index ec3297ece1dec62515ea2d873c0fcb524d1b695d..83cf4a573b3be7fb9b190ea3fcf19b1d1c1495dc 100644 --- a/src/covid19/blueprints/intensivregister_test/divi_test_service.py +++ b/src/covid19/blueprints/intensivregister_test/divi_test_service.py @@ -1,5 +1,5 @@ from database import app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig from covid19.blueprints.intensivregister.divi_model import DiviDateReported, DiviData diff --git a/src/covid19/blueprints/intensivregister_test/divi_test_views.py b/src/covid19/blueprints/intensivregister_test/divi_test_views.py index ee72ad804dd2da984201017f84417cba447af2c4..277e7ac76bd2435fc226ca2e7c1cdfd3af9e0994 100644 --- a/src/covid19/blueprints/intensivregister_test/divi_test_views.py +++ b/src/covid19/blueprints/intensivregister_test/divi_test_views.py @@ -4,12 +4,15 @@ from celery.utils.log import get_task_logger from flask_login import login_required from database import app, db -from covid19.blueprints.application.application_services import divi_service -from covid19.blueprints.application.application_workers import celery +from covid19.blueprints.app_all.all_services import who_service, owid_service +from covid19.blueprints.app_all.all_services import rki_service, rki_vaccination_service +from covid19.blueprints.app_all.all_services import ecdc_service, divi_service +from covid19.blueprints.app_all.all_services import app_admin_service, app_user_service +from covid19.blueprints.app_mq.application_workers import celery +from covid19.blueprints.app_application.application_model_transient import ApplicationPage from covid19.blueprints.intensivregister.divi_model_import import DiviImport from covid19.blueprints.intensivregister.divi_model import DiviData -from covid19.blueprints.application.application_model_transient import ApplicationPage from covid19.blueprints.intensivregister_test.divi_test_service import DiviTestService diff --git a/src/covid19/blueprints/intensivregister_test/templates/divi_test/divi_tests.html b/src/covid19/blueprints/intensivregister_test/templates/divi_test/divi_tests.html index cdbd748e597af8d0199bb4202a9d1562d10c7766..8768b5ec07983fd8103a04260c62e5d4fb38a83b 100644 --- a/src/covid19/blueprints/intensivregister_test/templates/divi_test/divi_tests.html +++ b/src/covid19/blueprints/intensivregister_test/templates/divi_test/divi_tests.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/owid/owid_model.py b/src/covid19/blueprints/owid/owid_model.py index 92c10d19bfe24554aecfdf7d1e5ced930fa19737..591028bc73d48e650dfd6bf9269375f1dbc69869 100644 --- a/src/covid19/blueprints/owid/owid_model.py +++ b/src/covid19/blueprints/owid/owid_model.py @@ -3,7 +3,7 @@ from datetime import date from sqlalchemy.orm import joinedload, subqueryload from database import db, ITEMS_PER_PAGE -from covid19.blueprints.application.application_model import ApplicationDateReported, ApplicationRegion +from covid19.blueprints.app_all.all_model import ApplicationDateReported, ApplicationRegion class OwidDateReported(ApplicationDateReported): @@ -13,6 +13,21 @@ class OwidDateReported(ApplicationDateReported): db.UniqueConstraint('date_reported_import_str', 'datum', name="uix_owid_datereported"), ) + def __str__(self): + result = "" + if self.day_of_month < 10: + result += "0" + str(self.day_of_month) + else: + result += "" + str(self.day_of_month) + if self.month < 10: + result += ".0" + str(self.month) + else: + result += "." + str(self.month) + result += "." + str(self.year) + # result += " processed: " + str(self.processed) + return result + + id = db.Column(db.Integer, primary_key=True) date_reported_import_str = db.Column(db.String(255), nullable=False, unique=True) year_week = db.Column(db.String(255), nullable=False) @@ -22,16 +37,45 @@ class OwidDateReported(ApplicationDateReported): day_of_month = db.Column(db.Integer, nullable=False) day_of_week = db.Column(db.Integer, nullable=False) week_of_year = db.Column(db.Integer, nullable=False) + processed = db.Column(db.BOOLEAN, nullable=False) + + def get_sql_notion(self): + result = str(self.year) + if self.month < 10: + result += "-0" + str(self.month) + else: + result += "-" + str(self.month) + + if self.day_of_month < 10: + result += "-0" + str(self.day_of_month) + else: + result += "-" + str(self.day_of_month) + return result + + @classmethod + def set_all_to_processed(cls): + for o in cls.get_unprocessed(): + o.set_processed() + db.session.commit() + return None + + def set_processed(self): + self.processed = True + return self @classmethod - def create_new_object_factory(cls, my_date_rep): + def get_unprocessed(cls): + return db.session.query(cls).filter(cls.processed == False).all() + + @classmethod + def create_new_object_factory(cls, my_date_rep: str): my_datum = date.fromisoformat(my_date_rep) (my_iso_year, week_number, weekday) = my_datum.isocalendar() my_year_week = "" + str(my_iso_year) if week_number < 10: - my_year_week += "-0" + my_year_week += '-0' else: - my_year_week += "-" + my_year_week += '-' my_year_week += str(week_number) return OwidDateReported( date_reported_import_str=my_date_rep, @@ -41,7 +85,8 @@ class OwidDateReported(ApplicationDateReported): day_of_month=my_datum.day, day_of_week=weekday, week_of_year=week_number, - year_week=my_year_week + year_week=my_year_week, + processed=False ) @@ -52,12 +97,69 @@ class OwidContinent(ApplicationRegion): db.UniqueConstraint('region', name="uix_owid_country_continent"), ) + def __str__(self): + result = "" + self.region + " " + return result + id = db.Column(db.Integer, primary_key=True) region = db.Column(db.String(255), nullable=False, unique=True) + @classmethod + def get_last_continent(cls): + return db.session.query(cls).all().pop() + class OwidCountry(db.Model): __tablename__ = 'owid_country' + __table_args__ = ( + db.UniqueConstraint('iso_code', 'location', name="uix_owid_country"), + ) + + def __str__(self): + result = "" + self.iso_code + " | " + self.location + " | " # + str(self.continent) + return result + + def __str__(self): + result2 = "(" + result2 += self.population + result2 += ", " + result2 += self.population_density + result2 += ", " + result2 += self.median_age + result2 += ", " + result2 += self.aged_65_older + result2 += ", " + result2 += self.aged_70_older + result2 += ", " + result2 += self.gdp_per_capita + result2 += ", " + result2 += self.extreme_poverty + result2 += ", " + result2 += self.cardiovasc_death_rate + result2 += ", " + result2 += self.diabetes_prevalence + result2 += ", " + result2 += self.female_smokers + result2 += ", " + result2 += self.male_smokers + result2 += ", " + result2 += self.handwashing_facilities + result2 += ", " + result2 += self.hospital_beds_per_thousand + result2 += ", " + result2 += self.life_expectancy + result2 += ", " + result2 += self.human_development_index + result2 += " )" + result = " [ " + result += self.iso_code + result += ", " + result += self.location + # result += ", " + # result += self.continent.region + result += " ] " + result += result2 + return result id = db.Column(db.Integer, primary_key=True) continent_id = db.Column(db.Integer, @@ -85,15 +187,12 @@ class OwidCountry(db.Model): life_expectancy = db.Column(db.String(255), nullable=False) human_development_index = db.Column(db.String(255), nullable=False) - def __str__(self): - result = "" - result += self.iso_code - result += " " - result += self.location - result += " " - result += self.continent.region - result += " " - return result + @classmethod + def delete_all_countries_for_continent(cls, owid_continent_one): + db.session.query(cls).filter(cls.continent == owid_continent_one).delete() + db.session.delete(owid_continent_one) + db.session.commit() + return None @classmethod def get_germany(cls): @@ -105,10 +204,18 @@ class OwidCountry(db.Model): def get_countries_for_continent(cls, owid_continent_one: OwidContinent, page: int): return db.session.query(cls).filter(cls.continent == owid_continent_one).paginate(page, per_page=ITEMS_PER_PAGE) + @classmethod + def get_all_countries_for_continent(cls, owid_continent_one: OwidContinent): + return db.session.query(cls).filter(cls.continent == owid_continent_one).all() + @classmethod def find_by_iso_code_and_location(cls, iso_code, location): return db.session.query(cls).filter(and_((cls.iso_code == iso_code), (cls.location == location))).one_or_none() + @classmethod + def get_by_iso_code_and_location(cls, iso_code, location): + return db.session.query(cls).filter(and_((cls.iso_code == iso_code), (cls.location == location))).one() + @classmethod def remove_all(cls): num_rows_deleted = 0 @@ -191,6 +298,26 @@ class OwidData(db.Model): new_vaccinations_smoothed_per_million = db.Column(db.String(255), nullable=False) stringency_index = db.Column(db.String(255), nullable=False) + @classmethod + def delete_all_data_for_country(cls, owid_country_one): + db.session.query(cls).filter( + cls.country == owid_country_one + ).populate_existing().options( + joinedload(cls.country), + joinedload(cls.date_reported), + ).delete() + db.session.commit() + return None + + @classmethod + def get_all_data_for_country(cls, owid_country_one): + return db.session.query(cls).filter( + cls.country == owid_country_one + ).populate_existing().options( + joinedload(cls.country), + joinedload(cls.date_reported), + ).all() + @classmethod def get_data_for_country(cls, owid_country_one, page): return db.session.query(cls).filter( @@ -273,7 +400,9 @@ class OwidData(db.Model): @classmethod def get_datum_of_all_data(cls): datum_of_all_who_data = [] - for data in db.session.query(cls).options(subqueryload("date_reported").load_only("date_reported_import_str")): + for data in db.session.query(cls).options( + subqueryload("date_reported").load_only("date_reported_import_str") + ): datum = data.date_reported.date_reported_import_str if not datum in datum_of_all_who_data: datum_of_all_who_data.append(datum) @@ -282,10 +411,15 @@ class OwidData(db.Model): @classmethod def get_joungest_datum(cls): - return cls.get_datum_of_all_data().pop() + data = cls.get_datum_of_all_data() + if len(data) > 0: + return data.pop() + else: + return None @classmethod def delete_data_for_one_day(cls, date_reported): for data in cls.get_data_for_one_day(date_reported): db.session.delete(data) - db.session.commit() + db.session.delete(date_reported) + db.session.commit() diff --git a/src/covid19/blueprints/owid/owid_model_import.py b/src/covid19/blueprints/owid/owid_model_import.py index 9e71c7b1225d6e205f1993be56110edc8ce218fc..a187a3d1833033737034cbb37d533ab0d812fabf 100644 --- a/src/covid19/blueprints/owid/owid_model_import.py +++ b/src/covid19/blueprints/owid/owid_model_import.py @@ -1,5 +1,6 @@ from sqlalchemy.orm import Bundle from database import db, ITEMS_PER_PAGE +from sqlalchemy import and_ class OwidImport(db.Model): @@ -65,6 +66,13 @@ class OwidImport(db.Model): hospital_beds_per_thousand = db.Column(db.String(255), nullable=False) life_expectancy = db.Column(db.String(255), nullable=False) human_development_index = db.Column(db.String(255), nullable=False) + datum = db.Column(db.Date, nullable=False) + year = db.Column(db.Integer, nullable=False) + month = db.Column(db.Integer, nullable=False) + day_of_month = db.Column(db.Integer, nullable=False) + day_of_week = db.Column(db.Integer, nullable=False) + week_of_year = db.Column(db.Integer, nullable=False) + year_week = db.Column(db.String(255), nullable=False) @classmethod def remove_all(cls): @@ -125,9 +133,13 @@ class OwidImport(db.Model): def get_new_dates_reported_as_array(cls): return cls.get_dates_reported_as_array() + # TODO: deprecated @classmethod def get_datum_of_all_import(cls): - return cls.get_dates_reported_as_array() + return db.session.query(cls.date)\ + .order_by(cls.date.desc())\ + .group_by(cls.date)\ + .distinct().all() @classmethod def get_all_continents(cls): @@ -149,3 +161,127 @@ class OwidImport(db.Model): def countries(cls): bu = Bundle('countries', cls.iso_code, cls.location, cls.continent) return db.session.query(bu).distinct() + + @classmethod + def get_all_countries(cls): + return db.session.query( + cls.location, + cls.iso_code, + cls.continent, + cls.population, + cls.population_density, + cls.median_age, + cls.aged_65_older, + cls.aged_70_older, + cls.gdp_per_capita, + cls.extreme_poverty, + cls.cardiovasc_death_rate, + cls.diabetes_prevalence, + cls.female_smokers, + cls.male_smokers, + cls.handwashing_facilities, + cls.hospital_beds_per_thousand, + cls.life_expectancy, + cls.human_development_index + ).group_by( + cls.location, + cls.iso_code, + cls.continent, + cls.population, + cls.population_density, + cls.median_age, + cls.aged_65_older, + cls.aged_70_older, + cls.gdp_per_capita, + cls.extreme_poverty, + cls.cardiovasc_death_rate, + cls.diabetes_prevalence, + cls.female_smokers, + cls.male_smokers, + cls.handwashing_facilities, + cls.hospital_beds_per_thousand, + cls.life_expectancy, + cls.human_development_index + ).distinct().order_by(cls.location.asc()).all() + + @classmethod + def get_countries(cls, continent_str): + return db.session.query( + cls.location, + cls.iso_code, + cls.population, + cls.population_density, + cls.median_age, + cls.aged_65_older, + cls.aged_70_older, + cls.gdp_per_capita, + cls.extreme_poverty, + cls.cardiovasc_death_rate, + cls.diabetes_prevalence, + cls.female_smokers, + cls.male_smokers, + cls.handwashing_facilities, + cls.hospital_beds_per_thousand, + cls.life_expectancy, + cls.human_development_index + ).filter(cls.continent == continent_str).group_by( + cls.location, + cls.iso_code, + cls.population, + cls.population_density, + cls.median_age, + cls.aged_65_older, + cls.aged_70_older, + cls.gdp_per_capita, + cls.extreme_poverty, + cls.cardiovasc_death_rate, + cls.diabetes_prevalence, + cls.female_smokers, + cls.male_smokers, + cls.handwashing_facilities, + cls.hospital_beds_per_thousand, + cls.life_expectancy, + cls.human_development_index + ).distinct().order_by(cls.location.asc()).all() + + @classmethod + def get_country_for(cls, iso_code, location): + return db.session.query( + cls.location, + cls.continent, + cls.iso_code, + cls.population, + cls.population_density, + cls.median_age, + cls.aged_65_older, + cls.aged_70_older, + cls.gdp_per_capita, + cls.extreme_poverty, + cls.cardiovasc_death_rate, + cls.diabetes_prevalence, + cls.female_smokers, + cls.male_smokers, + cls.handwashing_facilities, + cls.hospital_beds_per_thousand, + cls.life_expectancy, + cls.human_development_index + ).filter(and_((cls.iso_code == iso_code), (cls.location == location))).group_by( + cls.location, + cls.continent, + cls.iso_code, + cls.population, + cls.population_density, + cls.median_age, + cls.aged_65_older, + cls.aged_70_older, + cls.gdp_per_capita, + cls.extreme_poverty, + cls.cardiovasc_death_rate, + cls.diabetes_prevalence, + cls.female_smokers, + cls.male_smokers, + cls.handwashing_facilities, + cls.hospital_beds_per_thousand, + cls.life_expectancy, + cls.human_development_index + ).distinct().one() diff --git a/src/covid19/blueprints/owid/owid_service.py b/src/covid19/blueprints/owid/owid_service.py index e4b9c70726d71a837fcfb5c957436f9dce8ad793..445adf7236930259a5ec30eeeca6d600060f0407 100644 --- a/src/covid19/blueprints/owid/owid_service.py +++ b/src/covid19/blueprints/owid/owid_service.py @@ -2,8 +2,8 @@ from flask import flash from database import app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig -from covid19.blueprints.application.application_service_download import ApplicationServiceDownload +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig +from covid19.blueprints.app_all.all_service_download import ApplicationServiceDownload from covid19.blueprints.owid.owid_service_import import OwidServiceImport from covid19.blueprints.owid.owid_service_update import OwidServiceUpdate, OwidServiceUpdateFull @@ -45,11 +45,15 @@ class OwidService: app.logger.info("OwidService.task_database_drop_create done") return self - def run_download_only(self): + def run_download(self): self.service_download.download_file() return self - def run_import_only(self): + def run_import(self): + self.service_import.import_file() + return self + + def task_admin_import_all_files(self): self.service_import.import_file() return self @@ -63,4 +67,16 @@ class OwidService: self.service_update_full.full_update_star_schema() return self + def task_admin_full_update_star_schema(self): + self.service_import.import_file() + self.service_update_full.full_update_star_schema() + return self + + def task_admin_update_full_dimension_tables(self): + self.service_update_full.full_update_dimension_tables() + return self + + def task_admin_update_dimension_tables(self): + self.service_update.update_dimension_tables() + return self diff --git a/src/covid19/blueprints/owid/owid_service_import.py b/src/covid19/blueprints/owid/owid_service_import.py index 750359b6f63188421b502a869550e9c85a99e28c..2201e96322e68e45998b535667f97aed279ddabb 100644 --- a/src/covid19/blueprints/owid/owid_service_import.py +++ b/src/covid19/blueprints/owid/owid_service_import.py @@ -1,7 +1,8 @@ import csv import psycopg2 from database import db, app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig +from covid19.blueprints.owid.owid_model import OwidDateReported from covid19.blueprints.owid.owid_model_import import OwidImport @@ -27,11 +28,13 @@ class OwidServiceImport: file_reader = csv.DictReader(csv_file, delimiter=',', quotechar='"') k = 0 for row in file_reader: + date_reported = row['date'] + d = OwidDateReported.create_new_object_factory(my_date_rep=date_reported) o = OwidImport( iso_code=row['iso_code'], continent=row['continent'], location=row['location'], - date=row['date'], + date=date_reported, total_cases=row['total_cases'], new_cases=row['new_cases'], new_cases_smoothed=row['new_cases_smoothed'], @@ -87,6 +90,13 @@ class OwidServiceImport: hospital_beds_per_thousand=row['hospital_beds_per_thousand'], life_expectancy=row['life_expectancy'], human_development_index=row['human_development_index'], + datum=d.datum, + year=d.year, + month=d.month, + day_of_month=d.day_of_month, + day_of_week=d.day_of_week, + week_of_year=d.day_of_week, + year_week=d.year_week ) db.session.add(o) k += 1 diff --git a/src/covid19/blueprints/owid/owid_service_update.py b/src/covid19/blueprints/owid/owid_service_update.py index 0fae0f48f8089df89f82620857051a27356ecc79..02b4c44d57d97af1af25d790d976694a35691e0c 100644 --- a/src/covid19/blueprints/owid/owid_service_update.py +++ b/src/covid19/blueprints/owid/owid_service_update.py @@ -1,5 +1,5 @@ from database import db, app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig from covid19.blueprints.owid.owid_model import OwidDateReported, OwidData, OwidContinent, OwidCountry from covid19.blueprints.owid.owid_model_import import OwidImport @@ -17,15 +17,6 @@ class OwidServiceUpdateBase: class OwidServiceUpdateFull(OwidServiceUpdateBase): - def full_update_dimension_tables(self): - return self.__full_update_dimension_tables() - - def __full_update_dimension_tables(self): - OwidData.remove_all() - self.__full_update_date_reported() - self.__full_update_country() - return self - def __full_update_date_reported(self): app.logger.info(" WhoServiceUpdateFull.__full_update_date_reported [begin]") app.logger.info("------------------------------------------------------------") @@ -34,14 +25,9 @@ class OwidServiceUpdateFull(OwidServiceUpdateBase): log_lines = [] for i_date_reported, in OwidImport.get_dates(): i += 1 - output = " [ " + str(i) + " ] " + i_date_reported - c = OwidDateReported.find_by_date_reported(i_date_reported) - if c is None: - o = OwidDateReported.create_new_object_factory(my_date_rep=i_date_reported) - db.session.add(o) - output += " added" - else: - output += " NOT added "+str(c.id) + o = OwidDateReported.create_new_object_factory(my_date_rep=i_date_reported) + db.session.add(o) + output = " full update date_reported [ " + str(i) + " ] " + i_date_reported + " added" log_lines.append(output) for log_line in log_lines: app.logger.info(log_line) @@ -57,10 +43,13 @@ class OwidServiceUpdateFull(OwidServiceUpdateBase): app.logger.info("") log_lines = [] OwidContinent.remove_all() - for oi in OwidImport.get_continents(): + i = 0 + for oi in OwidImport.get_all_continents(): my_OwidContinent = OwidContinent(region=oi.continent) db.session.add(my_OwidContinent) - log_lines.append("added "+str(my_OwidContinent)) + i += 1 + output = " full update continent: [ " + str(i) + " ] " + str(my_OwidContinent) + " added" + log_lines.append(output) for log_line in log_lines: app.logger.info(log_line) db.session.commit() @@ -72,77 +61,62 @@ class OwidServiceUpdateFull(OwidServiceUpdateBase): app.logger.info(" OwidServiceUpdate.__full_update_country [begin]") app.logger.info("------------------------------------------------------------") app.logger.info("") + OwidData.remove_all() OwidCountry.remove_all() self.__full_update_continent() + log_lines = [] + i = 0 + for continent in OwidContinent.get_all(): + log_lines.append("continent.region: " + continent.region) + for oi in OwidImport.get_countries(continent.region): + i += 1 + o = OwidCountry( + continent_id=continent.id, + continent=continent, + location=oi.location, + iso_code=oi.iso_code, + population=oi.population, + population_density=oi.population_density, + median_age=oi.median_age, + aged_65_older=oi.aged_65_older, + aged_70_older=oi.aged_70_older, + gdp_per_capita=oi.gdp_per_capita, + extreme_poverty=oi.extreme_poverty, + cardiovasc_death_rate=oi.cardiovasc_death_rate, + diabetes_prevalence=oi.diabetes_prevalence, + female_smokers=oi.female_smokers, + male_smokers=oi.male_smokers, + handwashing_facilities=oi.handwashing_facilities, + hospital_beds_per_thousand=oi.hospital_beds_per_thousand, + life_expectancy=oi.life_expectancy, + human_development_index=oi.human_development_index + ) + db.session.add(o) + output = " full update country: [ " + str(i) + " ] " + str(o) + " added" + log_lines.append(output) + for log_line in log_lines: + app.logger.info(log_line) + db.session.commit() app.logger.info(" OwidServiceUpdate.__full_update_country [done]") app.logger.info("------------------------------------------------------------") return self def __full_update_fact_table(self): - app.logger.info(" WhoServiceUpdateFull.__full_update_fact_table [begin]") + app.logger.info(" OwidServiceUpdate.__full_update_fact_table [begin]") app.logger.info("------------------------------------------------------------") + anzahl_db_zeilen_persistent = 0 + anzahl_db_zeilen_transient = 0 + lfd_nr_tage = 0 OwidData.remove_all() - new_dates_reported_from_import = OwidImport.get_dates_reported_as_array() - i = 0 - d = 0 - k = 0 - for my_date_reported in new_dates_reported_from_import: - my_OwidDateReported = OwidDateReported.find_by_date_reported(my_date_reported) - if my_OwidDateReported is None: - myday = OwidDateReported.create_new_object_factory(my_date_reported) - db.session.add(myday) - db.session.commit() - my_OwidDateReported = OwidDateReported.get_by_date_reported(my_date_reported) - app.logger.info(str(my_OwidDateReported) + " added") - # else: - # app.logger.info(str(my_OwidDateReported) + " not added" + str(my_OwidDateReported.id)) - for oi in OwidImport.get_for_one_day(my_date_reported): - my_OwidContinent = OwidContinent.find_by_region(i_region=oi.continent) - if my_OwidContinent is None: - my_OwidContinent = OwidContinent(region=oi.continent) - db.session.add(my_OwidContinent) - db.session.commit() - my_OwidContinent = OwidContinent.find_by_region(i_region=oi.continent) - app.logger.info(str(my_OwidContinent) + " added") - # else: - # app.logger.info(str(my_OwidContinent) + " not added" + str(my_OwidContinent.id)) - my_OwidCountry = OwidCountry.find_by_iso_code_and_location( + for my_owid_date_reported in OwidDateReported.get_all(): + for oi in OwidImport.get_for_one_day(my_owid_date_reported.date_reported_import_str): + pers_owid_country = OwidCountry.get_by_iso_code_and_location( iso_code=oi.iso_code, location=oi.location ) - if my_OwidCountry is None: - my_OwidCountry = OwidCountry( - continent=my_OwidContinent, - iso_code=oi.iso_code, - location=oi.location, - population=oi.population, - population_density=oi.population_density, - median_age=oi.median_age, - aged_65_older=oi.aged_65_older, - aged_70_older=oi.aged_70_older, - gdp_per_capita=oi.gdp_per_capita, - extreme_poverty=oi.extreme_poverty, - cardiovasc_death_rate=oi.cardiovasc_death_rate, - diabetes_prevalence=oi.diabetes_prevalence, - female_smokers=oi.female_smokers, - male_smokers=oi.male_smokers, - handwashing_facilities=oi.handwashing_facilities, - hospital_beds_per_thousand=oi.hospital_beds_per_thousand, - life_expectancy=oi.life_expectancy, - human_development_index=oi.human_development_index, - ) - db.session.add(my_OwidCountry) - db.session.commit() - my_OwidCountry = OwidCountry.find_by_iso_code_and_location( - iso_code=oi.iso_code, - location=oi.location - ) - app.logger.info(str(my_OwidCountry) + " added") - # else: - # app.logger.info(str(my_OwidCountry) + " not added" + str(my_OwidCountry.id)) o = OwidData( - date_reported=my_OwidDateReported, - country=my_OwidCountry, + date_reported=my_owid_date_reported, + country=pers_owid_country, total_cases=oi.total_cases, new_cases=oi.new_cases, new_cases_smoothed=oi.new_cases_smoothed, @@ -185,23 +159,35 @@ class OwidServiceUpdateFull(OwidServiceUpdateBase): stringency_index=oi.stringency_index, ) db.session.add(o) - i += 1 - k += 1 - d += 1 - if d % 7 == 0: + anzahl_db_zeilen_persistent += 1 + anzahl_db_zeilen_transient += 1 + my_owid_date_reported.set_processed() + db.session.add(my_owid_date_reported) + lfd_nr_tage += 1 + if lfd_nr_tage % 7 == 0: db.session.commit() - app.logger.info(" full update OWID " + str(my_OwidDateReported) + " ... " + str(i) + " rows ( " + str(k) + " )") - k = 0 + app.logger.info(" full update OWID " + + str(my_owid_date_reported) + " ... " + + str(anzahl_db_zeilen_persistent) + + " rows ( " + str(anzahl_db_zeilen_transient) + " )") + anzahl_db_zeilen_transient = 0 db.session.commit() - app.logger.info(" full update OWID "+str(i)+" rows total") - app.logger.info(" WhoServiceUpdateFull.__full_update_fact_table [done]") + app.logger.info(" full update OWID : "+str(anzahl_db_zeilen_persistent) +" rows total - for "+str(lfd_nr_tage)+" days") + app.logger.info(" OwidServiceUpdate.__full_update_fact_table [done]") app.logger.info("------------------------------------------------------------") return self + def full_update_dimension_tables(self): + OwidData.remove_all() + self.__full_update_date_reported() + self.__full_update_country() + return self + def full_update_fact_table(self): app.logger.info(" WhoServiceUpdateFull.update_fact_table_initial_only [begin]") app.logger.info("------------------------------------------------------------") # TODO #216 implement OwidServiceUpdate.update_fact_table_initial_only() + OwidData.remove_all() self.__full_update_fact_table() app.logger.info(" WhoServiceUpdateFull.update_fact_table_initial_only [done]") app.logger.info("------------------------------------------------------------") @@ -211,7 +197,9 @@ class OwidServiceUpdateFull(OwidServiceUpdateBase): app.logger.info(" WhoServiceUpdateFull.full_update_star_schema [begin]") app.logger.info("------------------------------------------------------------") # TODO #218 implement OwidServiceUpdate.update_star_schema_initial() - self.__full_update_dimension_tables() + OwidData.remove_all() + self.__full_update_date_reported() + self.__full_update_country() self.__full_update_fact_table() app.logger.info(" WhoServiceUpdateFull.full_update_star_schema [done]") app.logger.info("------------------------------------------------------------") @@ -221,30 +209,57 @@ class OwidServiceUpdateFull(OwidServiceUpdateBase): class OwidServiceUpdate(OwidServiceUpdateBase): def __get_new_dates_reported_from_import(self): - new_dates_reported_from_import = [] - list_datum_of_all_data = OwidData.get_datum_of_all_data() - for item in OwidImport.get_datum_of_all_import(): - if not item in list_datum_of_all_data: - new_dates_reported_from_import.append(item) - return new_dates_reported_from_import + todo = [] + owid_date_reported_all = [] + for i in OwidDateReported.get_all(): + owid_date_reported_all.append(i.date_reported_import_str) + for datum_from_import in OwidImport.get_datum_of_all_import(): + if datum_from_import.date not in owid_date_reported_all: + todo.append(datum_from_import[0]) + return todo + + def __get_new_continents_from_import(self): + todo = [] + owid_continent_all = [] + for i in OwidContinent.get_all(): + owid_continent_all.append(i.region) + for oi in OwidImport.get_all_continents(): + item = oi.continent + if item not in owid_continent_all: + todo.append(item) + return todo + + def __get_new_countries_from_import(self): + todo = [] + owid_countries = [] + for oc in OwidCountry.get_all(): + oc_key = ( + oc.iso_code, + oc.location, + oc.continent.region + ) + owid_countries.append(oc_key) + for oi in OwidImport.get_all_countries(): + country = ( + oi.iso_code, + oi.location, + oi.continent + ) + if country not in owid_countries: + todo.append(country) + return todo def __update_date_reported(self): app.logger.info(" OwidServiceUpdate.__update_date_reported [begin]") app.logger.info("------------------------------------------------------------") - OwidData.remove_all() - OwidDateReported.remove_all() i = 0 log_lines = [] - for i_date_reported, in OwidImport.get_dates(): + for i_date_reported in self.__get_new_dates_reported_from_import(): + # app.logger.info(i_date_reported) i += 1 - output = " [ " + str(i) + " ] " + i_date_reported - c = OwidDateReported.find_by_date_reported(i_date_reported) - if c is None: - o = OwidDateReported.create_new_object_factory(my_date_rep=i_date_reported) - db.session.add(o) - output += " added" - else: - output += " NOT added "+str(c.id) + o = OwidDateReported.create_new_object_factory(my_date_rep=i_date_reported) + db.session.add(o) + output = " added OwidDateReported: [ " + str(i) + " ] " + str(o) + " " log_lines.append(output) for log_line in log_lines: app.logger.info(log_line) @@ -258,12 +273,11 @@ class OwidServiceUpdate(OwidServiceUpdateBase): app.logger.info(" OwidServiceUpdate.__update_continent [begin]") app.logger.info("------------------------------------------------------------") app.logger.info("") - OwidContinent.remove_all() log_lines = [] - for oi in OwidImport.get_all_continents(): - my_OwidContinent = OwidContinent(region=oi.continent) - db.session.add(my_OwidContinent) - log_lines.append("added "+str(my_OwidContinent)) + for continent in self.__get_new_continents_from_import(): + my_owid_continent = OwidContinent(region=continent) + db.session.add(my_owid_continent) + log_lines.append("added OwidContinent: "+str(my_owid_continent)) for log_line in log_lines: app.logger.info(log_line) db.session.commit() @@ -275,68 +289,58 @@ class OwidServiceUpdate(OwidServiceUpdateBase): app.logger.info(" OwidServiceUpdate.__update_country [begin]") app.logger.info("------------------------------------------------------------") app.logger.info("") - OwidCountry.remove_all() self.__update_continent() + for ci in self.__get_new_countries_from_import(): + iso_code = ci[0] + location = ci[1] + continent = ci[2] + # app.logger.info("iso_code: " + iso_code + " - location: " + location + " - continent: " + continent) + oi = OwidImport.get_country_for(iso_code=iso_code, location=location) + owid_continent = OwidContinent.find_by_region(continent) + o = OwidCountry( + continent=owid_continent, + location=oi.location, + iso_code=oi.iso_code, + population=oi.population, + population_density=oi.population_density, + median_age=oi.median_age, + aged_65_older=oi.aged_65_older, + aged_70_older=oi.aged_70_older, + gdp_per_capita=oi.gdp_per_capita, + extreme_poverty=oi.extreme_poverty, + cardiovasc_death_rate=oi.cardiovasc_death_rate, + diabetes_prevalence=oi.diabetes_prevalence, + female_smokers=oi.female_smokers, + male_smokers=oi.male_smokers, + handwashing_facilities=oi.handwashing_facilities, + hospital_beds_per_thousand=oi.hospital_beds_per_thousand, + life_expectancy=oi.life_expectancy, + human_development_index=oi.human_development_index + ) + db.session.add(o) + app.logger.info("added OwidCountry: " + str(o) + " ") + db.session.commit() app.logger.info(" OwidServiceUpdate.__update_country [done]") app.logger.info("------------------------------------------------------------") return self def __update_fact_table(self): - app.logger.info(" OwidServiceUpdate.__update_fact_table [begin]") + app.logger.info(" WhoServiceUpdateFull.__update_fact_table [begin]") app.logger.info("------------------------------------------------------------") - new_dates_reported_from_import = self.__get_new_dates_reported_from_import() - i = 0 - d = 0 - k = 0 - for my_date_reported in new_dates_reported_from_import: - my_OwidDateReported = OwidDateReported.find_by_date_reported(my_date_reported) - if my_OwidDateReported is None: - myday = OwidDateReported.create_new_object_factory(my_date_reported) - db.session.add(myday) - db.session.commit() - my_OwidDateReported = OwidDateReported.get_by_date_reported(my_date_reported) - app.logger.info(str(my_OwidDateReported) + " added") - for oi in OwidImport.get_for_one_day(my_date_reported): - my_OwidContinent = OwidContinent.find_by_region(i_region=oi.continent) - if my_OwidContinent is None: - my_OwidContinent = OwidContinent(region=oi.continent) - db.session.add(my_OwidContinent) - db.session.commit() - my_OwidContinent = OwidContinent.find_by_region(i_region=oi.continent) - app.logger.info(str(my_OwidContinent) + " added") - # else: - # app.logger.info(str(my_OwidContinent) + " not added" + str(my_OwidContinent.id)) - my_OwidCountry = OwidCountry.find_by_iso_code_and_location(iso_code=oi.iso_code, location=oi.location) - if my_OwidCountry is None: - my_OwidCountry = OwidCountry( - continent=my_OwidContinent, - iso_code=oi.iso_code, - location=oi.location, - population=oi.population, - population_density=oi.population_density, - median_age=oi.median_age, - aged_65_older=oi.aged_65_older, - aged_70_older=oi.aged_70_older, - gdp_per_capita=oi.gdp_per_capita, - extreme_poverty=oi.extreme_poverty, - cardiovasc_death_rate=oi.cardiovasc_death_rate, - diabetes_prevalence=oi.diabetes_prevalence, - female_smokers=oi.female_smokers, - male_smokers=oi.male_smokers, - handwashing_facilities=oi.handwashing_facilities, - hospital_beds_per_thousand=oi.hospital_beds_per_thousand, - life_expectancy=oi.life_expectancy, - human_development_index=oi.human_development_index, - ) - db.session.add(my_OwidCountry) - db.session.commit() - my_OwidCountry = OwidCountry.find_by_iso_code_and_location(iso_code=oi.iso_code, location=oi.location) - app.logger.info(str(my_OwidCountry) + " added") - # else: - # app.logger.info(str(my_OwidCountry) + " not added" + str(my_OwidCountry.id)) + anzahl_db_zeilen_persistent = 0 + anzahl_db_zeilen_transient = 0 + lfd_nr_tage = 0 + for unprocessed_owid_date_reported in OwidDateReported.get_unprocessed(): + unprocessed_owid_date_reported.set_processed() + app.logger.info("unprocessed_date: " + str(unprocessed_owid_date_reported)) + for oi in OwidImport.get_for_one_day(unprocessed_owid_date_reported.date_reported_import_str): + owid_country = OwidCountry.find_by_iso_code_and_location( + iso_code=oi.iso_code, + location=oi.location + ) o = OwidData( - date_reported=my_OwidDateReported, - country=my_OwidCountry, + date_reported=unprocessed_owid_date_reported, + country=owid_country, total_cases=oi.total_cases, new_cases=oi.new_cases, new_cases_smoothed=oi.new_cases_smoothed, @@ -379,31 +383,33 @@ class OwidServiceUpdate(OwidServiceUpdateBase): stringency_index=oi.stringency_index, ) db.session.add(o) - i += 1 - k += 1 - d += 1 - if d % 7 == 0: + anzahl_db_zeilen_persistent += 1 + anzahl_db_zeilen_transient += 1 + lfd_nr_tage += 1 + if lfd_nr_tage % 7 == 0: db.session.commit() - app.logger.info(" update OWID " + str(my_OwidDateReported) + " ... " + str(i) + " rows ( " + str(k) + " )") - k = 0 + app.logger.info( + " update OWID : added OwidData " + str(unprocessed_owid_date_reported) + + " ... " + str(anzahl_db_zeilen_persistent) + + " rows ( " + str(anzahl_db_zeilen_transient) + + " )") + anzahl_db_zeilen_transient = 0 db.session.commit() - app.logger.info(" update OWID : "+str(i)+" rows total") - app.logger.info(" OwidServiceUpdate.__update_fact_table [done]") + app.logger.info(" update OWID : added OwidData " + + str(anzahl_db_zeilen_persistent) + + " rows total - for "+str(lfd_nr_tage)+" days") + app.logger.info(" WhoServiceUpdateFull.__update_fact_table [done]") app.logger.info("------------------------------------------------------------") return self - def __update_dimension_tables(self): - OwidData.remove_all() - self.__update_date_reported() - self.__update_country() - return self - def update_dimension_tables(self): - app.logger.info(" OwidServiceUpdate.update_dimension_tables_only [begin]") + app.logger.info(" OwidServiceUpdate.update_dimension_tables [begin]") app.logger.info("------------------------------------------------------------") # TODO #214 implement OwidServiceUpdate.update_dimension_tables_only() - self.__update_dimension_tables() - app.logger.info(" OwidServiceUpdate.update_dimension_tables_only [done]") + OwidData.remove_all() + self.__update_date_reported() + self.__update_country() + app.logger.info(" OwidServiceUpdate.update_dimension_tables [done]") app.logger.info("------------------------------------------------------------") return self @@ -420,7 +426,9 @@ class OwidServiceUpdate(OwidServiceUpdateBase): app.logger.info(" OwidServiceUpdate.update_star_schema [begin]") app.logger.info("------------------------------------------------------------") # TODO #217 implement OwidServiceUpdate.update_star_schema_incremental() - self.__update_dimension_tables() + OwidData.remove_all() + self.__update_date_reported() + self.__update_country() self.__update_fact_table() app.logger.info(" OwidServiceUpdate.update_star_schema [done]") app.logger.info("------------------------------------------------------------") diff --git a/src/covid19/blueprints/owid/owid_views.py b/src/covid19/blueprints/owid/owid_views.py index 1198135db0e13fd50e981056557a28d82287a838..cf5c4c8df9635dc6fc43dff230b290f2c090d0cd 100644 --- a/src/covid19/blueprints/owid/owid_views.py +++ b/src/covid19/blueprints/owid/owid_views.py @@ -5,11 +5,14 @@ from celery.utils.log import get_task_logger from flask_admin.contrib.sqla import ModelView from database import app, admin, db -from covid19.blueprints.application.application_services import owid_service -from covid19.blueprints.application.application_workers import celery +from covid19.blueprints.app_all.all_services import who_service, owid_service +from covid19.blueprints.app_all.all_services import rki_service, rki_vaccination_service +from covid19.blueprints.app_all.all_services import ecdc_service, divi_service +from covid19.blueprints.app_all.all_services import app_admin_service, app_user_service +from covid19.blueprints.app_mq.application_workers import celery +from covid19.blueprints.app_application.application_model_transient import ApplicationPage from covid19.blueprints.owid.owid_model import OwidDateReported, OwidData, OwidContinent, OwidCountry from covid19.blueprints.owid.owid_model_import import OwidImport -from covid19.blueprints.application.application_model_transient import ApplicationPage app_owid = Blueprint('owid', __name__, template_folder='templates', url_prefix='/owid ') @@ -246,9 +249,9 @@ def url_owid_date_reported_all(page: int = 1): def url_owid_date_reported_one(date_reported_id: int, page: int = 1): date_reported = OwidDateReported.get_by_id(date_reported_id) page_info = ApplicationPage( - "Date Reported: " + date_reported.date_reported, + "Date Reported: " + str(date_reported), 'OWID', - "data of all reported countries for OWID date reported " + date_reported.date_reported + " " + "data of all reported countries for OWID date reported " + str(date_reported) + " " ) try: page_data = OwidData.get_data_for_day(date_reported, page) @@ -267,9 +270,9 @@ def url_owid_date_reported_one(date_reported_id: int, page: int = 1): def url_owid_date_reported_one_cases_new(date_reported_id: int, page: int = 1): date_reported = OwidDateReported.get_by_id(date_reported_id) page_info = ApplicationPage( - "Date Reported: " + date_reported.date_reported, + "Date Reported: " + str(date_reported), 'OWID', - "data of all reported countries for OWID date reported " + date_reported.date_reported + " " + "data of all reported countries for OWID date reported " + str(date_reported) + " " ) try: page_data = OwidData.get_data_for_day_order_by_cases_new(date_reported, page) @@ -288,9 +291,9 @@ def url_owid_date_reported_one_cases_new(date_reported_id: int, page: int = 1): def url_owid_date_reported_one_cases_cumulative(date_reported_id: int, page: int = 1): date_reported = OwidDateReported.get_by_id(date_reported_id) page_info = ApplicationPage( - "Date Reported: " + date_reported.date_reported, + "Date Reported: " + str(date_reported), 'OWID', - "data of all reported countries for OWID date reported " + date_reported.date_reported + " " + "data of all reported countries for OWID date reported " + str(date_reported) + " " ) try: page_data = OwidData.get_data_for_day_order_by_cases_cumulative(date_reported, page) @@ -309,9 +312,9 @@ def url_owid_date_reported_one_cases_cumulative(date_reported_id: int, page: int def url_owid_date_reported_one_deaths_new(date_reported_id: int, page: int = 1): date_reported = OwidDateReported.get_by_id(date_reported_id) page_info = ApplicationPage( - "Date Reported: " + date_reported.date_reported, + "Date Reported: " + str(date_reported), 'OWID', - "data of all reported countries for OWID date reported " + date_reported.date_reported + " " + "data of all reported countries for OWID date reported " + str(date_reported) + " " ) try: page_data = OwidData.get_data_for_day_order_by_deaths_new(date_reported, page) @@ -330,9 +333,9 @@ def url_owid_date_reported_one_deaths_new(date_reported_id: int, page: int = 1): def url_owid_date_reported_one_deaths_cumulative(date_reported_id: int, page: int = 1): date_reported = OwidDateReported.get_by_id(date_reported_id) page_info = ApplicationPage( - "Date Reported: " + date_reported.date_reported, + "Date Reported: " + str(date_reported), 'OWID', - "data of all reported countries for OWID date reported " + date_reported.date_reported + " " + "data of all reported countries for OWID date reported " + str(date_reported) + " " ) try: page_data = OwidData.get_data_for_day_order_by_deaths_cumulative(date_reported, page) @@ -451,26 +454,13 @@ def url_owid_country_one_germany(page: int = 1): @celery.task(bind=True) -def task_owid_download_only(self): - logger = get_task_logger(__name__) - self.update_state(state=states.STARTED) - logger.info("------------------------------------------------------------") - logger.info(" Received: task_owid_download_only [OK] ") - logger.info("------------------------------------------------------------") - owid_service.run_download_only() - self.update_state(state=states.SUCCESS) - result = "OK (task_owid_download_only)" - return result - - -@celery.task(bind=True) -def task_owid_import_only(self): +def task_owid_import(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") logger.info(" Received: task_owid_import_only [OK] ") logger.info("------------------------------------------------------------") - owid_service.run_import_only() + owid_service.run_import() self.update_state(state=states.SUCCESS) result = "OK (task_owid_import_only)" return result @@ -535,7 +525,7 @@ def task_owid_full_update_star_schema(self): logger.info("------------------------------------------------------------") logger.info(" Received: task_owid_full_update_star_schema [OK] ") logger.info("------------------------------------------------------------") - owid_service.service_update_full.full_update_star_schema() + owid_service.full_update_star_schema() self.update_state(state=states.SUCCESS) result = "OK (task_owid_update_star_schema_incremental)" return result @@ -548,7 +538,7 @@ def task_owid_update_star_schema(self): logger.info("------------------------------------------------------------") logger.info(" Received: task_owid_update_star_schema [OK] ") logger.info("------------------------------------------------------------") - owid_service.service_update.update_star_schema() + owid_service.update_star_schema() self.update_state(state=states.SUCCESS) result = "OK (task_owid_update_star_schema_initial)" return result @@ -571,7 +561,7 @@ def url_task_owid_download(): @app_owid.route('/task/import/only') def url_task_owid_import(): app.logger.info("url_task_owid_import_only [start]") - task_owid_import_only.apply_async() + task_owid_import.apply_async() flash(message="started task_owid_import_only", category="warning") app.logger.warn("started task_owid_import_only") app.logger.info("url_task_owid_import_only [done]") @@ -588,7 +578,7 @@ def url_task_owid_full_update_dimension_tables(): return redirect(url_for('owid.url_owid_tasks')) -@app_owid.route('/task/update/dimension-tables/initial/only') +@app_owid.route('/task/update/dimension-tables') def url_task_owid_update_dimension_tables(): app.logger.info("url_task_owid_update_dimension_tables [start]") task_owid_update_dimension_tables.apply_async() diff --git a/src/covid19/blueprints/owid/templates/owid/continent/owid_continent_all.html b/src/covid19/blueprints/owid/templates/owid/continent/owid_continent_all.html index 3137b1ec9e5eeab575e1a7f175d8dc1859684dd1..717ea29770a2030bf1ea1c8ab51148155f54399b 100644 --- a/src/covid19/blueprints/owid/templates/owid/continent/owid_continent_all.html +++ b/src/covid19/blueprints/owid/templates/owid/continent/owid_continent_all.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/owid/templates/owid/continent/owid_continent_one.html b/src/covid19/blueprints/owid/templates/owid/continent/owid_continent_one.html index 96ccd639b8d89a48283c8ab791b4a532f13b59dc..15bfb5bfdac86ffaa042757f27d7ea554692bb34 100644 --- a/src/covid19/blueprints/owid/templates/owid/continent/owid_continent_one.html +++ b/src/covid19/blueprints/owid/templates/owid/continent/owid_continent_one.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/owid/templates/owid/country/owid_country_all.html b/src/covid19/blueprints/owid/templates/owid/country/owid_country_all.html index a7cddc477d4aec6b41b3cf48da304573fb2351d2..516a86a2ea389e4d0818e9f7b9ae90198990566b 100644 --- a/src/covid19/blueprints/owid/templates/owid/country/owid_country_all.html +++ b/src/covid19/blueprints/owid/templates/owid/country/owid_country_all.html @@ -1,10 +1,10 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} {% include 'owid/navigation/owid_navtabs.html' %} - <div class="container-fluid"> + <div class="container"> <div class="row"> <div class="col"> {% include 'owid/country/owid_country_all_pagination.html' %} diff --git a/src/covid19/blueprints/owid/templates/owid/country/owid_country_all_table.html b/src/covid19/blueprints/owid/templates/owid/country/owid_country_all_table.html index 73457f71b375d1aa03dec90761688f173ca60ac0..be6613db0b10dffcf74e2b4d7c027a30f58250a7 100644 --- a/src/covid19/blueprints/owid/templates/owid/country/owid_country_all_table.html +++ b/src/covid19/blueprints/owid/templates/owid/country/owid_country_all_table.html @@ -1,24 +1,25 @@ + <div class="table-responsive"> <table class="table table-hover table-striped table-dark"> <thead class="table-secondary"> <tr> - <th scope="col">iso_code</th> + <th scope="col">iso code</th> <th scope="col">continent</th> <th scope="col">location</th> <th scope="col">population</th> - <th scope="col">population_density</th> - <th scope="col">median_age</th> - <th scope="col">aged_65_older</th> - <th scope="col">aged_70_older</th> - <th scope="col">gdp_per_capita</th> - <th scope="col">extreme_poverty</th> - <th scope="col">cardiovasc_death_rate</th> - <th scope="col">diabetes_prevalence</th> - <th scope="col">female_smokers</th> - <th scope="col">male_smokers</th> - <th scope="col">handwashing_facilities</th> - <th scope="col">hospital_beds_per_thousand</th> - <th scope="col">life_expectancy</th> - <th scope="col">human_development_index</th> + <th scope="col">population density</th> + <th scope="col">median age</th> + <th scope="col">aged 65 older</th> + <th scope="col">aged 70 older</th> + <th scope="col">gdp per capita</th> + <th scope="col">extreme poverty</th> + <th scope="col">cardiovasc death rate</th> + <th scope="col">diabetes prevalence</th> + <th scope="col">female smokers</th> + <th scope="col">male smokers</th> + <th scope="col">handwashing facilities</th> + <th scope="col">hospital beds per thousand</th> + <th scope="col">life expectancy</th> + <th scope="col">human development index</th> </tr> </thead> <tbody> @@ -57,4 +58,5 @@ </tr> {% endfor %} </tbody> - </table> \ No newline at end of file + </table> + </div> \ No newline at end of file diff --git a/src/covid19/blueprints/owid/templates/owid/country/owid_country_one.html b/src/covid19/blueprints/owid/templates/owid/country/owid_country_one.html index d1e72c2287b004408d1469c462fa9829b5a24996..51a05fe9ec97cc6a3ecdeadb5fb1f47d8fa2449e 100644 --- a/src/covid19/blueprints/owid/templates/owid/country/owid_country_one.html +++ b/src/covid19/blueprints/owid/templates/owid/country/owid_country_one.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/owid/templates/owid/country/owid_country_one_germany.html b/src/covid19/blueprints/owid/templates/owid/country/owid_country_one_germany.html index d1e72c2287b004408d1469c462fa9829b5a24996..da2849a74b0744f18793fbf0ebbbd90d64068382 100644 --- a/src/covid19/blueprints/owid/templates/owid/country/owid_country_one_germany.html +++ b/src/covid19/blueprints/owid/templates/owid/country/owid_country_one_germany.html @@ -1,10 +1,10 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} {% include 'owid/navigation/owid_navtabs.html' %} - <div class="container-fluid"> + <div class="container"> <div class="row"> <div class="col"> {% include 'owid/country/owid_country_one_pagination.html' %} diff --git a/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_all.html b/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_all.html index fca14b608beb62a3e674b967130fd08784e0d016..86fb19fbf3713ee5e68651a190cce2d91228b240 100644 --- a/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_all.html +++ b/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_all.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_all_table.html b/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_all_table.html index 5162b7c1100292910a355521c33d92a0aebd668c..f4b976a292a97638ce809d879989026b984c1e5b 100644 --- a/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_all_table.html +++ b/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_all_table.html @@ -1,3 +1,4 @@ + <div class="table-responsive"> <table class="table table-hover table-striped table-dark"> <thead class="table-secondary"> <tr> @@ -35,4 +36,5 @@ <th scope="col" class="text-left">year</th> </tr> </tfoot> - </table> \ No newline at end of file + </table> + </div> \ No newline at end of file diff --git a/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one.html b/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one.html index 507a19cd08a16de7a3a5d9781d5d6ed3d212a9f7..73f2ed3529e7d1ab0ec4fef6960af9d9de202a77 100644 --- a/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one.html +++ b/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one.html @@ -1,10 +1,10 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} {% include 'owid/navigation/owid_navtabs.html' %} - <div class="container-fluid"> + <div class="container"> <div class="row"> <div class="col"> {% include 'owid/date_reported/owid_date_reported_one_pagination.html' %} diff --git a/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one_cases_cumulative.html b/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one_cases_cumulative.html index 9936b1d3ab1ea04351f1a7da984e1fd2a229a4c4..fed816e629cf8cbf0e91778e4f8db1c1d53d0e97 100644 --- a/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one_cases_cumulative.html +++ b/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one_cases_cumulative.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one_cases_new.html b/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one_cases_new.html index 2c1b5ff2b1a65f68b3f5e32916f4ee47bbd5865b..d6cc4a12b2d659c5e07b611043946c82e9f98f8c 100644 --- a/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one_cases_new.html +++ b/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one_cases_new.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one_deaths_cumulative.html b/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one_deaths_cumulative.html index e0c793f4cc9dff7a8c2d6db80e67a725e916f0bd..678688c1e259ad81f622e888b0dc3490a30307b7 100644 --- a/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one_deaths_cumulative.html +++ b/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one_deaths_cumulative.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one_deaths_new.html b/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one_deaths_new.html index 6cbae917275c762b0f26a93a2ba711afc7be442d..041d1cf40a5fb8f712ebc04eac3cdfc34ea005d1 100644 --- a/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one_deaths_new.html +++ b/src/covid19/blueprints/owid/templates/owid/date_reported/owid_date_reported_one_deaths_new.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/owid/templates/owid/imported/owid_imported.html b/src/covid19/blueprints/owid/templates/owid/imported/owid_imported.html index 0422eb7d5235f4478fba98d7942f5dd7e5008a63..ee244e6a17f8f099ed9e9d54c84a84a23bd0b270 100644 --- a/src/covid19/blueprints/owid/templates/owid/imported/owid_imported.html +++ b/src/covid19/blueprints/owid/templates/owid/imported/owid_imported.html @@ -1,10 +1,10 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} {% include 'owid/navigation/owid_navtabs.html' %} - <div class="container-fluid"> + <div class="container"> <div class="row"> <div class="col"> {% include 'owid/imported/owid_imported_pagination.html' %} diff --git a/src/covid19/blueprints/owid/templates/owid/imported/owid_imported_table.html b/src/covid19/blueprints/owid/templates/owid/imported/owid_imported_table.html index fed302720efc142bd880383cb7bec5976a7df924..0dec37019161a87a9aa8ef742457a6fab6a2bfb1 100644 --- a/src/covid19/blueprints/owid/templates/owid/imported/owid_imported_table.html +++ b/src/covid19/blueprints/owid/templates/owid/imported/owid_imported_table.html @@ -1,72 +1,73 @@ + <div class="table-responsive"> <table class="table table-hover table-striped table-dark"> <thead> <tr> - <th scope="col">iso_code</th> <th scope="col">continent</th> + <th scope="col">iso code</th> <th scope="col">location</th> <th scope="col">date</th> - <th scope="col">total_cases</th> - <th scope="col">new_cases</th> - <th scope="col">new_cases_smoothed</th> - <th scope="col">total_deaths</th> - <th scope="col">new_deaths</th> - <th scope="col">new_deaths_smoothed</th> - <th scope="col">total_cases_per_million</th> - <th scope="col">new_cases_per_million</th> - <th scope="col">new_cases_smoothed_per_million</th> - <th scope="col">total_deaths_per_million</th> - <th scope="col">new_deaths_per_million</th> - <th scope="col">new_deaths_smoothed_per_million</th> - <th scope="col">reproduction_rate</th> - <th scope="col">icu_patients</th> - <th scope="col">icu_patients_per_million</th> - <th scope="col">hosp_patients</th> - <th scope="col">hosp_patients_per_million</th> - <th scope="col">weekly_icu_admissions</th> - <th scope="col">weekly_icu_admissions_per_million</th> - <th scope="col">weekly_hosp_admissions</th> - <th scope="col">weekly_hosp_admissions_per_million</th> - <th scope="col">new_tests</th> - <th scope="col">total_tests</th> - <th scope="col">total_tests_per_thousand</th> - <th scope="col">new_tests_per_thousand</th> - <th scope="col">new_tests_smoothed</th> - <th scope="col">new_tests_smoothed_per_thousand</th> - <th scope="col">positive_rate</th> - <th scope="col">tests_per_case</th> - <th scope="col">tests_units</th> - <th scope="col">total_vaccinations</th> - <th scope="col">people_vaccinated</th> - <th scope="col">people_fully_vaccinated</th> - <th scope="col">new_vaccinations</th> - <th scope="col">new_vaccinations_smoothed</th> - <th scope="col">total_vaccinations_per_hundred</th> - <th scope="col">people_vaccinated_per_hundred</th> - <th scope="col">people_fully_vaccinated_per_hundred</th> - <th scope="col">new_vaccinations_smoothed_per_million</th> - <th scope="col">stringency_index</th> + <th scope="col">total cases</th> + <th scope="col">new cases</th> + <th scope="col">new cases smoothed</th> + <th scope="col">total deaths</th> + <th scope="col">new deaths</th> + <th scope="col">new deaths smoothed</th> + <th scope="col">total cases per million</th> + <th scope="col">new cases per million</th> + <th scope="col">new cases smoothed per million</th> + <th scope="col">total deaths per million</th> + <th scope="col">new_deaths per million</th> + <th scope="col">new deaths smoothed per million</th> + <th scope="col">reproduction rate</th> + <th scope="col">icu patients</th> + <th scope="col">icu patients per million</th> + <th scope="col">hosp patients</th> + <th scope="col">hosp patients per million</th> + <th scope="col">weekly icu admissions</th> + <th scope="col">weekly icu admissions per million</th> + <th scope="col">weekly hosp admissions</th> + <th scope="col">weekly hosp admissions per million</th> + <th scope="col">new tests</th> + <th scope="col">total tests</th> + <th scope="col">total tests per thousand</th> + <th scope="col">new tests per thousand</th> + <th scope="col">new tests smoothed</th> + <th scope="col">new tests smoothed per thousand</th> + <th scope="col">positive rate</th> + <th scope="col">tests per case</th> + <th scope="col">tests units</th> + <th scope="col">total vaccinations</th> + <th scope="col">people vaccinated</th> + <th scope="col">people fully vaccinated</th> + <th scope="col">new vaccinations</th> + <th scope="col">new vaccinations smoothed</th> + <th scope="col">total vaccinations per hundred</th> + <th scope="col">people vaccinated per hundred</th> + <th scope="col">people fully vaccinated per hundred</th> + <th scope="col">new vaccinations smoothed per million</th> + <th scope="col">stringency index</th> <th scope="col">population</th> - <th scope="col">population_density</th> - <th scope="col">median_age</th> - <th scope="col">aged_65_older</th> - <th scope="col">aged_70_older</th> - <th scope="col">gdp_per_capita</th> - <th scope="col">extreme_poverty</th> - <th scope="col">cardiovasc_death_rate</th> - <th scope="col">diabetes_prevalence</th> - <th scope="col">female_smokers</th> - <th scope="col">male_smokers</th> - <th scope="col">handwashing_facilities</th> - <th scope="col">hospital_beds_per_thousand</th> - <th scope="col">life_expectancy</th> - <th scope="col">human_development_index</th> + <th scope="col">population density</th> + <th scope="col">median age</th> + <th scope="col">aged 65 older</th> + <th scope="col">aged 70 older</th> + <th scope="col">gdp per capita</th> + <th scope="col">extreme poverty</th> + <th scope="col">cardiovasc death rate</th> + <th scope="col">diabetes prevalence</th> + <th scope="col">female smokers</th> + <th scope="col">male smokers</th> + <th scope="col">handwashing facilities</th> + <th scope="col">hospital beds per thousand</th> + <th scope="col">life expectancy</th> + <th scope="col">human development index</th> </tr> </thead> <tbody> {% for owid_import in page_data.items %} <tr> - <td>{{ owid_import.iso_code }}</td> <td>{{ owid_import.continent }}</td> + <td>{{ owid_import.iso_code }}</td> <td>{{ owid_import.location }}</td> <td>{{ owid_import.date }}</td> <td>{{ owid_import.total_cases }}</td> @@ -127,4 +128,5 @@ </tr> {% endfor %} </tbody> - </table> \ No newline at end of file + </table> + </div> \ No newline at end of file diff --git a/src/covid19/blueprints/owid/templates/owid/navigation/owid_navtabs.html b/src/covid19/blueprints/owid/templates/owid/navigation/owid_navtabs.html index f63c40cad8c29f9e9e83bf99f9bf2e60132739bd..525365adf39aa62dd6fe9a2bffbe7ceca04e2f58 100644 --- a/src/covid19/blueprints/owid/templates/owid/navigation/owid_navtabs.html +++ b/src/covid19/blueprints/owid/templates/owid/navigation/owid_navtabs.html @@ -13,12 +13,14 @@ <a class="nav-link" href="{{ url_for( 'owid.url_owid_tasks') }}">OWID tasks</a> </li> - {% endif %} - {% if current_user.is_authenticated %} <li class="nav-item"> <a class="nav-link" href="{{ url_for( 'owid_test.url_owid_test_tests') }}">OWID Tests</a> </li> + <li class="nav-item"> + <a class="nav-link" + href="{{ url_for( 'owid.url_owid_imported') }}">OWID imported</a> + </li> {% endif %} <li class="nav-item"> <a class="nav-link" @@ -36,12 +38,6 @@ <a class="nav-link" href="{{ url_for( 'owid.url_owid_country_one_germany') }}">OWID Germany</a> </li> - {% if current_user.is_authenticated %} - <li class="nav-item"> - <a class="nav-link" - href="{{ url_for( 'owid.url_owid_imported') }}">OWID imported</a> - </li> - {% endif %} </ul> </nav> </div> diff --git a/src/covid19/blueprints/owid/templates/owid/owid_data/owid_data_table.html b/src/covid19/blueprints/owid/templates/owid/owid_data/owid_data_table.html index 05352c12f7838d8ef870d1543262665467c83186..148ac80ae0648c2a26ac4348777ce4e9a260e87b 100644 --- a/src/covid19/blueprints/owid/templates/owid/owid_data/owid_data_table.html +++ b/src/covid19/blueprints/owid/templates/owid/owid_data/owid_data_table.html @@ -1,65 +1,66 @@ + <div class="table-responsive"> <table class="table table-hover table-striped table-dark"> <thead class="table-secondary"> <tr> - <th scope="col">iso_code</th> + <th scope="col">iso code</th> <th scope="col">continent</th> <th scope="col">location</th> <th scope="col">date</th> - <th scope="col">total_cases</th> - <th scope="col">new_cases</th> - <th scope="col">new_cases_smoothed</th> - <th scope="col">total_deaths</th> - <th scope="col">new_deaths</th> - <th scope="col">new_deaths_smoothed</th> - <th scope="col">total_cases_per_million</th> - <th scope="col">new_cases_per_million</th> - <th scope="col">new_cases_smoothed_per_million</th> - <th scope="col">total_deaths_per_million</th> - <th scope="col">new_deaths_per_million</th> - <th scope="col">new_deaths_smoothed_per_million</th> - <th scope="col">reproduction_rate</th> - <th scope="col">icu_patients</th> - <th scope="col">icu_patients_per_million</th> - <th scope="col">hosp_patients</th> - <th scope="col">hosp_patients_per_million</th> - <th scope="col">weekly_icu_admissions</th> - <th scope="col">weekly_icu_admissions_per_million</th> - <th scope="col">weekly_hosp_admissions</th> - <th scope="col">weekly_hosp_admissions_per_million</th> - <th scope="col">new_tests</th> - <th scope="col">total_tests</th> - <th scope="col">total_tests_per_thousand</th> - <th scope="col">new_tests_per_thousand</th> - <th scope="col">new_tests_smoothed</th> - <th scope="col">new_tests_smoothed_per_thousand</th> - <th scope="col">positive_rate</th> - <th scope="col">tests_per_case</th> - <th scope="col">tests_units</th> - <th scope="col">total_vaccinations</th> - <th scope="col">people_vaccinated</th> - <th scope="col">people_fully_vaccinated</th> - <th scope="col">new_vaccinations</th> - <th scope="col">new_vaccinations_smoothed</th> - <th scope="col">total_vaccinations_per_hundred</th> - <th scope="col">people_vaccinated_per_hundred</th> - <th scope="col">people_fully_vaccinated_per_hundred</th> - <th scope="col">new_vaccinations_smoothed_per_million</th> - <th scope="col">stringency_index</th> + <th scope="col">total cases</th> + <th scope="col">new cases</th> + <th scope="col">new cases smoothed</th> + <th scope="col">total deaths</th> + <th scope="col">new deaths</th> + <th scope="col">new deaths smoothed</th> + <th scope="col">total cases per million</th> + <th scope="col">new cases per million</th> + <th scope="col">new cases smoothed per million</th> + <th scope="col">total deaths per million</th> + <th scope="col">new deaths per million</th> + <th scope="col">new deaths smoothed per million</th> + <th scope="col">reproduction rate</th> + <th scope="col">icu patients</th> + <th scope="col">icu patients per million</th> + <th scope="col">hosp patients</th> + <th scope="col">hosp patients per million</th> + <th scope="col">weekly icu admissions</th> + <th scope="col">weekly icu admissions per million</th> + <th scope="col">weekly hosp admissions</th> + <th scope="col">weekly hosp admissions per million</th> + <th scope="col">new tests</th> + <th scope="col">total tests</th> + <th scope="col">total tests per thousand</th> + <th scope="col">new tests per thousand</th> + <th scope="col">new tests smoothed</th> + <th scope="col">new tests smoothed per thousand</th> + <th scope="col">positive rate</th> + <th scope="col">tests per case</th> + <th scope="col">tests units</th> + <th scope="col">total vaccinations</th> + <th scope="col">people vaccinated</th> + <th scope="col">people fully vaccinated</th> + <th scope="col">new vaccinations</th> + <th scope="col">new vaccinations_smoothed</th> + <th scope="col">total vaccinations per hundred</th> + <th scope="col">people vaccinated per hundred</th> + <th scope="col">people fully vaccinated per hundred</th> + <th scope="col">new vaccinations smoothed per million</th> + <th scope="col">stringency index</th> <th scope="col">population</th> - <th scope="col">population_density</th> - <th scope="col">median_age</th> - <th scope="col">aged_65_older</th> - <th scope="col">aged_70_older</th> - <th scope="col">gdp_per_capita</th> - <th scope="col">extreme_poverty</th> - <th scope="col">cardiovasc_death_rate</th> - <th scope="col">diabetes_prevalence</th> - <th scope="col">female_smokers</th> - <th scope="col">male_smokers</th> - <th scope="col">handwashing_facilities</th> - <th scope="col">hospital_beds_per_thousand</th> - <th scope="col">life_expectancy</th> - <th scope="col">human_development_index</th> + <th scope="col">population density</th> + <th scope="col">median age</th> + <th scope="col">aged 65 older</th> + <th scope="col">aged 70 older</th> + <th scope="col">gdp per capita</th> + <th scope="col">extreme poverty</th> + <th scope="col">cardiovasc death rate</th> + <th scope="col">diabetes prevalence</th> + <th scope="col">female smokers</th> + <th scope="col">male smokers</th> + <th scope="col">handwashing facilities</th> + <th scope="col">hospital beds per thousand</th> + <th scope="col">life expectancy</th> + <th scope="col">human development index</th> </tr> </thead> <tbody> @@ -203,4 +204,5 @@ </tr> {% endfor %} </tbody> - </table> \ No newline at end of file + </table> + </div> \ No newline at end of file diff --git a/src/covid19/blueprints/owid/templates/owid/owid_info.html b/src/covid19/blueprints/owid/templates/owid/owid_info.html index dd71fb641e7b962aaf9fcf862f76d1ec924a61e6..4755c5044614f57d12b13b3c39305c3da3d2ec65 100644 --- a/src/covid19/blueprints/owid/templates/owid/owid_info.html +++ b/src/covid19/blueprints/owid/templates/owid/owid_info.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/owid/templates/owid/owid_tasks.html b/src/covid19/blueprints/owid/templates/owid/owid_tasks.html index 86e252b4ab43e64329dd62fd5621c6cbca0f1faa..e9cff210577ffaded4b738c4071003e7441bd8f7 100644 --- a/src/covid19/blueprints/owid/templates/owid/owid_tasks.html +++ b/src/covid19/blueprints/owid/templates/owid/owid_tasks.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/owid_test/owid_test_service.py b/src/covid19/blueprints/owid_test/owid_test_service.py index 05d7c2ad5ee3a48b55e45f94c8a1ac206343f13e..8f852a57db98a5f864e0b0056073c54c2ff0dc63 100644 --- a/src/covid19/blueprints/owid_test/owid_test_service.py +++ b/src/covid19/blueprints/owid_test/owid_test_service.py @@ -1,7 +1,7 @@ -from database import app - -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig -from covid19.blueprints.owid.owid_model import OwidDateReported, OwidData +from database import db, app +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig +from covid19.blueprints.owid.owid_model import OwidDateReported, OwidData, OwidContinent, OwidCountry +from covid19.blueprints.owid.owid_model_import import OwidImport class OwidTestService: @@ -23,18 +23,41 @@ class OwidTestService: joungest_datum = OwidDateReported.find_by_date_reported(joungest_datum_str) app.logger.info("joungest_datum:") app.logger.info(joungest_datum) - app.logger.info("WhoData.get_data_for_one_day(joungest_datum):") + app.logger.info("OwidData.get_data_for_one_day(joungest_datum):") i = 0 for data in OwidData.get_data_for_one_day(joungest_datum): i += 1 - line = " | " + str(i) + " | " + str(data.date_reported) + " | " + data.country.location + " | to be deleted" + line = "Owid: to be deleted | " + str(i) + " | " + str(data.date_reported) + " | " + str(data.country) + " | " app.logger.info(line) - app.logger.info("WhoData.delete_data_for_one_day(joungest_datum)") + app.logger.info("OwidData.delete_data_for_one_day(joungest_datum)") OwidData.delete_data_for_one_day(joungest_datum) app.logger.debug("------------------------------------------------------------") app.logger.debug(" OwidTestService.delete_last_day() [DONE]") app.logger.debug("------------------------------------------------------------") + def delete_last_continent(self): + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" OwidTestService.delete_last_continent() [START]") + app.logger.debug("------------------------------------------------------------") + app.logger.info("OwidContinent.get_last_continent()") + last_continent = OwidContinent.get_last_continent() + app.logger.info("last_continent:" + str(last_continent)) + app.logger.info("OwidCountry.get_all_countries_for_continent(last_continent)") + countries_for_continent = OwidCountry.get_all_countries_for_continent(last_continent) + i = 0 + for country in countries_for_continent: + for data in OwidData.get_all_data_for_country(country): + i += 1 + line = "Owid: to be deleted | " + str(i) + " | " + str(data.date_reported) + " | " + str(data.country) + " | " + app.logger.info(line) + app.logger.info("OwidData.delete_all_data_for_country(country)") + OwidData.delete_all_data_for_country(country) + app.logger.info("OwidCountry.delete_all_countries_for_continent(last_continent)") + OwidCountry.delete_all_countries_for_continent(last_continent) + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" OwidTestService.delete_last_continent() [DONE]") + app.logger.debug("------------------------------------------------------------") + def run_update_star_schema_incremental(self): app.logger.debug("------------------------------------------------------------") app.logger.debug(" OwidTestService.run_update_star_schema_incremental() [START]") @@ -43,3 +66,42 @@ class OwidTestService: app.logger.debug("------------------------------------------------------------") app.logger.debug(" OwidTestService.run_update_star_schema_incremental() [DONE]") app.logger.debug("------------------------------------------------------------") + + def full_update_dimension_tables(self): + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" OwidTestService.full_update_dimension_tables() [START]") + app.logger.debug("------------------------------------------------------------") + app.logger.debug("") + OwidData.remove_all() + OwidCountry.remove_all() + for continent in OwidContinent.get_all(): + app.logger.info("continent.region: " + continent.region) + for oi in OwidImport.get_countries_for_continent(continent.region): + app.logger.info("continent.region: " + continent.region +" - oi.location: " + oi.location) + o = OwidCountry( + continent_id=continent.id, + continent=continent, + location=oi.location, + iso_code=oi.iso_code, + population=oi.population, + population_density=oi.population_density, + median_age=oi.median_age, + aged_65_older=oi.aged_65_older, + aged_70_older=oi.aged_70_older, + gdp_per_capita=oi.gdp_per_capita, + extreme_poverty=oi.extreme_poverty, + cardiovasc_death_rate=oi.cardiovasc_death_rate, + diabetes_prevalence=oi.diabetes_prevalence, + female_smokers=oi.female_smokers, + male_smokers=oi.male_smokers, + handwashing_facilities=oi.handwashing_facilities, + hospital_beds_per_thousand=oi.hospital_beds_per_thousand, + life_expectancy=oi.life_expectancy, + human_development_index=oi.human_development_index + ) + db.session.add(o) + db.session.commit() + app.logger.debug("") + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" OwidTestService.full_update_dimension_tables() [DONE]") + app.logger.debug("------------------------------------------------------------") diff --git a/src/covid19/blueprints/owid_test/owid_test_views.py b/src/covid19/blueprints/owid_test/owid_test_views.py index 27dec415c8b952eb2dc309512eb91ea97b0fcf20..c6cc073a9f893ed9924450fb364e63d9b45a777d 100644 --- a/src/covid19/blueprints/owid_test/owid_test_views.py +++ b/src/covid19/blueprints/owid_test/owid_test_views.py @@ -4,11 +4,14 @@ from celery.utils.log import get_task_logger from flask_login import login_required from database import app, db -from covid19.blueprints.application.application_services import owid_service -from covid19.blueprints.application.application_workers import celery +from covid19.blueprints.app_all.all_services import who_service, owid_service +from covid19.blueprints.app_all.all_services import rki_service, rki_vaccination_service +from covid19.blueprints.app_all.all_services import ecdc_service, divi_service +from covid19.blueprints.app_all.all_services import app_admin_service, app_user_service +from covid19.blueprints.app_mq.application_workers import celery from covid19.blueprints.owid.owid_model import OwidData from covid19.blueprints.owid.owid_model_import import OwidImport -from covid19.blueprints.application.application_model_transient import ApplicationPage +from covid19.blueprints.app_application.application_model_transient import ApplicationPage from covid19.blueprints.owid_test.owid_test_service import OwidTestService @@ -28,6 +31,7 @@ def url_owid_test_tests(): 'owid_test/owid_tests.html', page_info=page_info) + @app_owid_test.route('/update_dimension_tables_only') @login_required def url_owid_test_update_dimension_tables_only(): @@ -35,6 +39,7 @@ def url_owid_test_update_dimension_tables_only(): flash("test_update_dimension_tables_only - START") return redirect(url_for('owid_test.url_owid_test_tests')) + @app_owid_test.route('/update_fact_table_incremental_only') @login_required def url_owid_test_update_fact_table_incremental_only(): @@ -42,6 +47,7 @@ def url_owid_test_update_fact_table_incremental_only(): flash("update_fact_table_incremental_only - START") return redirect(url_for('owid_test.url_owid_test_tests')) + @app_owid_test.route('/update_fact_table_initial_only') @login_required def url_owid_test_update_fact_table_initial_only(): @@ -49,6 +55,7 @@ def url_owid_test_update_fact_table_initial_only(): flash("update_fact_table_initial_only - START") return redirect(url_for('owid_test.url_owid_test_tests')) + @app_owid_test.route('/update_star_schema/incremental') @login_required def url_owid_test_update_star_schema_incremental(): @@ -56,6 +63,7 @@ def url_owid_test_update_star_schema_incremental(): flash("update_star_schema_incremental - START") return redirect(url_for('owid_test.url_owid_test_tests')) + @app_owid_test.route('/update_star_schema/initial') @login_required def url_owid_test_update_star_schema_initial(): @@ -141,6 +149,27 @@ def url_owid_test_owid_test_service_delete_last_days_data(): return redirect(url_for('owid_test.url_owid_test_tests')) +@app_owid_test.route('/owid_test_service/delete_last_continents_data') +@login_required +def url_owid_test_owid_test_service_delete_last_continents_data(): + app.logger.info("url_owid_test_owid_test_service_delete_last_continents_data - START") + flash("owid_test_service.delete_last_continent() - START") + owid_test_service.delete_last_continent() + flash("owid_test_service.delete_last_continent() - DONE") + app.logger.info("url_owid_test_owid_test_service_delete_last_continents_data - DONE") + return redirect(url_for('owid_test.url_owid_test_tests')) + + +@app_owid_test.route('/owid_test_service/update_dimension_tables') +@login_required +def url_owid_test_full_update_dimension_tables(): + app.logger.info("url_owid_test_full_update_dimension_tables - START") + flash("owid_test_service.full_update_dimension_tables() - START") + owid_test_service.full_update_dimension_tables() + app.logger.info("owid_test_service.full_update_dimension_tables() - DONE") + flash("url_owid_test_full_update_dimension_tables - DONE") + return redirect(url_for('owid_test.url_owid_test_tests')) + # ---------------------------------------------------------------------------------------------------------------- # Celery TASKS diff --git a/src/covid19/blueprints/owid_test/templates/owid_test/owid_tests.html b/src/covid19/blueprints/owid_test/templates/owid_test/owid_tests.html index a4416ef59a1811415c69486cb64863a7cf62fb35..0404eeb2e0cb2e43b934730e8471a923bbd5af68 100644 --- a/src/covid19/blueprints/owid_test/templates/owid_test/owid_tests.html +++ b/src/covid19/blueprints/owid_test/templates/owid_test/owid_tests.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} @@ -22,6 +22,19 @@ </div> </div> <p></p> + <div class="row"> + <div class="col"> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-danger btn-lg btn-block text-left" + href="{{ url_for( 'owid_test.url_owid_test_full_update_dimension_tables') }}" + role="button">OWID :: Test :: OwidServiceUpdateFull.full_update_dimension_tables()</a> + </div> + </div> + <div class="col"> + <p> </p> + </div> + </div> + <p></p> <div class="row"> <div class="col"> <div class="btn-group-vertical" role="group" aria-label="Views"> @@ -40,10 +53,19 @@ <a class="btn btn-danger btn-lg btn-block text-left" href="{{ url_for( 'owid_test.url_owid_test_owid_service_owid_import_get_new_dates_as_array') }}" role="button">url_owid_test_owid_service_owid_import_get_new_dates_as_array</a> + </div> + <p> </p> + <div class="btn-group-vertical" role="group" aria-label="Views"> <a class="btn btn-primary btn-lg btn-block text-left" href="{{ url_for( 'owid_test.url_owid_test_owid_test_service_delete_last_days_data') }}" role="button">url_owid_test_owid_test_service_delete_last_days_data</a> </div> + <p> </p> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'owid_test.url_owid_test_owid_test_service_delete_last_continents_data') }}" + role="button">url_owid_test_owid_test_service_delete_last_continents_data</a> + </div> </div> <div class="col"> </div> diff --git a/src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_model.py b/src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_model.py deleted file mode 100644 index 2c1eec6c295556ab3060008a791382727eebe4da..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_model.py +++ /dev/null @@ -1,49 +0,0 @@ -from database import db, ITEMS_PER_PAGE - - -class RkiBundeslaender(db.Model): - __tablename__ = 'rki_bundeslaender' - - id = db.Column(db.Integer, primary_key=True) - object_id_1 = db.Column(db.Integer, nullable=False) - lan_ew_ags = db.Column(db.Integer, nullable=False) - lan_ew_gen = db.Column(db.String(255), nullable=False) - lan_ew_bez = db.Column(db.String(255), nullable=False) - lan_ew_ewz = db.Column(db.Integer, nullable=False) - object_id = db.Column(db.Integer, nullable=False) - fallzahl = db.Column(db.Integer, nullable=False) - aktualisierung = db.Column(db.String(255), nullable=False) - ags_txt = db.Column(db.Integer, nullable=False) - global_id = db.Column(db.String(255), nullable=False) - faelle_100000_ew = db.Column(db.Float, nullable=False) - death = db.Column(db.Integer, nullable=False) - cases7_bl_per_100k = db.Column(db.Float, nullable=False) - cases7_bl = db.Column(db.Integer, nullable=False) - death7_bl = db.Column(db.Integer, nullable=False) - cases7_bl_per_100k_txt = db.Column(db.String(255), nullable=False) - adm_unit_id = db.Column(db.Integer, nullable=False) - shape_length = db.Column(db.Float, nullable=False) - shape_area = db.Column(db.Float, nullable=False) - - @classmethod - def remove_all(cls): - for one in cls.get_all(): - db.session.delete(one) - db.session.commit() - return None - - @classmethod - def get_all_as_page(cls, page): - return db.session.query(cls).paginate(page, per_page=ITEMS_PER_PAGE) - - @classmethod - def get_all(cls): - return db.session.query(cls).all() - - @classmethod - def get_by_id(cls, other_id): - return db.session.query(cls).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() diff --git a/src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_model_import.py b/src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_model_import.py deleted file mode 100644 index aa34dc4319d1e66849a44c3f45ae821c655078e9..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_model_import.py +++ /dev/null @@ -1,57 +0,0 @@ -from database import db, ITEMS_PER_PAGE - - -class RkiBundeslaenderImport(db.Model): - __tablename__ = 'application__import__rki_bundeslsaender' - - id = db.Column(db.Integer, primary_key=True) - OBJECTID_1 = db.Column(db.String(255), nullable=False) - LAN_ew_AGS = db.Column(db.String(255), nullable=False) - LAN_ew_GEN = db.Column(db.String(255), nullable=False) - LAN_ew_BEZ = db.Column(db.String(255), nullable=False) - LAN_ew_EWZ = db.Column(db.String(255), nullable=False) - OBJECTID = db.Column(db.String(255), nullable=False) - Fallzahl = db.Column(db.String(255), nullable=False) - Aktualisierung = db.Column(db.String(255), nullable=False) - AGS_TXT = db.Column(db.String(255), nullable=False) - GlobalID = db.Column(db.String(255), nullable=False) - faelle_100000_EW = db.Column(db.String(255), nullable=False) - Death = db.Column(db.String(255), nullable=False) - cases7_bl_per_100k = db.Column(db.String(255), nullable=False) - cases7_bl = db.Column(db.String(255), nullable=False) - death7_bl = db.Column(db.String(255), nullable=False) - cases7_bl_per_100k_txt = db.Column(db.String(255), nullable=False) - AdmUnitId = db.Column(db.String(255), nullable=False) - SHAPE_Length = db.Column(db.String(255), nullable=False) - SHAPE_Area = db.Column(db.String(255), nullable=False) - - @classmethod - def remove_all(cls): - for one in cls.get_all(): - db.session.delete(one) - db.session.commit() - return None - - @classmethod - def get_all_as_page(cls, page: int): - return db.session.query(cls).paginate(page, per_page=ITEMS_PER_PAGE) - - @classmethod - def get_all(cls): - return db.session.query(cls).all() - - @classmethod - def get_by_id(cls, other_id: int): - return db.session.query(cls).filter(cls.id == other_id).one() - - @classmethod - def get_aktualisierungen_as_array(cls): - return [] - - @classmethod - def find_by_aktualisierung(cls, aktualisierung_from_import: str): - return [] - - @classmethod - def get_new_aktualisierungen_as_array(cls): - return [] diff --git a/src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_service.py b/src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_service.py deleted file mode 100644 index ac24c73ed5d8b29f105d199fa1c27dfbc140efcd..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_service.py +++ /dev/null @@ -1,87 +0,0 @@ -from flask import flash - -from database import app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig -from covid19.blueprints.application.application_service_download import ApplicationServiceDownload -from covid19.blueprints.rki.rki_bundeslaender.rki_bundeslaender_service_import import RkiBundeslaenderServiceImport -from covid19.blueprints.rki.rki_bundeslaender.rki_bundeslaender_service_update import RkiBundeslaenderServiceUpdate - - -class RkiBundeslaenderService: - def __init__(self, database): - app.logger.debug("------------------------------------------------------------") - app.logger.debug(" RKI Service [init]") - app.logger.debug("------------------------------------------------------------") - self.__database = database - self.cfg = ApplicationServiceConfig.create_config_for_rki_bundeslaender() - self.service_download = ApplicationServiceDownload(database, self.cfg) - self.service_import = RkiBundeslaenderServiceImport(database, self.cfg) - self.service_update = RkiBundeslaenderServiceUpdate(database, self.cfg) - app.logger.debug("------------------------------------------------------------") - app.logger.info(" RKI Service [ready]") - - def pretask_database_drop_create(self): - flash("RkiBundeslaenderService.pretask_database_drop_create started") - app.logger.info("RkiBundeslaenderService.pretask_database_drop_create started") - self.service_download.download_file() - app.logger.info("RkiBundeslaenderService.pretask_database_drop_create done") - flash("RkiBundeslaenderService.pretask_database_drop_create done") - return self - - def task_database_drop_create(self): - app.logger.info("RkiBundeslaenderService.task_database_drop_create started") - self.service_import.import_file() - self.service_update.update_star_schema_initial() - app.logger.info("RkiBundeslaenderService.task_database_drop_create done") - return self - - def run_download_only(self): - flash("RkiBundeslaenderService.run_download_only started") - self.service_download.download_file() - return self - - def run_import_only(self): - self.service_import.import_file() - return self - - def run_update_dimension_tables_only(self): - self.service_update.update_dimension_tables_only() - return self - - def run_update_fact_table_incremental_only(self): - self.service_update.update_fact_table_incremental_only() - return self - - def run_update_fact_table_initial_only(self): - self.service_update.update_fact_table_initial_only() - return self - - def run_update_star_schema_incremental(self): - self.service_import.import_file() - self.service_update.update_star_schema_incremental() - return self - - def run_update_star_schema_initial(self): - self.service_import.import_file() - self.service_update.update_star_schema_initial() - return self - - def download_all_files(self): - self.service_download.download_file() - return self - - def task_import_all_files(self): - self.service_import.import_file() - return self - - def update_dimension_tables_only(self): - self.service_update.update_dimension_tables_only() - return self - - def update_fact_table_initial_only(self): - self.service_update.update_fact_table_initial_only() - return self - - def update_fact_table_incremental_only(self): - self.service_update.update_fact_table_incremental_only() - return self diff --git a/src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_views.py b/src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_views.py deleted file mode 100644 index 881b5d438b217fead0f56a1601ac12477f22369a..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_views.py +++ /dev/null @@ -1,176 +0,0 @@ -from flask import render_template, redirect, url_for, flash, Blueprint -from sqlalchemy.exc import OperationalError -from flask_admin.contrib.sqla import ModelView -from celery import states - -from database import app, admin, db -from covid19.blueprints.application.application_workers import celery -from covid19.blueprints.application.application_services import rki_service_bundeslaender -from covid19.blueprints.rki.rki_bundeslaender.rki_bundeslaender_model import RkiBundeslaender -from covid19.blueprints.rki.rki_bundeslaender.rki_bundeslaender_model_import import RkiBundeslaenderImport -from covid19.blueprints.application.application_model_transient import ApplicationPage - -drop_and_create_data_again = True - -app_rki_bundeslaender = Blueprint( - 'rki_bundeslaender', __name__, template_folder='templates', url_prefix='/rki/bundeslaender') - - -admin.add_view(ModelView(RkiBundeslaenderImport, db.session, category="RKI Cases and Deaths")) -admin.add_view(ModelView(RkiBundeslaender, db.session, category="RKI Cases and Deaths")) - - -# --------------------------------------------------------------------------------------------------------------- -# Url Routes Frontend -# --------------------------------------------------------------------------------------------------------------- - - -@app_rki_bundeslaender.route('/info') -def url_rki_bundeslaender_info(): - page_info = ApplicationPage('RKI', "Info") - return render_template( - 'rki_bundeslaender/rki_bundeslaender_info.html', - page_info=page_info) - - -@app_rki_bundeslaender.route('/tasks') -def url_rki_bundeslaender_tasks(): - page_info = ApplicationPage('RKI', "Tasks") - return render_template( - 'rki_bundeslaender/rki_bundeslaender_tasks.html', - page_info=page_info) - - -@app_rki_bundeslaender.route('/imported/page/<int:page>') -@app_rki_bundeslaender.route('/imported') -def url_rki_bundeslaender_imported(page=1): - page_info = ApplicationPage('RKI', "Last Import") - try: - page_data = RkiBundeslaenderImport.get_all_as_page(page) - except OperationalError: - flash("No data in the database.") - page_data = None - return render_template( - 'rki_bundeslaender/rki_bundeslaender_imported.html', - page_data=page_data, - page_info=page_info) - - -@app_rki_bundeslaender.route('/test/page/<int:page>') -@app_rki_bundeslaender.route('/test') -def url_rki_bundeslaender_test(page=1): - page_info = ApplicationPage('RKI', "TEST") - try: - page_data = RkiBundeslaenderImport.get_all_as_page(page) - except OperationalError: - flash("No data in the database.") - page_data = None - return render_template( - 'rki_bundeslaender/rki_bundeslaender_test.html', - page_data=page_data, - page_info=page_info) - - -# ------------------------------------------------------------------------ -# Celery TASKS -# ------------------------------------------------------------------------ - - -@celery.task(bind=True) -def task_rki_bundeslaender_task_update_starschema_initial(self): - self.update_state(state=states.STARTED) - rki_service_bundeslaender.run_update_star_schema_incremental() - self.update_state(state=states.SUCCESS) - result = "OK (task_rki_bundeslaender_task_update_starschema_initial)" - return result - - -@celery.task(bind=True) -def task_rki_bundeslaender_task_update_starschema_incremental(self): - self.update_state(state=states.STARTED) - rki_service_bundeslaender.run_update_star_schema_incremental() - self.update_state(state=states.SUCCESS) - result = "OK (task_rki_bundeslaender_task_update_starschema_incremental)" - return result - - -@celery.task(bind=True) -def task_rki_bundeslaender_task_import_only(self): - self.update_state(state=states.STARTED) - rki_service_bundeslaender.run_import_only() - self.update_state(state=states.SUCCESS) - result = "OK (task_rki_bundeslaender_task_import_only)" - return result - - -@celery.task(bind=True) -def task_rki_bundeslaender_task_update_facttable_incremental_only(self): - self.update_state(state=states.STARTED) - rki_service_bundeslaender.run_update_fact_table_incremental_only() - self.update_state(state=states.SUCCESS) - result = "OK (task_rki_bundeslaender_task_update_facttable_incremental_only)" - return result - - -@celery.task(bind=True) -def task_rki_bundeslaender_task_update_facttable_initial_only(self): - self.update_state(state=states.STARTED) - rki_service_bundeslaender.full_update_fact_table() - self.update_state(state=states.SUCCESS) - result = "OK (task_rki_bundeslaender_task_update_facttable_initial_only)" - return result - -# ------------------------------------------------------------------------ -# URL Routes for Celery TASKS -# ------------------------------------------------------------------------ - - -@app_rki_bundeslaender.route('/task/update/star_schema/initial') -def url_rki_bundeslaender_task_update_starschema_initial(): - app.logger.info("url_rki_bundeslaender_task_update_starschema_initial [start]") - rki_service_bundeslaender.run_download_only() - task_rki_bundeslaender_task_update_starschema_initial.apply_async() - return redirect(url_for('rki_bundeslaender.url_rki_tasks')) - - -@app_rki_bundeslaender.route('/task/update/star_schema/incremental') -def url_rki_bundeslaender_task_update_starschema_incremental(): - app.logger.info("url_rki_bundeslaender_task_update_starschema_incremental [start]") - rki_service_bundeslaender.run_download_only() - task_rki_bundeslaender_task_update_starschema_incremental.apply_async() - return redirect(url_for('rki_bundeslaender.url_rki_tasks')) - - -@app_rki_bundeslaender.route('/task/download/only') -def url_rki_bundeslaender_task_download_only(): - app.logger.info("url_rki_bundeslaender_task_download_only [start]") - rki_service_bundeslaender.run_download_only() - return redirect(url_for('rki_bundeslaender.url_rki_tasks')) - - -@app_rki_bundeslaender.route('/task/import/only') -def url_rki_bundeslaender_task_import_only(): - app.logger.info("url_rki_bundeslaender_task_import_only [start]") - task_rki_bundeslaender_task_import_only.apply_async() - return redirect(url_for('rki_bundeslaender.url_rki_tasks')) - - -@app_rki_bundeslaender.route('/task/update/dimension-tables/only') -def url_rki_bundeslaender_task_update_dimensiontables_only(): - app.logger.info("url_rki_bundeslaender_task_update_dimensiontables_only [start]") - task_rki_bundeslaender_task_import_only.apply_async() - return redirect(url_for('rki_bundeslaender.url_rki_tasks')) - - -@app_rki_bundeslaender.route('/task/update/fact-table/incremental/only') -def url_rki_bundeslaender_task_update_facttable_incremental_only(): - app.logger.info("url_rki_bundeslaender_task_update_facttable_incremental_only [start]") - task_rki_bundeslaender_task_update_facttable_incremental_only.apply_async() - return redirect(url_for('rki_bundeslaender.url_rki_tasks')) - - -@app_rki_bundeslaender.route('/task/update/fact-table/initial/only') -def url_rki_bundeslaender_task_update_facttable_initial_only(): - app.logger.info("url_rki_bundeslaender_task_update_facttable_initial_only [start]") - task_rki_bundeslaender_task_update_facttable_initial_only.apply_async() - return redirect(url_for('rki_bundeslaender.url_rki_tasks')) diff --git a/src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/navigation/rki_bundeslaender_navtabs.html b/src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/navigation/rki_bundeslaender_navtabs.html deleted file mode 100644 index 040f1437d33f18c85199aa218e4a22b2241cd9c6..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/navigation/rki_bundeslaender_navtabs.html +++ /dev/null @@ -1,25 +0,0 @@ - <div class="container"> - <div class="row-cols-1"> - <nav> - <ul class="nav nav-tabs"> - <li class="nav-item"> - <a class="nav-link" - href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_info') }}"> - RKI Bundeslaender Info - </a> - </li> - <li class="nav-item"> - <a class="nav-link" href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_tasks') }}"> - RKI Bundeslaender tasks - </a> - </li> - <li class="nav-item"> - <a class="nav-link" - href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_imported') }}"> - RKI Bundeslaender imported - </a> - </li> - </ul> - </nav> - </div> - </div> \ No newline at end of file diff --git a/src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/rki_bundeslaender_tasks.html b/src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/rki_bundeslaender_tasks.html deleted file mode 100644 index b62f99707cecd0a16169ac998eb132d4362a9006..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/rki_bundeslaender_tasks.html +++ /dev/null @@ -1,57 +0,0 @@ -{% extends 'application/page_layout.html' %} - -{% block content %} - {{super()}} - {% include 'rki_bundeslaender/navigation/rki_bundeslaender_navtabs.html' %} - - <div class="container"> - <div class="row"> - <div class="col"> - <h3>Bundeslaender</h3> - </div> - </div> - <div class="row"> - <div class="col"> - <div class="btn-group-vertical" role="group" aria-label="Views"> - <a class="btn btn-danger btn-lg btn-block text-left" - href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_test') }}" - role="button">RKI :: Bundeslaender :: TEST</a> - <a class="btn btn-primary btn-lg btn-block text-left" - href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_task_update_starschema_initial') }}" - role="button">RKI :: Bundeslaender :: Task :: update :: star_schema :: initial</a> - <a class="btn btn-primary btn-lg btn-block text-left" - href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_task_update_starschema_incremental') }}" - role="button">RKI :: Bundeslaender :: Task :: update :: star_schema :: incremental</a> - </div> - </div> - <div class="col"> - <div class="btn-group-vertical" role="group" aria-label="Views"> - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_task_download_only') }}" - role="button">RKI :: Bundeslaender :: Task :: download :: only</a> - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_task_import_only') }}" - role="button">RKI :: Bundeslaender :: Task :: import :: only</a> - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_task_update_dimensiontables_only') }}" - role="button">RKI :: Bundeslaender :: Task :: update :: dimension-tables : only</a> - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_task_update_facttable_incremental_only') }}" - role="button">RKI :: Bundeslaender :: Task :: update :: fact-table :: only :: incremental</a> - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_task_update_facttable_initial_only') }}" - role="button">RKI :: Bundeslaender :: Task :: update :: fact-table :: only :: initial</a> - </div> - </div> - </div> - </div> -{% endblock %} - - - -{% block footer_container %} - -{% endblock %} - - - diff --git a/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_model.py b/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_model.py deleted file mode 100644 index b5acfbd58a8ad4c68d683ee06f15c7d8929a285e..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_model.py +++ /dev/null @@ -1,79 +0,0 @@ -from database import db, ITEMS_PER_PAGE - - -class RkiLandkreise(db.Model): - __tablename__ = 'rki_landkreise' - - id = db.Column(db.Integer, primary_key=True) - - objectid = db.Column(db.Integer, nullable=False) - ade = db.Column(db.Integer, nullable=False) - gf = db.Column(db.Integer, nullable=False) - bsg = db.Column(db.Integer, nullable=False) - rs = db.Column(db.String(255), nullable=False) - ags = db.Column(db.String(255), nullable=False) - sdv_rs = db.Column(db.String(255), nullable=False) - gen = db.Column(db.String(255), nullable=False) - bez = db.Column(db.String(255), nullable=False) - ibz = db.Column(db.Integer, nullable=False) - - bem = db.Column(db.String(255), nullable=False) - nbd = db.Column(db.String(255), nullable=False) - sn_l = db.Column(db.String(255), nullable=False) - sn_r = db.Column(db.Integer, nullable=False) - sn_k = db.Column(db.String(255), nullable=False) - sn_v1 = db.Column(db.String(255), nullable=False) - sn_v2 = db.Column(db.String(255), nullable=False) - sn_g = db.Column(db.String(255), nullable=False) - fk_s3 = db.Column(db.String(255), nullable=False) - nuts = db.Column(db.String(255), nullable=False) - - rs_0 = db.Column(db.String(255), nullable=False) - ags_0 = db.Column(db.Integer, nullable=False) - wsk = db.Column(db.Float, nullable=False) - ewz = db.Column(db.Integer, nullable=False) - kfl = db.Column(db.Float, nullable=False) - debkg_id = db.Column(db.String(255), nullable=False) - death_rate = db.Column(db.Float, nullable=False) - cases = db.Column(db.Integer, nullable=False) - deaths = db.Column(db.Integer, nullable=False) - cases_per_100k = db.Column(db.Float, nullable=False) - - cases_per_population = db.Column(db.Float, nullable=False) - bl = db.Column(db.String(255), nullable=False) - bl_id = db.Column(db.Integer, nullable=False) - county = db.Column(db.String(255), nullable=False) - last_update = db.Column(db.String(255), nullable=False) - - cases7_per_100k = db.Column(db.Float, nullable=False) - recovered = db.Column(db.Integer, nullable=False) - ewz_bl = db.Column(db.Integer, nullable=False) - cases7_bl_per_100k = db.Column(db.Float, nullable=False) - - cases7_bl = db.Column(db.Integer, nullable=False) - death7_bl = db.Column(db.Integer, nullable=False) - cases7_lk = db.Column(db.Integer, nullable=False) - death7_lk = db.Column(db.Integer, nullable=False) - cases7_per_100k_txt = db.Column(db.String(255), nullable=False) - adm_unit_id = db.Column(db.Integer, nullable=False) - shape_length = db.Column(db.Float, nullable=False) - shape_area = db.Column(db.Float, nullable=False) - - @classmethod - def remove_all(cls): - for one in cls.get_all(): - db.session.delete(one) - db.session.commit() - return None - - @classmethod - def get_all_as_page(cls, page): - return db.session.query(cls).paginate(page, per_page=ITEMS_PER_PAGE) - - @classmethod - def get_all(cls): - return db.session.query(cls).all() - - @classmethod - def get_by_id(cls, other_id): - return db.session.query(cls).filter(cls.id == other_id).one() diff --git a/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_model_import.py b/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_model_import.py deleted file mode 100644 index ade954db7f16dcc77957fa5ca5180eff84b8dab8..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_model_import.py +++ /dev/null @@ -1,91 +0,0 @@ -from database import db, ITEMS_PER_PAGE - -# OBJECTID,ADE,GF,BSG,RS,AGS,SDV_RS,GEN,BEZ,IBZ,BEM,NBD,SN_L,SN_R,SN_K,SN_V1,SN_V2,SN_G,FK_S3,NUTS,RS_0,AGS_0,WSK,EWZ,KFL,DEBKG_ID,death_rate,cases,deaths,cases_per_100k,cases_per_population,BL,BL_ID,county,last_update,cases7_per_100k,recovered,EWZ_BL,cases7_bl_per_100k,cases7_bl,death7_bl,cases7_lk,death7_lk,cases7_per_100k_txt,AdmUnitId,SHAPE_Length,SHAPE_Area - - -class RkiLandkreiseImport(db.Model): - __tablename__ = 'application__import__rki_landkreise' - - id = db.Column(db.Integer, primary_key=True) - OBJECTID = db.Column(db.String(255), nullable=False) - ADE = db.Column(db.String(255), nullable=False) - GF = db.Column(db.String(255), nullable=False) - BSG = db.Column(db.String(255), nullable=False) - RS = db.Column(db.String(255), nullable=False) - AGS = db.Column(db.String(255), nullable=False) - SDV_RS = db.Column(db.String(255), nullable=False) - GEN = db.Column(db.String(255), nullable=False) - BEZ = db.Column(db.String(255), nullable=False) - IBZ = db.Column(db.String(255), nullable=False) - BEM = db.Column(db.String(255), nullable=False) - NBD = db.Column(db.String(255), nullable=False) - SN_L = db.Column(db.String(255), nullable=False) - SN_R = db.Column(db.String(255), nullable=False) - SN_K = db.Column(db.String(255), nullable=False) - SN_V1 = db.Column(db.String(255), nullable=False) - SN_V2 = db.Column(db.String(255), nullable=False) - SN_G = db.Column(db.String(255), nullable=False) - FK_S3 = db.Column(db.String(255), nullable=False) - NUTS = db.Column(db.String(255), nullable=False) - RS_0 = db.Column(db.String(255), nullable=False) - AGS_0 = db.Column(db.String(255), nullable=False) - WSK = db.Column(db.String(255), nullable=False) - EWZ = db.Column(db.String(255), nullable=False) - KFL = db.Column(db.String(255), nullable=False) - DEBKG_ID = db.Column(db.String(255), nullable=False) - death_rate = db.Column(db.String(255), nullable=False) - cases = db.Column(db.String(255), nullable=False) - deaths = db.Column(db.String(255), nullable=False) - cases_per_100k = db.Column(db.String(255), nullable=False) - cases_per_population = db.Column(db.String(255), nullable=False) - BL = db.Column(db.String(255), nullable=False) - BL_ID = db.Column(db.String(255), nullable=False) - county = db.Column(db.String(255), nullable=False) - last_update = db.Column(db.String(255), nullable=False) - cases7_per_100k = db.Column(db.String(255), nullable=False) - recovered = db.Column(db.String(255), nullable=False) - EWZ_BL = db.Column(db.String(255), nullable=False) - cases7_bl_per_100k = db.Column(db.String(255), nullable=False) - cases7_bl = db.Column(db.String(255), nullable=False) - death7_bl = db.Column(db.String(255), nullable=False) - cases7_lk = db.Column(db.String(255), nullable=False) - death7_lk = db.Column(db.String(255), nullable=False) - cases7_per_100k_txt = db.Column(db.String(255), nullable=False) - AdmUnitId = db.Column(db.String(255), nullable=False) - SHAPE_Length = db.Column(db.String(255), nullable=False) - SHAPE_Area = db.Column(db.String(255), nullable=False) - - @classmethod - def remove_all(cls): - for one in cls.get_all(): - db.session.delete(one) - db.session.commit() - return None - - @classmethod - def get_all_as_page(cls, page): - return db.session.query(cls).paginate(page, per_page=ITEMS_PER_PAGE) - - @classmethod - def get_all(cls): - return db.session.query(cls).all() - - @classmethod - def get_by_id(cls, other_id): - return db.session.query(cls).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 find_by_last_update(cls, last_update_from_import: str): - return [] - - @classmethod - def get_last_updates(cls): - return [] - - @classmethod - def get_new_last_update_as_array(cls): - return [] diff --git a/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_service.py b/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_service.py deleted file mode 100644 index 5e37deb6ef5a7ee76a8978b75b898a94e8a65b26..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_service.py +++ /dev/null @@ -1,81 +0,0 @@ -from flask import flash - -from database import app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig -from covid19.blueprints.application.application_service_download import ApplicationServiceDownload -from covid19.blueprints.rki.rki_landkreise.rki_landkreise_service_import import RkiLandkreiseServiceImport -from covid19.blueprints.rki.rki_landkreise.rki_landkreise_service_update import RkiLandkreiseServiceUpdate - - -class RkiLandkreiseService: - def __init__(self, database): - app.logger.debug("------------------------------------------------------------") - app.logger.debug(" RkiLandkreiseService [init]") - app.logger.debug("------------------------------------------------------------") - self.__database = database - self.cfg = ApplicationServiceConfig.create_config_for_rki_landkreise() - self.service_download = ApplicationServiceDownload(database, self.cfg) - self.service_import = RkiLandkreiseServiceImport(database, self.cfg) - self.service_update = RkiLandkreiseServiceUpdate(database, self.cfg) - app.logger.debug("------------------------------------------------------------") - app.logger.info(" RkiLandkreiseService [ready]") - - def pretask_database_drop_create(self): - flash("RkiLandkreiseService.pretask_database_drop_create started") - self.service_download.download_file() - return self - - def task_database_drop_create(self): - self.service_import.import_file() - self.service_update.update_star_schema_initial() - return self - - def run_download_only(self): - self.service_download.download_file() - return self - - def run_import_only(self): - self.service_import.import_file() - return self - - def run_update_dimension_tables_only(self): - self.service_update.update_dimension_tables_only() - return self - - def run_update_fact_table_incremental_only(self): - self.service_update.update_fact_table_incremental_only() - return self - - def run_update_fact_table_initial_only(self): - self.service_update.update_fact_table_initial_only() - return self - - def run_update_star_schema_incremental(self): - self.service_import.import_file() - self.service_update.update_star_schema_incremental() - return self - - def run_update_star_schema_initial(self): - self.service_import.import_file() - self.service_update.update_star_schema_initial() - return self - - def download_all_files(self): - self.service_download.download_file() - return self - - def task_import_all_files(self): - self.service_import.import_file() - return self - - def update_dimension_tables_only(self): - self.service_update.update_dimension_tables_only() - return self - - def update_fact_table_initial_only(self): - self.service_update.update_fact_table_initial_only() - return self - - def update_fact_table_incremental_only(self): - self.service_update.update_fact_table_incremental_only() - return self diff --git a/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_service_import.py b/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_service_import.py deleted file mode 100644 index 44e8bdfffd5d4289e9e5c534f4553ef5e751ed6b..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_service_import.py +++ /dev/null @@ -1,105 +0,0 @@ -import csv -import psycopg2 - -from database import db, app - -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig -from covid19.blueprints.rki.rki_landkreise.rki_landkreise_model_import import RkiLandkreiseImport - - -class RkiLandkreiseServiceImport: - def __init__(self, database, config: ApplicationServiceConfig): - app.logger.debug("------------------------------------------------------------") - app.logger.debug(" RKI Landkreise Service Import [init]") - app.logger.debug("------------------------------------------------------------") - self.__database = database - self.cfg = config - app.logger.debug("------------------------------------------------------------") - app.logger.debug(" RKI Landkreise Service Import [ready]") - - # TODO: BUG: RkiLandkreiseServiceImport.import_file #178 - def import_file(self): - app.logger.info(" RKI Landkreise Service Import - import_file [begin]") - app.logger.info("------------------------------------------------------------") - app.logger.info(" import into TABLE: "+self.cfg.tablename+" from "+self.cfg.cvsfile_path) - app.logger.info("------------------------------------------------------------") - row = None - try: - RkiLandkreiseImport.remove_all() - with open(self.cfg.cvsfile_path, newline='\n') as csv_file: - file_reader = csv.DictReader(csv_file, delimiter=',', quotechar='"') - k = 0 - for row in file_reader: - k += 1 - o = RkiLandkreiseImport( - OBJECTID=row['OBJECTID'], - ADE=row['ADE'], - GF=row['GF'], - BSG=row['BSG'], - RS=row['RS'], - AGS=row['AGS'], - SDV_RS=row['SDV_RS'], - GEN=row['GEN'], - BEZ=row['BEZ'], - IBZ=row['IBZ'], - BEM=row['BEM'], - NBD=row['NBD'], - SN_L=row['SN_L'], - SN_R=row['SN_R'], - SN_K=row['SN_K'], - SN_V1=row['SN_V1'], - SN_V2=row['SN_V2'], - SN_G=row['SN_G'], - FK_S3=row['FK_S3'], - NUTS=row['NUTS'], - RS_0=row['RS_0'], - AGS_0=row['AGS_0'], - WSK=row['WSK'], - EWZ=row['EWZ'], - KFL=row['KFL'], - DEBKG_ID=row['DEBKG_ID'], - death_rate=row['death_rate'], - cases=row['cases'], - deaths=row['deaths'], - cases_per_100k=row['cases_per_100k'], - cases_per_population=row['cases_per_population'], - BL=row['BL'], - BL_ID=row['BL_ID'], - county=row['county'], - last_update=row['last_update'], - cases7_per_100k=row['cases7_per_100k'], - recovered=row['recovered'], - EWZ_BL=row['EWZ_BL'], - cases7_bl_per_100k=row['cases7_bl_per_100k'], - cases7_bl=row['cases7_bl'], - death7_bl=row['death7_bl'], - cases7_lk=row['cases7_lk'], - death7_lk=row['death7_lk'], - cases7_per_100k_txt=row['cases7_per_100k_txt'], - AdmUnitId=row['AdmUnitId'], - SHAPE_Length=row['SHAPE_Length'], - SHAPE_Area=row['SHAPE_Area'], - ) - db.session.add(o) - if (k % 2000) == 0: - db.session.commit() - app.logger.info(" import import_file ... " + str(k) + " rows") - db.session.commit() - app.logger.info(" import import_file ... " + str(k) + " rows total") - except KeyError as error: - app.logger.warning("WARN: RKI Landkreise Service Import - import_file [begin]") - app.logger.warning(":::"+str(error)+":::") - for item_key, item_value in row.items(): - app.logger.warning(item_key+" : "+item_value) - app.logger.warning("WARN: RKI Landkreise Service Import - import_file [end]") - except (Exception, psycopg2.DatabaseError) as error: - app.logger.warning("WARN: RKI Landkreise Service Import - import_file [begin]") - app.logger.warning(error) - app.logger.warning("WARN: RKI Landkreise Service Import - import_file [end]") - finally: - app.logger.info("") - app.logger.info("------------------------------------------------------------") - app.logger.info(" imported into TABLE: "+self.cfg.tablename+" from "+self.cfg.cvsfile_path) - app.logger.info("------------------------------------------------------------") - app.logger.info(" RKI Landkreise Service Import - import_file [done]") - return self diff --git a/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_service_update.py b/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_service_update.py deleted file mode 100644 index 61056413b88b7cd2a6eda9f6ddcd815b856aa80c..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_service_update.py +++ /dev/null @@ -1,199 +0,0 @@ -from database import db, app - -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig -from covid19.blueprints.application.application_model import RkiDateReported -from covid19.blueprints.rki.rki_landkreise.rki_landkreise_model import RkiLandkreise -from covid19.blueprints.rki.rki_landkreise.rki_landkreise_model_import import RkiLandkreiseImport - - -class RkiLandkreiseServiceUpdate: - def __init__(self, database, config: ApplicationServiceConfig): - app.logger.debug("------------------------------------------------------------") - app.logger.debug(" RKI Service Update [init]") - app.logger.debug("------------------------------------------------------------") - self.__database = database - self.cfg = config - app.logger.debug("------------------------------------------------------------") - app.logger.debug(" RKI Service Update [ready]") - - def __update_date_reported(self): - app.logger.info(" update RkiLandkreiseServiceUpdate [begin]") - app.logger.info("------------------------------------------------------------") - i = 0 - for last_update in RkiLandkreiseImport.get_last_updates(): - i += 1 - output = " [ " + str(i) + " ] " + last_update - c = RkiDateReported.find_by_date_reported(last_update) - if c is None: - o = RkiDateReported.create_new_object_factory(aktualisierung=last_update) - db.session.add(o) - db.session.commit() - output += " added" - else: - output += " NOT added " + str(c.id) - app.logger.info(output) - app.logger.info("") - app.logger.info(" update RkiLandkreiseServiceUpdate [done]") - app.logger.info("------------------------------------------------------------") - return self - - def __update_data_incremental(self): - app.logger.info(" update RkiLandkreiseServiceUpdate short [begin]") - app.logger.info("------------------------------------------------------------") - new_dates_reported_from_import = RkiLandkreiseImport.get_new_last_update_as_array() - i = 0 - for my_date_reported in new_dates_reported_from_import: - my_date = RkiDateReported.find_by_date_reported(my_date_reported) - for result_item in RkiLandkreiseImport.find_by_last_update(my_date_reported): - o = RkiLandkreise( - objectid=int(result_item.objectid), - ade=int(result_item.ade), - gf=int(result_item.gf), - bsg=int(result_item.bsg), - rs=result_item.rs, - ags=result_item.ags, - sdv_rs=result_item.sdv_rs, - gen=result_item.gen, - bez=result_item.bez, - ibz=int(result_item.ibz), - bem=result_item.bem, - nbd=result_item.nbd, - sn_l=result_item.sn_l, - sn_r=int(result_item.sn_r), - sn_k=result_item.sn_k, - sn_v1=result_item.sn_v1, - sn_v2=result_item.sn_v2, - sn_g=result_item.sn_g, - fk_s3=result_item.fk_s3, - nuts=result_item.nuts, - rs_0=result_item.rs_0, - ags_0=int(result_item.ags_0), - wsk=int(result_item.wsk), - ewz=int(result_item.ewz), - kfl=int(result_item.kfl), - debkg_id=result_item.debkg_id, - death_rate=int(result_item.death_rate), - cases=int(result_item.cases), - deaths=int(result_item.deaths), - cases_per_100k=int(result_item.cases_per_100k), - cases_per_population=float(result_item.cases_per_population), - bl=result_item.bl, - bl_id=result_item.bl_id, - county=result_item.county, - last_update=result_item.last_update, - cases7_per_100k=int(result_item.cases7_per_100k), - recovered=int(result_item.recovered), - ewz_bl=int(result_item.ewz_bl), - cases7_bl_per_100k=float(result_item.cases7_bl_per_100k), - cases7_bl=int(result_item.cases7_bl), - death7_bl=int(result_item.death7_bl), - cases7_lk=int(result_item.cases7_lk), - death7_lk=int(result_item.death7_lk), - cases7_per_100k_txt=result_item.cases7_per_100k_txt, - adm_unit_id=int(result_item.adm_unit_id), - shape_length=float(result_item.shape_length), - shape_area=float(result_item.shape_area), - ) - db.session.add(o) - i += 1 - if i % 500 == 0: - app.logger.info(" update RkiLandkreiseServiceUpdate short ... "+str(i)+" rows") - db.session.commit() - db.session.commit() - app.logger.info(" update RkiLandkreiseServiceUpdate short : "+str(i)+" total rows") - app.logger.info(" update RkiLandkreiseServiceUpdate short [done]") - app.logger.info("------------------------------------------------------------") - return self - - def __update_data_initial(self): - app.logger.info(" update RkiLandkreiseServiceUpdate initial [begin]") - app.logger.info("------------------------------------------------------------") - RkiLandkreise.remove_all() - last_updates_from_import = RkiLandkreiseImport.get_last_updates() - i = 0 - for last_update_from_import in last_updates_from_import: - my_date = RkiDateReported.find_by_date_reported(last_update_from_import) - for result_item in RkiLandkreiseImport.find_by_last_update(last_update_from_import): - o = RkiLandkreise( - objectid=int(result_item.objectid), - ade=int(result_item.ade), - gf=int(result_item.gf), - bsg=int(result_item.bsg), - rs=result_item.rs, - ags=result_item.ags, - sdv_rs=result_item.sdv_rs, - gen=result_item.gen, - bez=result_item.bez, - ibz=int(result_item.ibz), - bem=result_item.bem, - nbd=result_item.nbd, - sn_l=result_item.sn_l, - sn_r=int(result_item.sn_r), - sn_k=result_item.sn_k, - sn_v1=result_item.sn_v1, - sn_v2=result_item.sn_v2, - sn_g=result_item.sn_g, - fk_s3=result_item.fk_s3, - nuts=result_item.nuts, - rs_0=result_item.rs_0, - ags_0=int(result_item.ags_0), - wsk=int(result_item.wsk), - ewz=int(result_item.ewz), - kfl=int(result_item.kfl), - debkg_id=result_item.debkg_id, - death_rate=int(result_item.death_rate), - cases=int(result_item.cases), - deaths=int(result_item.deaths), - cases_per_100k=int(result_item.cases_per_100k), - cases_per_population=float(result_item.cases_per_population), - bl=result_item.bl, - bl_id=result_item.bl_id, - county=result_item.county, - last_update=result_item.last_update, - cases7_per_100k=int(result_item.cases7_per_100k), - recovered=int(result_item.recovered), - ewz_bl=int(result_item.ewz_bl), - cases7_bl_per_100k=float(result_item.cases7_bl_per_100k), - cases7_bl=int(result_item.cases7_bl), - death7_bl=int(result_item.death7_bl), - cases7_lk=int(result_item.cases7_lk), - death7_lk=int(result_item.death7_lk), - cases7_per_100k_txt=result_item.cases7_per_100k_txt, - adm_unit_id=int(result_item.adm_unit_id), - shape_length=float(result_item.shape_length), - shape_area=float(result_item.shape_area), - ) - db.session.add(o) - i += 1 - if i % 500 == 0: - app.logger.info(" update RkiLandkreiseServiceUpdate initial ... "+str(i)+" rows") - db.session.commit() - db.session.commit() - app.logger.info(" update RkiLandkreiseServiceUpdate initial : "+str(i)+" total rows") - app.logger.info(" update RkiLandkreiseServiceUpdate initial [done]") - app.logger.info("------------------------------------------------------------") - return self - - def update_dimension_tables_only(self): - self.__update_date_reported() - return self - - def update_fact_table_incremental_only(self): - self.__update_data_incremental() - return self - - def update_fact_table_initial_only(self): - self.__update_data_initial() - return self - - def update_star_schema_incremental(self): - self.__update_date_reported() - self.__update_data_incremental() - return self - - def update_star_schema_initial(self): - self.__update_date_reported() - self.__update_data_initial() - return self - - diff --git a/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_views.py b/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_views.py deleted file mode 100644 index 2897819303e0509f374731100c9f1392a7d54b18..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_landkreise/rki_landkreise_views.py +++ /dev/null @@ -1,186 +0,0 @@ -from flask import render_template, redirect, url_for, flash, Blueprint -from sqlalchemy.exc import OperationalError -from flask_admin.contrib.sqla import ModelView -from celery import states - -from database import app, admin, db - -from covid19.blueprints.application.application_workers import celery -from covid19.blueprints.application.application_services import rki_service_landkreise -from covid19.blueprints.rki.rki_landkreise.rki_landkreise_model import RkiLandkreise -from covid19.blueprints.rki.rki_landkreise.rki_landkreise_model_import import RkiLandkreiseImport -from covid19.blueprints.application.application_model_transient import ApplicationPage - -drop_and_create_data_again = True - - -app_rki_landkreise = Blueprint( - 'rki_landkreise', __name__, - template_folder='templates', - url_prefix='/rki/landkreise' -) - -admin.add_view(ModelView(RkiLandkreiseImport, db.session, category="RKI Cases and Deaths")) -admin.add_view(ModelView(RkiLandkreise, db.session, category="RKI Cases and Deaths")) - - -# --------------------------------------------------------------------------------------------------------------- -# Url Routes Frontend -# --------------------------------------------------------------------------------------------------------------- - -@app_rki_landkreise.route('/info') -def url_rki_landkreise_info(): - page_info = ApplicationPage('RKI', "Info") - return render_template( - 'rki_landkreise/rki_landkreise_info.html', - page_info=page_info) - - -@app_rki_landkreise.route('/tasks') -def url_rki_landkreise_tasks(): - page_info = ApplicationPage('RKI', "Tasks") - return render_template( - 'rki_landkreise/rki_landkreise_tasks.html', - page_info=page_info) - - -@app_rki_landkreise.route('/landkreise/imported/page/<int:page>') -@app_rki_landkreise.route('/landkreise/imported') -def url_rki_landkreise_imported(page=1): - page_info = ApplicationPage('RKI', "Last Import") - try: - page_data = RkiLandkreiseImport.get_all_as_page(page) - except OperationalError: - flash("No data in the database.") - page_data = None - return render_template( - 'rki_landkreise/rki_landkreise_imported.html', - page_data=page_data, - page_info=page_info) - -# ------------------------------------------------------------------------ -# Celery TASKS -# ------------------------------------------------------------------------ - - -@celery.task(bind=True) -def task_rki_landkreise_task_update_starschema_initial(self): - self.update_state(state=states.STARTED) - rki_service_landkreise.run_update_star_schema_initial() - self.update_state(state=states.SUCCESS) - result = "OK (task_rki_landkreise_task_update_starschema_initial)" - return result - - -@celery.task(bind=True) -def task_rki_landkreise_task_update_starschema_incremental(self): - self.update_state(state=states.STARTED) - rki_service_landkreise.run_update_star_schema_incremental() - self.update_state(state=states.SUCCESS) - result = "OK (task_rki_landkreise_task_update_starschema_incremental)" - return result - - -@celery.task(bind=True) -def task_rki_landkreise_task_import_only(self): - self.update_state(state=states.STARTED) - rki_service_landkreise.run_import_only() - self.update_state(state=states.SUCCESS) - result = "OK (task_rki_bundeslaender_task_update_starschema_incremental)" - return result - - -@celery.task(bind=True) -def task_rki_landkreise_task_update_dimensiontables_only(self): - self.update_state(state=states.STARTED) - rki_service_landkreise.run_update_dimension_tables_only() - self.update_state(state=states.SUCCESS) - result = "OK (task_rki_landkreise_task_update_dimensiontables_only)" - return result - - -@celery.task(bind=True) -def task_rki_landkreise_task_update_facttable_incremental_only(self): - self.update_state(state=states.STARTED) - rki_service_landkreise.run_update_fact_table_initial_only() - self.update_state(state=states.SUCCESS) - result = "OK (task_rki_landkreise_task_update_facttable_incremental_only)" - return result - - -@celery.task(bind=True) -def task_rki_landkreise_task_update_facttable_initial_only(self): - self.update_state(state=states.STARTED) - rki_service_landkreise.run_update_fact_table_initial_only() - self.update_state(state=states.SUCCESS) - result = "OK (task_rki_landkreise_task_update_facttable_initial_only)" - return result - - -@celery.task(bind=True) -def task_url_rki_landkreise_task_update_dimension_tables_only(self): - self.update_state(state=states.STARTED) - rki_service_landkreise.run_update_star_schema_incremental() - self.update_state(state=states.SUCCESS) - result = "OK (task_url_rki_landkreise_task_update_dimension_tables_only)" - return result - -# ------------------------------------------------------------------------ -# URL Routes for Celery TASKS -# ------------------------------------------------------------------------ - - -@app_rki_landkreise.route('/landkreise/task/update/star_schema/initial') -def url_rki_landkreise_task_update_starschema_initial(): - app.logger.info("url_rki_landkreise_task_update_starschema_initial [start]") - task_rki_landkreise_task_update_starschema_initial.apply_async() - return redirect(url_for('rki_landkreise.url_rki_landkreise_tasks')) - - -@app_rki_landkreise.route('/landkreise/task/update/star_schema/incremental') -def url_rki_landkreise_task_update_starschema_incremental(): - app.logger.info("url_rki_landkreise_task_update_starschema_incremental [start]") - task_rki_landkreise_task_update_starschema_incremental.apply_async() - return redirect(url_for('rki_landkreise.url_rki_landkreise_tasks')) - - -@app_rki_landkreise.route('/landkreise/task/download/only') -def url_rki_landkreise_task_download_only(): - app.logger.info("url_rki_landkreise_task_download_only [start]") - rki_service_landkreise.run_download_only() - return redirect(url_for('rki_landkreise.url_rki_landkreise_tasks')) - - -@app_rki_landkreise.route('/landkreise/task/import/only') -def url_rki_landkreise_task_import_only(): - app.logger.info("url_rki_landkreise_task_import_only [start]") - task_rki_landkreise_task_import_only.apply_async() - return redirect(url_for('rki_landkreise.url_rki_landkreise_tasks')) - - -@app_rki_landkreise.route('/landkreise/task/update/dimension-tables/only') -def url_rki_landkreise_task_update_dimensiontables_only(): - app.logger.info("url_rki_landkreise_task_update_dimensiontables_only [start]") - task_rki_landkreise_task_update_dimensiontables_only.apply_async() - return redirect(url_for('rki_landkreise.url_rki_landkreise_tasks')) - - -@app_rki_landkreise.route('/landkreise/task/update/fact-table/incremental/only') -def url_rki_landkreise_task_update_facttable_incremental_only(): - app.logger.info("url_rki_landkreise_task_update_facttable_incremental_only [start]") - task_rki_landkreise_task_update_facttable_incremental_only.apply_async() - return redirect(url_for('rki_landkreise.url_rki_landkreise_tasks')) - - -@app_rki_landkreise.route('/landkreise/task/update/fact-table/initial/only') -def url_rki_landkreise_task_update_facttable_initial_only(): - app.logger.info("url_rki_landkreise_task_update_facttable_initial_only [start]") - task_rki_landkreise_task_update_facttable_initial_only.apply_async() - return redirect(url_for('rki_landkreise.url_rki_landkreise_tasks')) - - -@app_rki_landkreise.route('/task/update/dimension-tables/only') -def url_rki_landkreise_task_update_dimension_tables_only(): - app.logger.info("url_task_who_update_dimension_tables_only [start]") - task_url_rki_landkreise_task_update_dimension_tables_only.apply_async() - return redirect(url_for('rki_landkreise.url_rki_landkreise_tasks')) diff --git a/src/covid19/blueprints/rki/rki_landkreise/templates/rki_landkreise/navigation/rki_landkreise_navbar_dropdown.html b/src/covid19/blueprints/rki/rki_landkreise/templates/rki_landkreise/navigation/rki_landkreise_navbar_dropdown.html deleted file mode 100644 index 6d8725e9efd68de24b02c9e7eca99ad3d33762a1..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_landkreise/templates/rki_landkreise/navigation/rki_landkreise_navbar_dropdown.html +++ /dev/null @@ -1,31 +0,0 @@ - <li class="dropdown"> - <a class="dropdown-toggle nav-link" data-toggle="dropdown" href="javascript:void(0)"> - RKI Landkreise<i class="glyphicon glyphicon-chevron-down small"></i> - </a> - <ul class="dropdown-menu"> - <li> - <a class="dropdown-item" - href="{{ url_for( 'rki_landkreise.url_rki_landkreise_info') }}"> - RKI Landkreise - </a> - </li> - <li> - <div class="dropdown-divider"></div> - </li> - <li> - <a class="dropdown-item" - href="{{ url_for( 'rki_landkreise.url_rki_landkreise_imported') }}"> - RKI Landkreise imported - </a> - </li> - <li> - <div class="dropdown-divider"></div> - </li> - <li> - <a class="dropdown-item" - href="{{ url_for( 'rki_landkreise.url_rki_landkreise_tasks') }}"> - RKI Landkreise Tasks - </a> - </li> - </ul> - </li> diff --git a/src/covid19/blueprints/rki/rki_landkreise/templates/rki_landkreise/navigation/rki_landkreise_navtabs.html b/src/covid19/blueprints/rki/rki_landkreise/templates/rki_landkreise/navigation/rki_landkreise_navtabs.html deleted file mode 100644 index 5cd52e76bc874dc62ae595f2a644aafd0182d0ae..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_landkreise/templates/rki_landkreise/navigation/rki_landkreise_navtabs.html +++ /dev/null @@ -1,28 +0,0 @@ - <div class="container"> - <div class="row"> - <div class="col"> - <nav> - <ul class="nav nav-tabs"> - <li class="nav-item"> - <a class="nav-link" - href="{{ url_for( 'rki_landkreise.url_rki_landkreise_info') }}"> - RKI Landkreise Info - </a> - </li> - <li class="nav-item"> - <a class="nav-link" - href="{{ url_for( 'rki_landkreise.url_rki_landkreise_tasks') }}"> - RKI Landkreise tasks - </a> - </li> - <li class="nav-item"> - <a class="nav-link" - href="{{ url_for( 'rki_landkreise.url_rki_landkreise_imported') }}"> - RKI Landkreise imported - </a> - </li> - </ul> - </nav> - </div> - </div> - </div> \ No newline at end of file diff --git a/src/covid19/blueprints/rki/rki_landkreise/templates/rki_landkreise/rki_landkreise_imported.html b/src/covid19/blueprints/rki/rki_landkreise/templates/rki_landkreise/rki_landkreise_imported.html deleted file mode 100644 index c7eac47102eb2f4d1c8e5c43b31466bc969a55a6..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_landkreise/templates/rki_landkreise/rki_landkreise_imported.html +++ /dev/null @@ -1,97 +0,0 @@ -{% extends 'application/page_layout.html' %} - -{% block content %} -{{super()}} -{% include 'rki_landkreise/navigation/rki_landkreise_navtabs.html' %} - -<div class="container"> - <div class="row"> - <div class="col"> - {% 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('rki_landkreise.url_rki_landkreise_imported', 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('rki_landkreise.url_rki_landkreise_imported', 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('rki_landkreise.url_rki_landkreise_imported', page=page_data.next_num) }}"> - Next - </a> - </li> - {% endif %} - </ul> - {% endif %} - </div> - </div> - <div class="row"> - <div class="col"> - <table class="table table-hover table-striped"> - <thead> - <tr> - <th scope="col">date_reported</th> - <th scope="col">country_code</th> - <th scope="col">country</th> - <th scope="col">who_region</th> - <th scope="col">new_cases</th> - <th scope="col">cumulative_cases</th> - <th scope="col">new_deaths</th> - <th scope="col">cumulative_deaths</th> - </tr> - </thead> - <tbody> - {% for who_global_data_import in page_data.items %} - <tr> - <td>{{ who_global_data_import.date_reported }}</td> - <td>{{ who_global_data_import.country_code }}</td> - <td>{{ who_global_data_import.country }}</td> - <td>{{ who_global_data_import.who_region }}</td> - <td>{{ who_global_data_import.new_cases }}</td> - <td>{{ who_global_data_import.cumulative_cases }}</td> - <td>{{ who_global_data_import.new_deaths }}</td> - <td>{{ who_global_data_import.cumulative_deaths }}</td> - </tr> - {% endfor %} - </tbody> - </table> - </div> - </div> -</div> -{% endblock %} - - -{% block footer_container %} - -{% endblock %} - - - diff --git a/src/covid19/blueprints/rki/rki_landkreise/templates/rki_landkreise/rki_landkreise_info.html b/src/covid19/blueprints/rki/rki_landkreise/templates/rki_landkreise/rki_landkreise_info.html deleted file mode 100644 index 4b00cd59c248de82a973b2cabca5bbeb3a0f9397..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_landkreise/templates/rki_landkreise/rki_landkreise_info.html +++ /dev/null @@ -1,47 +0,0 @@ -{% extends 'application/page_layout.html' %} - -{% block content %} - {{super()}} - {% include 'rki_landkreise/navigation/rki_landkreise_navtabs.html' %} - - <div class="container"> - <div class="row"> - <div class="col"> - <h3>RKI Coronavirus Disease (COVID-19) Dashboard</h3> - <p> - <a href="https://experience.arcgis.com/experience/478220a4c454480e823b17327b2bf1d4/"> - https://experience.arcgis.com/experience/478220a4c454480e823b17327b2bf1d4 - </a> - </p> - </div> - <div class="col"> - <h3>RKI COVID-19</h3> - <p> - <a href="https://www.rki.de/EN/Content/infections/epidemiology/outbreaks/COVID-19/COVID19.html"> - https://www.rki.de/EN/Content/infections/epidemiology/outbreaks/COVID-19/COVID19.html - </a> - </p> - </div> - </div> - <div class="row"> - <div class="col"> - <h3>COVID-19 Dashboard by the Center for Systems Science and Engineering (CSSE) - at Johns Hopkins University (JHU)</h3> - <p> - <a href="https://gisanddata.maps.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6"> - COVID-19 Dashboard by the Center for Systems Science and Engineering (CSSE) - at Johns Hopkins University (JHU) - </a> - </p> - </div> - </div> - </div> -{% endblock %} - - -{% block footer_container %} - -{% endblock %} - - - diff --git a/src/covid19/blueprints/rki/rki_landkreise/templates/rki_landkreise/rki_landkreise_tasks.html b/src/covid19/blueprints/rki/rki_landkreise/templates/rki_landkreise/rki_landkreise_tasks.html deleted file mode 100644 index d8dc6b7d45481f330e263c3fdb354f48cdca506f..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_landkreise/templates/rki_landkreise/rki_landkreise_tasks.html +++ /dev/null @@ -1,55 +0,0 @@ -{% extends 'application/page_layout.html' %} - -{% block content %} - {{super()}} - {% include 'rki_landkreise/navigation/rki_landkreise_navtabs.html' %} - - <div class="container"> - <div class="row"> - <div class="col"> - <h3>RKI Landkreise</h3> - </div> - </div> - <div class="row"> - <div class="col"> - <div class="btn-group-vertical" role="group" aria-label="Views"> - <a class="btn btn-primary btn-lg btn-block text-left" - href="{{ url_for( 'rki_landkreise.url_rki_landkreise_task_update_starschema_initial') }}" - role="button">RKI :: Landkreise :: Task :: update :: star_schema :: initial</a> - <a class="btn btn-primary btn-lg btn-block text-left" - href="{{ url_for( 'rki_landkreise.url_rki_landkreise_task_update_starschema_incremental') }}" - role="button">RKI :: Landkreise :: Task :: update :: star_schema :: incremental</a> - </div> - </div> - <div class="col"> - <div class="btn-group-vertical" role="group" aria-label="Views"> - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'rki_landkreise.url_rki_landkreise_task_download_only') }}" - role="button">RKI :: Landkreise :: Task :: download :: only</a> - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'rki_landkreise.url_rki_landkreise_task_import_only') }}" - role="button">RKI :: Landkreise :: Task :: import :: only</a> - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'rki_landkreise.url_rki_landkreise_task_update_dimensiontables_only') }}" - role="button">RKI :: Landkreise :: Task :: update :: dimension-tables : only</a> - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'rki_landkreise.url_rki_landkreise_task_update_facttable_incremental_only') }}" - role="button">RKI :: Landkreise :: Task :: update :: fact-table :: only :: incremental</a> - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'rki_landkreise.url_rki_landkreise_task_update_facttable_initial_only') }}" - role="button">RKI :: Landkreise :: Task :: update :: fact-table :: only :: initial</a> - </div> - </div> - </div> - </div> - -{% endblock %} - - - -{% block footer_container %} - -{% endblock %} - - - diff --git a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/rki_vaccination_tasks.html b/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/rki_vaccination_tasks.html deleted file mode 100644 index 9d04b1968e1ed073b1b50e81363c4a6ac598a536..0000000000000000000000000000000000000000 --- a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/rki_vaccination_tasks.html +++ /dev/null @@ -1,53 +0,0 @@ -{% extends 'application/page_layout.html' %} - -{% block content %} - {{super()}} - {% include 'rki_vaccination/navigation/rki_vaccination_navtabs.html' %} - - <div class="container"> - <div class="row"> - <div class="col"> - <h3>RKI Vaccination Tasks</h3> - </div> - </div> - <div class="row"> - <div class="col"> - <div class="btn-group-vertical" role="group" aria-label="Views"> - <a class="btn btn-primary btn-lg btn-block text-left" - href="{{ url_for( 'rki_vaccination.url_vaccination_task_update_starschema_initial') }}" - role="button">Vaccination :: Task :: update :: star_schema :: initial</a> - <a class="btn btn-primary btn-lg btn-block text-left" - href="{{ url_for( 'rki_vaccination.url_vaccination_task_update_starschema_incremental') }}" - role="button">Vaccination :: Task :: update :: star_schema :: incremental</a> - </div> - </div> - <div class="col"> - <div class="btn-group-vertical" role="group" aria-label="Views"> - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'rki_vaccination.url_vaccination_task_download_only') }}" - role="button">Vaccination :: Task :: download :: only</a> - - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'rki_vaccination.url_vaccination_task_import_only') }}" - role="button">Vaccination :: Task :: import :: only</a> - - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'rki_vaccination.url_vaccination_task_update_dimensiontables_only') }}" - role="button">Vaccination :: Task :: update :: dimension-tables : only</a> - - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'rki_vaccination.url_vaccination_task_update_facttable_incremental_only') }}" - role="button">Vaccination :: Task :: update :: fact-table :: only :: incremental</a> - - <a class="btn btn-secondary btn-lg btn-block text-left" - href="{{ url_for( 'rki_vaccination.url_vaccination_task_update_facttable_initial_only') }}" - role="button">Vaccination :: Task :: update :: fact-table :: only :: initial</a> - </div> - </div> - </div> - </div> -{% endblock %} - - - - diff --git a/src/covid19/blueprints/user/__init__.py b/src/covid19/blueprints/rki_cases/__init__.py similarity index 100% rename from src/covid19/blueprints/user/__init__.py rename to src/covid19/blueprints/rki_cases/__init__.py diff --git a/src/covid19/blueprints/rki_cases/a.py b/src/covid19/blueprints/rki_cases/a.py new file mode 100644 index 0000000000000000000000000000000000000000..9b19fcb57d26036e1858626949d6335ce8bdbcd9 --- /dev/null +++ b/src/covid19/blueprints/rki_cases/a.py @@ -0,0 +1,18 @@ +FID=row['FID'], +IdBundesland=row['IdBundesland'], +Bundesland=row['Bundesland'], +Landkreis=row['Landkreis'], +Altersgruppe=row['Altersgruppe'], +Geschlecht=row['Geschlecht'], +AnzahlFall=row['AnzahlFall'], +AnzahlTodesfall=row['AnzahlTodesfall'], +Meldedatum=row['Meldedatum'], +IdLandkreis=row['IdLandkreis'], +Datenstand=row['Datenstand'], +NeuerFall=row['NeuerFall'], +NeuerTodesfall=row['NeuerTodesfall'], +Refdatum=row['Refdatum'], +NeuGenesen=row['NeuGenesen'], +AnzahlGenesen=row['AnzahlGenesen'], +IstErkrankungsbeginn=row['IstErkrankungsbeginn'], +Altersgruppe2=row['Altersgruppe2'], \ No newline at end of file diff --git a/src/covid19/blueprints/rki_cases/rki_model.py b/src/covid19/blueprints/rki_cases/rki_model.py new file mode 100644 index 0000000000000000000000000000000000000000..c3923ad3f093ddef35ed92f86becbf9e827781d1 --- /dev/null +++ b/src/covid19/blueprints/rki_cases/rki_model.py @@ -0,0 +1,227 @@ +from sqlalchemy import and_ +from datetime import date +from sqlalchemy.orm import joinedload, subqueryload + +from database import db, ITEMS_PER_PAGE +from covid19.blueprints.app_all.all_model import ApplicationDateReported, ApplicationRegion + + +class RkiMeldedatum(ApplicationDateReported): + __tablename__ = 'rki_cases_datereported' + __mapper_args__ = {'concrete': True} + __table_args__ = ( + db.UniqueConstraint('date_reported_import_str', 'datum', name="uix_rki_cases_datereported"), + ) + + id = db.Column(db.Integer, primary_key=True) + date_reported_import_str = db.Column(db.String(255), nullable=False, unique=True) + year_week = db.Column(db.String(255), nullable=False) + datum = db.Column(db.Date, nullable=False, unique=True) + year = db.Column(db.Integer, nullable=False) + month = db.Column(db.Integer, nullable=False) + day_of_month = db.Column(db.Integer, nullable=False) + day_of_week = db.Column(db.Integer, nullable=False) + week_of_year = db.Column(db.Integer, nullable=False) + + @classmethod + def create_new_object_factory(cls, my_date_rep): + my_datum = date.fromisoformat(my_date_rep) + (my_iso_year, week_number, weekday) = my_datum.isocalendar() + my_year_week = "" + str(my_iso_year) + if week_number < 10: + my_year_week += "-0" + else: + my_year_week += "-" + my_year_week += str(week_number) + return RkiMeldedatum( + date_reported_import_str=my_date_rep, + datum=my_datum, + year=my_datum.year, + month=my_datum.month, + day_of_month=my_datum.day, + day_of_week=weekday, + week_of_year=week_number, + year_week=my_year_week + ) + + +class RkiBundesland(ApplicationRegion): + __tablename__ = 'rki_cases_landkreis_bundesland' + __mapper_args__ = {'concrete': True} + __table_args__ = ( + db.UniqueConstraint('id_bundesland', 'region', name="uix_rki_cases_landkreis_bundesland"), + ) + + id = db.Column(db.Integer, primary_key=True) + id_bundesland = db.Column(db.String(255), nullable=False) + region = db.Column(db.String(255), nullable=False) + + +class RkiLandkreis(db.Model): + __tablename__ = 'rki_cases_landkreis' + __table_args__ = ( + db.UniqueConstraint('landkreis', 'id_landkreis', name="uix_rki_cases_landkreis"), + ) + + id = db.Column(db.Integer, primary_key=True) + id_landkreis = db.Column(db.String(255), nullable=False) + landkreis = db.Column(db.String(255), nullable=False) + bundesland_id = db.Column(db.Integer, db.ForeignKey('rki_cases_landkreis_bundesland.id'), nullable=False) + bundesland = db.relationship( + 'RkiBundesland', + lazy='joined', + cascade='save-update', + order_by='RkiBundesland.region') + + def __str__(self): + result = "" + result += self.landkreis + result += " " + result += self.bundesland.region + result += " " + return result + + @classmethod + def remove_all(cls): + num_rows_deleted = 0 + try: + num_rows_deleted = db.session.query(cls).delete() + db.session.commit() + except Exception: + db.session.rollback() + return num_rows_deleted + + @classmethod + def get_all_as_page(cls, page): + return db.session.query(cls)\ + .order_by(cls.country)\ + .paginate(page, per_page=ITEMS_PER_PAGE) + + @classmethod + def get_all(cls): + return db.session.query(cls)\ + .order_by(cls.country)\ + .all() + + @classmethod + def get_all_as_dict(cls): + countries = {} + for my_country in cls.get_all(): + countries[my_country.country_code] = my_country + return countries + + @classmethod + def get_by_id(cls, other_id): + return db.session.query(cls)\ + .filter(cls.id == other_id)\ + .one() + + @classmethod + def get_germany(cls): + return db.session.query(cls)\ + .filter(cls.country_code == 'DE')\ + .one_or_none() + + @classmethod + def find_by_country_code_and_country_and_who_region_id(cls, i_country_code, i_country, my_region): + return db.session.query(cls).filter( + and_( + cls.country_code == i_country_code, + cls.country == i_country, + cls.region_id == my_region.id + ) + ).one_or_none() + + @classmethod + def find_by_country_code(cls, i_country_code): + return db.session.query(cls).filter( + cls.country_code == i_country_code + ).one_or_none() + + @classmethod + def get_by_country_code(cls, i_country_code): + return db.session.query(cls).filter( + cls.country_code == i_country_code + ).one() + + @classmethod + def find_by_country(cls, i_country): + return db.session.query(cls).filter( + cls.country == i_country + ).one_or_none() + + @classmethod + def get_by_country_code(cls, i_country_code): + return db.session.query(cls).filter( + cls.country_code == i_country_code + ).one() + + @classmethod + def get_by_country(cls, i_country): + return db.session.query(cls).filter( + cls.country == i_country + ).one() + + @classmethod + def get_who_countries_for_region(cls, region, page): + return db.session.query(cls).filter( + cls.region == region + ).order_by(cls.country).paginate(page, per_page=ITEMS_PER_PAGE) + + +class RkiData(db.Model): + __tablename__ = 'rki_cases' + + id = db.Column(db.Integer, primary_key=True) + + fid = db.Column(db.String(255), nullable=False) + altersgruppe = db.Column(db.String(255), nullable=False) + geschlecht = db.Column(db.String(255), nullable=False) + anzahl_fall = db.Column(db.String(255), nullable=False) + anzahl_todesfall = db.Column(db.String(255), nullable=False) + meldedatum = db.Column(db.String(255), nullable=False) + datenstand = db.Column(db.String(255), nullable=False) + neuer_fall = db.Column(db.String(255), nullable=False) + neuer_todesfall = db.Column(db.String(255), nullable=False) + ref_datum = db.Column(db.String(255), nullable=False) + neu_genesen = db.Column(db.String(255), nullable=False) + anzahl_genesen = db.Column(db.String(255), nullable=False) + ist_erkrankungsbeginn = db.Column(db.String(255), nullable=False) + altersgruppe2 = db.Column(db.String(255), nullable=False) + meldedatum_id = db.Column(db.Integer, + db.ForeignKey('rki_cases_datereported.id'), nullable=False) + meldedatum = db.relationship( + 'RkiMeldedatum', + lazy='joined', + cascade='save-update', + order_by='desc(RkiMeldedatum.date_reported_import_str)') + landkreis_id = db.Column(db.Integer, + db.ForeignKey('rki_cases_landkreis.id'), nullable=False) + landkreis = db.relationship( + 'RkiLandkreis', + lazy='joined', + cascade='save-update', + order_by='asc(RkiLandkreis.landkreis)') + + @classmethod + def remove_all(cls): + for one in cls.get_all(): + db.session.delete(one) + db.session.commit() + return None + + @classmethod + def get_all_as_page(cls, page): + return db.session.query(cls).paginate(page, per_page=ITEMS_PER_PAGE) + + @classmethod + def get_all(cls): + return db.session.query(cls).all() + + @classmethod + def get_by_id(cls, other_id): + return db.session.query(cls).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() diff --git a/src/covid19/blueprints/rki_cases/rki_model_import.py b/src/covid19/blueprints/rki_cases/rki_model_import.py new file mode 100644 index 0000000000000000000000000000000000000000..13a324ded1f3e786f77e0c2770e96525b740d76c --- /dev/null +++ b/src/covid19/blueprints/rki_cases/rki_model_import.py @@ -0,0 +1,64 @@ +from database import db, ITEMS_PER_PAGE + + +class RkiImport(db.Model): + __tablename__ = 'application__import__rki_cases' + + id = db.Column(db.Integer, primary_key=True) + fid = db.Column(db.String(255), nullable=False) + id_bundesland = db.Column(db.String(255), nullable=False) + bundesland = db.Column(db.String(255), nullable=False) + landkreis = db.Column(db.String(255), nullable=False) + altersgruppe = db.Column(db.String(255), nullable=False) + geschlecht = db.Column(db.String(255), nullable=False) + anzahl_fall = db.Column(db.String(255), nullable=False) + anzahl_todesfall = db.Column(db.String(255), nullable=False) + meldedatum = db.Column(db.String(255), nullable=False) + id_landkreis = db.Column(db.String(255), nullable=False) + datenstand = db.Column(db.String(255), nullable=False) + neuer_fall = db.Column(db.String(255), nullable=False) + neuer_todesfall = db.Column(db.String(255), nullable=False) + ref_datum = db.Column(db.String(255), nullable=False) + neu_genesen = db.Column(db.String(255), nullable=False) + anzahl_genesen = db.Column(db.String(255), nullable=False) + ist_erkrankungsbeginn = db.Column(db.String(255), nullable=False) + altersgruppe2 = db.Column(db.String(255), nullable=False) + # date_reported = db.Column(db.String(255), nullable=False) + # datum = db.Column(db.Date, nullable=False) + # year = db.Column(db.Integer, nullable=False) + # month = db.Column(db.Integer, nullable=False) + # day_of_month = db.Column(db.Integer, nullable=False) + # day_of_week = db.Column(db.Integer, nullable=False) + # week_of_year = db.Column(db.Integer, nullable=False) + # year_week = db.Column(db.String(255), nullable=False) + + @classmethod + def remove_all(cls): + for one in cls.get_all(): + db.session.delete(one) + db.session.commit() + return None + + @classmethod + def get_all_as_page(cls, page: int): + return db.session.query(cls).paginate(page, per_page=ITEMS_PER_PAGE) + + @classmethod + def get_all(cls): + return db.session.query(cls).all() + + @classmethod + def get_by_id(cls, other_id: int): + return db.session.query(cls).filter(cls.id == other_id).one() + + @classmethod + def get_aktualisierungen_as_array(cls): + return [] + + @classmethod + def find_by_aktualisierung(cls, aktualisierung_from_import: str): + return [] + + @classmethod + def get_new_aktualisierungen_as_array(cls): + return [] diff --git a/src/covid19/blueprints/rki_cases/rki_service.py b/src/covid19/blueprints/rki_cases/rki_service.py new file mode 100644 index 0000000000000000000000000000000000000000..770c8ebaa0502875157acb5e3eb5df96ccbcd1e9 --- /dev/null +++ b/src/covid19/blueprints/rki_cases/rki_service.py @@ -0,0 +1,107 @@ +from flask import flash + +from database import app +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig +from covid19.blueprints.app_all.all_service_download import ApplicationServiceDownload +from covid19.blueprints.rki_cases.rki_service_import import RkiServiceImport +from covid19.blueprints.rki_cases.rki_service_update import RkiServiceUpdate, RkiServiceUpdateFull + + +class RkiService: + def __init__(self, database): + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" RKI Service [init]") + app.logger.debug("------------------------------------------------------------") + self.__database = database + self.cfg = ApplicationServiceConfig.create_config_for_rki() + self.service_download = ApplicationServiceDownload(database, self.cfg) + self.service_import = RkiServiceImport(database, self.cfg) + self.service_update = RkiServiceUpdate(database, self.cfg) + self.service_update_full = RkiServiceUpdateFull(database, self.cfg) + app.logger.debug("------------------------------------------------------------") + app.logger.info(" RKI Service [ready]") + + def pretask_database_drop_create(self): + flash("RkiService.pretask_database_drop_create start") + app.logger.info("RkiService.pretask_database_drop_create start") + self.service_download.download_file() + app.logger.info("RkiService.pretask_database_drop_create done") + flash("RkiService.pretask_database_drop_create done") + return self + + def task_database_drop_create(self): + app.logger.info("RkiService.task_database_drop_create start") + self.service_import.import_file() + self.service_update_full.full_update_star_schema() + app.logger.info("RkiService.task_database_drop_create done") + return self + + def run_download(self): + flash("RkiService.run_download start") + self.service_download.download_file() + flash("RkiService.run_download done") + return self + + def run_import(self): + self.service_import.import_file() + return self + + def run_full_update_dimension_tables(self): + self.service_update_full.full_update_dimension_tables() + return self + + def run_update_dimension_tables(self): + self.service_update.update_dimension_tables() + return self + + def run_full_update_fact_table(self): + self.service_update_full.full_update_fact_table() + return self + + def run_update_fact_table(self): + self.service_update.update_fact_table() + return self + + def task_admin_full_update_star_schema(self): + self.service_import.import_file() + self.service_update_full.full_update_star_schema() + return self + + def task_admin_update_star_schema(self): + self.service_import.import_file() + self.service_update.update_star_schema() + return self + + def run_full_update_star_schema(self): + self.service_import.import_file() + self.service_update_full.full_update_star_schema() + return self + + def run_update_star_schema(self): + self.service_import.import_file() + self.service_update.update_star_schema() + return self + + def download_all_files(self): + self.service_download.download_file() + return self + + def task_import_all_files(self): + self.service_import.import_file() + return self + + def full_update_dimension_tables(self): + self.service_update_full.full_update_dimension_tables() + return self + + def update_dimension_tables(self): + self.service_update.update_dimension_tables() + return self + + def full_update_fact_table(self): + self.service_update_full.full_update_fact_table() + return self + + def update_fact_table(self): + self.service_update.update_fact_table() + return self diff --git a/src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_service_import.py b/src/covid19/blueprints/rki_cases/rki_service_import.py similarity index 65% rename from src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_service_import.py rename to src/covid19/blueprints/rki_cases/rki_service_import.py index 972008bd5aa252fae308139db10de8ee93f6a079..ae57a588adfe30c18269286f3a9239fe81041d27 100644 --- a/src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_service_import.py +++ b/src/covid19/blueprints/rki_cases/rki_service_import.py @@ -2,11 +2,11 @@ import csv import psycopg2 from database import db, app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig -from covid19.blueprints.rki.rki_bundeslaender.rki_bundeslaender_model_import import RkiBundeslaenderImport +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig +from covid19.blueprints.rki_cases.rki_model_import import RkiImport -class RkiBundeslaenderServiceImport: +class RkiServiceImport: def __init__(self, database, config: ApplicationServiceConfig): app.logger.debug("------------------------------------------------------------") app.logger.debug(" RKI Service Import [init]") @@ -24,32 +24,31 @@ class RkiBundeslaenderServiceImport: app.logger.info("------------------------------------------------------------") row = None try: - RkiBundeslaenderImport.remove_all() + RkiImport.remove_all() with open(self.cfg.cvsfile_path, newline='\n') as csv_file: file_reader = csv.DictReader(csv_file, delimiter=',', quotechar='"') k = 0 for row in file_reader: k = k + 1 - o = RkiBundeslaenderImport( - OBJECTID_1=row['OBJECTID_1'], - LAN_ew_AGS=row['LAN_ew_AGS'], - LAN_ew_GEN=row['LAN_ew_GEN'], - LAN_ew_BEZ=row['LAN_ew_BEZ'], - LAN_ew_EWZ=row['LAN_ew_EWZ'], - OBJECTID=row['OBJECTID'], - Fallzahl=row['Fallzahl'], - Aktualisierung=row['Aktualisierung'], - AGS_TXT=row['AGS_TXT'], - GlobalID=row['GlobalID'], - faelle_100000_EW=row['faelle_100000_EW'], - Death=row['Death'], - cases7_bl_per_100k=row['cases7_bl_per_100k'], - cases7_bl=row['cases7_bl'], - death7_bl=row['death7_bl'], - cases7_bl_per_100k_txt=row['cases7_bl_per_100k_txt'], - AdmUnitId=row['AdmUnitId'], - SHAPE_Length=row['SHAPE_Length'], - SHAPE_Area=row['SHAPE_Area'], + o = RkiImport( + fid=row['FID'], + id_bundesland=row['IdBundesland'], + bundesland=row['Bundesland'], + landkreis=row['Landkreis'], + altersgruppe=row['Altersgruppe'], + geschlecht=row['Geschlecht'], + anzahl_fall=row['AnzahlFall'], + anzahl_todesfall=row['AnzahlTodesfall'], + meldedatum=row['Meldedatum'], + id_landkreis=row['IdLandkreis'], + datenstand=row['Datenstand'], + neuer_fall=row['NeuerFall'], + neuer_todesfall=row['NeuerTodesfall'], + ref_datum=row['Refdatum'], + neu_genesen=row['NeuGenesen'], + anzahl_genesen=row['AnzahlGenesen'], + ist_erkrankungsbeginn=row['IstErkrankungsbeginn'], + altersgruppe2=row['Altersgruppe2'] ) db.session.add(o) if (k % 2000) == 0: diff --git a/src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_service_update.py b/src/covid19/blueprints/rki_cases/rki_service_update.py similarity index 60% rename from src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_service_update.py rename to src/covid19/blueprints/rki_cases/rki_service_update.py index 59c41e48ce455e4b6d034581f8c8ae0b1acdbbbf..6df9ad9bd1b49479b3e54abff5c5bba23b619790 100644 --- a/src/covid19/blueprints/rki/rki_bundeslaender/rki_bundeslaender_service_update.py +++ b/src/covid19/blueprints/rki_cases/rki_service_update.py @@ -1,12 +1,11 @@ from database import db, app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig -from covid19.blueprints.application.application_model import RkiDateReported -from covid19.blueprints.rki.rki_bundeslaender.rki_bundeslaender_model import RkiBundeslaender -from covid19.blueprints.rki.rki_bundeslaender.rki_bundeslaender_model_import import RkiBundeslaenderImport +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig +from covid19.blueprints.rki_cases.rki_model import RkiData, RkiMeldedatum +from covid19.blueprints.rki_cases.rki_model_import import RkiImport -class RkiBundeslaenderServiceUpdate: +class RkiServiceUpdateBase: def __init__(self, database, config: ApplicationServiceConfig): app.logger.debug("------------------------------------------------------------") app.logger.debug(" RKI Service Update [init]") @@ -16,16 +15,19 @@ class RkiBundeslaenderServiceUpdate: app.logger.debug("------------------------------------------------------------") app.logger.debug(" RKI Service Update [ready]") - def __update_date_reported(self): - app.logger.info(" update RkiDateReported [begin]") + +class RkiServiceUpdateFull(RkiServiceUpdateBase): + + def __full_update_date_reported(self): + app.logger.info(" RkiServiceUpdateFull.__full_update_date_reported [begin]") app.logger.info("------------------------------------------------------------") i = 0 - for aktualisierung in RkiBundeslaenderImport.get_aktualisierungen_as_array(): + for aktualisierung in RkiImport.get_aktualisierungen_as_array(): i += 1 output = " [ " + str(i) + " ] " + aktualisierung - c = RkiDateReported.find_by_date_reported(aktualisierung) + c = RkiMeldedatum.find_by_date_reported(aktualisierung) if c is None: - o = RkiDateReported.create_new_object_factory(aktualisierung=aktualisierung) + o = RkiMeldedatum.create_new_object_factory(aktualisierung=aktualisierung) db.session.add(o) db.session.commit() output += " added" @@ -34,19 +36,20 @@ class RkiBundeslaenderServiceUpdate: app.logger.info(output) db.session.commit() app.logger.info("") - app.logger.info(" update RkiDateReported [done]") + app.logger.info(" RkiServiceUpdateFull.__full_update_date_reported [done]") app.logger.info("------------------------------------------------------------") return self - def __update_data_incremental(self): - app.logger.info(" update RkiBundeslaender short [begin]") + def __full_update_data(self): + app.logger.info(" RkiServiceUpdateFull.__full_update_data [begin]") app.logger.info("------------------------------------------------------------") - aktualisierungen_from_import = RkiBundeslaenderImport.get_aktualisierungen_as_array() + RkiData.remove_all() + aktualisierungen_from_import = RkiImport.get_new_aktualisierungen_as_array() i = 0 for aktualisierung_from_import in aktualisierungen_from_import: - my_date = RkiDateReported.find_by_aktualisierung(aktualisierung_from_import) - for result_item in RkiBundeslaenderImport.find_by_aktualisierung(aktualisierung_from_import): - o = RkiBundeslaender( + my_date = RkiMeldedatum.find_by_aktualisierung(aktualisierung_from_import) + for result_item in RkiImport.find_by_aktualisierung(aktualisierung_from_import): + o = RkiData( object_id_1=int(result_item.OBJECTID_1), lan_ew_ags=int(result_item.LAN_ew_AGS), lan_ew_gen=result_item.LAN_ew_GEN, @@ -56,7 +59,7 @@ class RkiBundeslaenderServiceUpdate: fallzahl=int(result_item.Fallzahl), aktualisierung=result_item.Aktualisierung, ags_txt=int(result_item.AGS_TXT), - global_id=result_item.GlobalID, # uuid? + global_id=result_item.GlobalID, # uuid? faelle_100000_ew=float(result_item.faelle_100000_EW), death=int(result_item.Death), cases7_bl_per_100k=int(result_item.cases7_bl_per_100k), @@ -70,24 +73,61 @@ class RkiBundeslaenderServiceUpdate: db.session.add(o) i += 1 if i % 500 == 0: - app.logger.info(" update RkiBundeslaender short ... "+str(i)+" rows") + app.logger.info(" update WHO initial ... "+str(i)+" rows") db.session.commit() db.session.commit() - app.logger.info(" update RkiBundeslaender short : "+str(i)+" total rows") - app.logger.info(" update RkiBundeslaender short [done]") + app.logger.info(" update WHO initial : "+str(i)+" total rows") + app.logger.info(" RkiServiceUpdateFull.__full_update_data [done]") + app.logger.info("------------------------------------------------------------") + return self + + def full_update_dimension_tables(self): + self.__full_update_date_reported() + return self + + def full_update_fact_table(self): + self.__full_update_data() + return self + + def full_update_star_schema(self): + self.__full_update_date_reported() + self.__full_update_data() + return self + + +class RkiServiceUpdate(RkiServiceUpdateBase): + + def __update_date_reported(self): + app.logger.info(" RkiServiceUpdate.__update_date_reported [begin]") + app.logger.info("------------------------------------------------------------") + i = 0 + for aktualisierung in RkiImport.get_aktualisierungen_as_array(): + i += 1 + output = " [ " + str(i) + " ] " + aktualisierung + c = RkiMeldedatum.find_by_date_reported(aktualisierung) + if c is None: + o = RkiMeldedatum.create_new_object_factory(aktualisierung=aktualisierung) + db.session.add(o) + db.session.commit() + output += " added" + else: + output += " NOT added " + str(c.id) + app.logger.info(output) + db.session.commit() + app.logger.info("") + app.logger.info(" RkiServiceUpdate.__update_date_reported [done]") app.logger.info("------------------------------------------------------------") return self - def __update_data_initial(self): - app.logger.info(" update RKI initial [begin]") + def __update_data(self): + app.logger.info(" RkiServiceUpdate.__update_data [begin]") app.logger.info("------------------------------------------------------------") - RkiBundeslaender.remove_all() - aktualisierungen_from_import = RkiBundeslaenderImport.get_new_aktualisierungen_as_array() + aktualisierungen_from_import = RkiImport.get_aktualisierungen_as_array() i = 0 for aktualisierung_from_import in aktualisierungen_from_import: - my_date = RkiDateReported.find_by_aktualisierung(aktualisierung_from_import) - for result_item in RkiBundeslaenderImport.find_by_aktualisierung(aktualisierung_from_import): - o = RkiBundeslaender( + my_date = RkiMeldedatum.find_by_aktualisierung(aktualisierung_from_import) + for result_item in RkiImport.find_by_aktualisierung(aktualisierung_from_import): + o = RkiData( object_id_1=int(result_item.OBJECTID_1), lan_ew_ags=int(result_item.LAN_ew_AGS), lan_ew_gen=result_item.LAN_ew_GEN, @@ -97,7 +137,7 @@ class RkiBundeslaenderServiceUpdate: fallzahl=int(result_item.Fallzahl), aktualisierung=result_item.Aktualisierung, ags_txt=int(result_item.AGS_TXT), - global_id=result_item.GlobalID, # uuid? + global_id=result_item.GlobalID, # uuid? faelle_100000_ew=float(result_item.faelle_100000_EW), death=int(result_item.Death), cases7_bl_per_100k=int(result_item.cases7_bl_per_100k), @@ -111,33 +151,23 @@ class RkiBundeslaenderServiceUpdate: db.session.add(o) i += 1 if i % 500 == 0: - app.logger.info(" update WHO initial ... "+str(i)+" rows") + app.logger.info(" update RkiBundeslaender short ... "+str(i)+" rows") db.session.commit() db.session.commit() - app.logger.info(" update WHO initial : "+str(i)+" total rows") - app.logger.info(" update WHO initial [done]") + app.logger.info(" update RkiBundeslaender short : "+str(i)+" total rows") + app.logger.info(" RkiServiceUpdate.__update_data [done]") app.logger.info("------------------------------------------------------------") return self - def update_dimension_tables_only(self): + def update_dimension_tables(self): self.__update_date_reported() return self - def update_fact_table_incremental_only(self): - self.__update_data_incremental() + def update_fact_table(self): + self.__update_data() return self - def update_fact_table_initial_only(self): - self.__update_data_initial() - return self - - def update_star_schema_incremental(self): + def update_star_schema(self): self.__update_date_reported() - self.__update_data_incremental() + self.__update_data() return self - - def update_star_schema_initial(self): - self.__update_date_reported() - self.__update_data_initial() - return self - diff --git a/src/covid19/blueprints/rki_cases/rki_views.py b/src/covid19/blueprints/rki_cases/rki_views.py new file mode 100644 index 0000000000000000000000000000000000000000..231f82933b701f1e92bf1da1d459dd9974d8de17 --- /dev/null +++ b/src/covid19/blueprints/rki_cases/rki_views.py @@ -0,0 +1,239 @@ +from flask import render_template, redirect, url_for, flash, Blueprint +from sqlalchemy.exc import OperationalError +from flask_admin.contrib.sqla import ModelView +from celery import states + +from database import app, admin, db +from covid19.blueprints.app_mq.application_workers import celery +from covid19.blueprints.app_all.all_services import who_service, owid_service +from covid19.blueprints.app_all.all_services import rki_service, rki_vaccination_service +from covid19.blueprints.app_all.all_services import ecdc_service, divi_service +from covid19.blueprints.app_all.all_services import app_admin_service, app_user_service +from covid19.blueprints.rki_cases.rki_model import RkiData, RkiMeldedatum +from covid19.blueprints.rki_cases.rki_model_import import RkiImport +from covid19.blueprints.app_application.application_model_transient import ApplicationPage + +drop_and_create_data_again = True + +app_rki = Blueprint( + 'rki', __name__, template_folder='templates', url_prefix='/rki/cases') + + +admin.add_view(ModelView(RkiImport, db.session, category="RKI Cases")) +admin.add_view(ModelView(RkiData, db.session, category="RKI Cases")) + + +# --------------------------------------------------------------------------------------------------------------- +# Url Routes Frontend +# --------------------------------------------------------------------------------------------------------------- + + +@app_rki.route('/info') +def url_rki_info(): + page_info = ApplicationPage('RKI', "Info") + return render_template( + 'rki/rki_info.html', + page_info=page_info) + + +@app_rki.route('/tasks') +def url_rki_tasks(): + page_info = ApplicationPage('RKI', "Tasks") + return render_template( + 'rki/rki_tasks.html', + page_info=page_info) + + +@app_rki.route('/imported/page/<int:page>') +@app_rki.route('/imported') +def url_rki_imported(page=1): + page_info = ApplicationPage('RKI', "Last Import") + try: + page_data = RkiImport.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) + + +@app_rki.route('/test/page/<int:page>') +@app_rki.route('/test') +def url_rki_test(page=1): + page_info = ApplicationPage('RKI', "TEST") + try: + page_data = RkiImport.get_all_as_page(page) + except OperationalError: + flash("No data in the database.") + page_data = None + return render_template( + 'rki/rki_test.html', + page_data=page_data, + page_info=page_info) + + +@app_rki.route('/date_reported/all/page/<int:page>') +@app_rki.route('/date_reported/all') +def url_rki_date_reported_all(page: int = 1): + page_info = ApplicationPage('RKI', "Date Reported", "All") + try: + page_data = RkiMeldedatum.get_all_as_page(page) + except OperationalError: + flash("No date_reported in the database.") + page_data = None + return render_template( + 'rki/date_reported/rki_date_reported_all.html', + page_data=page_data, + page_info=page_info) + + +# ------------------------------------------------------------------------ +# Celery TASKS +# ------------------------------------------------------------------------ + +@celery.task(bind=True) +def task_rki_import(self): + self.update_state(state=states.STARTED) + rki_service.run_import() + self.update_state(state=states.SUCCESS) + result = "OK (task_rki_import_only)" + return result + + +@celery.task(bind=True) +def task_rki_full_update_dimensiontables(self): + self.update_state(state=states.STARTED) + rki_service.task_full_update_dimensiontables() + self.update_state(state=states.SUCCESS) + result = "OK (task_rki_full_update_dimensiontables)" + return result + + +@celery.task(bind=True) +def task_rki_update_dimensiontables(self): + self.update_state(state=states.STARTED) + rki_service.task_update_dimensiontables() + self.update_state(state=states.SUCCESS) + result = "OK (task_rki_update_dimensiontables)" + return result + + +@celery.task(bind=True) +def task_rki_full_update_facttable(self): + self.update_state(state=states.STARTED) + rki_service.full_update_fact_table() + self.update_state(state=states.SUCCESS) + result = "OK (task_rki_full_update_facttable)" + return result + + +@celery.task(bind=True) +def task_rki_update_facttable(self): + self.update_state(state=states.STARTED) + rki_service.run_update_fact_table_incremental_only() + self.update_state(state=states.SUCCESS) + result = "OK (task_rki_update_facttable)" + return result + + +@celery.task(bind=True) +def task_rki_full_update_starschema(self): + self.update_state(state=states.STARTED) + rki_service.run_update_star_schema_incremental() + self.update_state(state=states.SUCCESS) + result = "OK (task_rki_full_update_starschema)" + return result + + +@celery.task(bind=True) +def task_rki_update_starschema(self): + self.update_state(state=states.STARTED) + rki_service.run_update_star_schema_incremental() + self.update_state(state=states.SUCCESS) + result = "OK (task_rki_update_starschema)" + return result + +# ------------------------------------------------------------------------ +# URL Routes for Celery TASKS +# ------------------------------------------------------------------------ + + +@app_rki.route('/task/download') +def url_task_rki_download(): + app.logger.info("url_task_rki_download [start]") + flash("url_task_rki_download [start]") + rki_service.run_download() + flash("url_task_rki_download [done]") + app.logger.info("url_task_rki_download [done]") + return redirect(url_for('rki.url_rki_tasks')) + + +@app_rki.route('/task/import') +def url_task_rki_import(): + app.logger.info("url_task_rki_import [start]") + task_rki_import.apply_async() + flash(message="url_task_rki_download [async start]", category='warning') + app.logger.warn("task_rki_import [async start]") + return redirect(url_for('rki.url_rki_tasks')) + + +@app_rki.route('/task/update/full/dimension-tables') +def url_task_rki_full_update_dimensiontables(): + app.logger.info("url_task_rki_full_update_dimensiontables [start]") + task_rki_full_update_dimensiontables.apply_async() + flash(message="task_rki_full_update_dimensiontables [async start]", category='warning') + app.logger.warn("task_rki_full_update_dimensiontables [async start]") + return redirect(url_for('rki.url_rki_tasks')) + + +@app_rki.route('/task/update/dimension-tables') +def url_task_rki_update_dimensiontables(): + app.logger.info("url_task_rki_update_dimensiontables [start]") + task_rki_update_dimensiontables.apply_async() + flash(message="task_rki_update_dimensiontables [async start]", category='warning') + app.logger.warn("task_rki_update_dimensiontables [async start]") + return redirect(url_for('rki.url_rki_tasks')) + + +@app_rki.route('/task/update/full/fact-table') +def url_task_rki_full_update_facttable(): + app.logger.info("url_rki_task_update_facttable_incremental_only [start]") + task_rki_full_update_facttable.apply_async() + flash(message="task_rki_full_update_facttable [async start]", category='warning') + app.logger.warn("task_rki_full_update_facttable [async start]") + return redirect(url_for('rki.url_rki_tasks')) + + +@app_rki.route('/task/update/fact-table') +def url_task_rki_update_facttable(): + app.logger.info("url_task_rki_update_facttable [start]") + task_rki_update_facttable.apply_async() + flash(message="task_rki_update_facttable [async start]", category='warning') + app.logger.warn("task_rki_update_facttable [async start]") + return redirect(url_for('rki.url_rki_tasks')) + + +@app_rki.route('/task/update/full/star_schema') +def url_task_rki_full_update_starschema(): + app.logger.info("url_task_rki_full_update_starschema [start]") + flash("url_task_rki_download [start]") + rki_service.run_download() + flash("url_task_rki_download [done]") + task_rki_full_update_starschema.apply_async() + flash(message="task_rki_full_update_starschema [async start]", category='warning') + app.logger.warn("task_rki_full_update_starschema [async start]") + return redirect(url_for('rki.url_rki_tasks')) + + +@app_rki.route('/task/update/star_schema') +def url_task_rki_update_starschema(): + app.logger.info("url_task_rki_update_starschema [start]") + flash("url_task_rki_download [start]") + rki_service.run_download() + flash("url_task_rki_download [done]") + task_rki_update_starschema.apply_async() + flash(message="task_rki_update_starschema [async start]", category='warning') + app.logger.warn("task_rki_update_starschemas [async start]") + return redirect(url_for('rki.url_rki_tasks')) diff --git a/src/covid19/blueprints/user/templates/__init__.py b/src/covid19/blueprints/rki_cases/templates/__init__.py similarity index 100% rename from src/covid19/blueprints/user/templates/__init__.py rename to src/covid19/blueprints/rki_cases/templates/__init__.py diff --git a/src/covid19/blueprints/rki_cases/templates/rki/date_reported/rki_date_reported_all.html b/src/covid19/blueprints/rki_cases/templates/rki/date_reported/rki_date_reported_all.html new file mode 100644 index 0000000000000000000000000000000000000000..a12d337ccec5ae4f691e8cd8999d6061be774ab8 --- /dev/null +++ b/src/covid19/blueprints/rki_cases/templates/rki/date_reported/rki_date_reported_all.html @@ -0,0 +1,32 @@ +{% extends 'app_all/layout/page_layout.html' %} + +{% block content %} + {{super()}} + {% include 'rki/navigation/rki_navtabs.html' %} + + <div class="container-fluid"> + <div class="row"> + <div class="col"> + {% include 'rki/date_reported/rki_date_reported_all_pagination.html' %} + </div> + </div> + <div class="row"> + <div class="col"> + {% include 'rki/date_reported/rki_date_reported_all_table.html' %} + </div> + </div> + <div class="row"> + <div class="col"> + {% include 'rki/date_reported/rki_date_reported_all_pagination.html' %} + </div> + </div> + </div> +{% endblock %} + +{% block footer_container %} + <div> + {% for error in errors %} + <h4>{{ error }}</h4> + {% endfor %} + </div> +{% endblock %} diff --git a/src/covid19/blueprints/rki_cases/templates/rki/date_reported/rki_date_reported_all_pagination.html b/src/covid19/blueprints/rki_cases/templates/rki/date_reported/rki_date_reported_all_pagination.html new file mode 100644 index 0000000000000000000000000000000000000000..6eb53384c6362c6d76cf053d6dc378894a298636 --- /dev/null +++ b/src/covid19/blueprints/rki_cases/templates/rki/date_reported/rki_date_reported_all_pagination.html @@ -0,0 +1,34 @@ + {% 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('rki.url_rki_date_reported_all', 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('rki.url_rki_date_reported_all', 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('rki.url_rki_date_reported_all', page=page_data.next_num) }}">Next</a> + </li> + {% endif %} + </ul> + {% endif %} diff --git a/src/covid19/blueprints/rki_cases/templates/rki/date_reported/rki_date_reported_all_table.html b/src/covid19/blueprints/rki_cases/templates/rki/date_reported/rki_date_reported_all_table.html new file mode 100644 index 0000000000000000000000000000000000000000..1c6fef683e270a0ca74e49081e2ba96619e9d1d6 --- /dev/null +++ b/src/covid19/blueprints/rki_cases/templates/rki/date_reported/rki_date_reported_all_table.html @@ -0,0 +1,36 @@ + <table class="table table-hover table-striped table-dark"> + <thead class="table-secondary"> + <tr> + <th scope="col" class="text-right">day of week</th> + <th scope="col" class="text-left">date reported</th> + <th scope="col" class="text-right">week of year</th> + <th scope="col" class="text-left">year</th> + </tr> + </thead> + <tbody> + {% for owid_date_reported in page_data.items %} + <tr> + <td class="text-right"> + {{ owid_date_reported.get_name_for_weekday() }} + </td> + <td class="text-left"> + {{ owid_date_reported }} + </td> + <td class="text-right"> + {{ owid_date_reported.week_of_year }} + </td> + <td class="text-left"> + {{ owid_date_reported.year }} + </td> + </tr> + {% endfor %} + </tbody> + <tfoot class="table-secondary"> + <tr> + <th scope="col" class="text-right">day of week</th> + <th scope="col" class="text-left">date reported</th> + <th scope="col" class="text-right">week of year</th> + <th scope="col" class="text-left">year</th> + </tr> + </tfoot> + </table> \ No newline at end of file diff --git a/src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/navigation/rki_bundeslaender_navbar_dropdown.html b/src/covid19/blueprints/rki_cases/templates/rki/navigation/rki_navbar_dropdown.html similarity index 56% rename from src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/navigation/rki_bundeslaender_navbar_dropdown.html rename to src/covid19/blueprints/rki_cases/templates/rki/navigation/rki_navbar_dropdown.html index ea81327f4c942724cfd532e823aea7f12047a411..8d62d606f5f9168e8fa3f0422b392a70202ee2cc 100644 --- a/src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/navigation/rki_bundeslaender_navbar_dropdown.html +++ b/src/covid19/blueprints/rki_cases/templates/rki/navigation/rki_navbar_dropdown.html @@ -1,28 +1,37 @@ <li class="dropdown"> <a class="dropdown-toggle nav-link" data-toggle="dropdown" href="javascript:void(0)"> - RKI Bundeslaender<i class="glyphicon glyphicon-chevron-down small"></i> + RKI <i class="glyphicon glyphicon-chevron-down small"></i> </a> <ul class="dropdown-menu"> <li> - <a class="dropdown-item" href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_info') }}"> - RKI Bundeslaender Info + <a class="dropdown-item" href="{{ url_for('rki.url_rki_info') }}"> + RKI Info </a> </li> + {% if current_user.is_authenticated %} <li> <div class="dropdown-divider"></div> </li> <li> - <a class="dropdown-item" href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_imported') }}"> - RKI Bundeslaender imported + <a class="dropdown-item" href="{{ url_for('rki.url_rki_tasks') }}"> + RKI Tasks </a> </li> <li> <div class="dropdown-divider"></div> </li> <li> - <a class="dropdown-item" href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_tasks') }}"> - RKI Bundeslaender Tasks + <a class="dropdown-item" href="{{ url_for('rki.url_rki_imported') }}"> + RKI imported </a> </li> + {% endif %} + <li> + <div class="dropdown-divider"></div> + </li> + <li> + <a class="dropdown-item" + href="{{ url_for( 'rki.url_rki_date_reported_all') }}">RKI Date Reported</a> + </li> </ul> </li> diff --git a/src/covid19/blueprints/rki_cases/templates/rki/navigation/rki_navtabs.html b/src/covid19/blueprints/rki_cases/templates/rki/navigation/rki_navtabs.html new file mode 100644 index 0000000000000000000000000000000000000000..837c82912013f827a7d8c7579f1648cf6e94d35d --- /dev/null +++ b/src/covid19/blueprints/rki_cases/templates/rki/navigation/rki_navtabs.html @@ -0,0 +1,36 @@ + <div class="container"> + <div class="row-cols-1"> + <nav> + <ul class="nav nav-tabs"> + <li class="nav-item"> + <a class="nav-link" + href="{{ url_for('rki.url_rki_info') }}"> + RKI Info + </a> + </li> + {% if current_user.is_authenticated %} + <li class="nav-item"> + <a class="nav-link" href="{{ url_for('rki.url_rki_tasks') }}"> + RKI tasks + </a> + </li> + <li class="nav-item"> + <a class="nav-link" href="{{ url_for('rki_test.url_rki_test_tests') }}"> + RKI Tests + </a> + </li> + <li class="nav-item"> + <a class="nav-link" href="{{ url_for('rki.url_rki_imported') }}"> + RKI imported + </a> + </li> + {% endif %} + <li class="nav-item"> + <a class="nav-link" href="{{ url_for( 'rki.url_rki_date_reported_all') }}"> + RKI Date Reported + </a> + </li> + </ul> + </nav> + </div> + </div> \ No newline at end of file diff --git a/src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/rki_bundeslaender_imported.html b/src/covid19/blueprints/rki_cases/templates/rki/rki_imported.html similarity index 52% rename from src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/rki_bundeslaender_imported.html rename to src/covid19/blueprints/rki_cases/templates/rki/rki_imported.html index bbd484fe23cff799cbbfa83321cfc3285a235dfc..b3ffd15a12b3b7539ded4c303417c3f8a6f96bd1 100644 --- a/src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/rki_bundeslaender_imported.html +++ b/src/covid19/blueprints/rki_cases/templates/rki/rki_imported.html @@ -1,8 +1,8 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} - {% include 'rki_bundeslaender/fragments/fragment_rki_bundeslaender_navtabs.html' %} + {% include 'rki/navigation/rki_navtabs.html' %} <div class="container"> <div class="row"> @@ -13,7 +13,7 @@ {% if page_data.has_prev %} <li class="page-item"> <a class="page-link" - href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_imported', page=page_data.prev_num) }}"> + href="{{ url_for('rki.url_rki_imported', page=page_data.prev_num) }}"> Previous </a> </li> @@ -24,7 +24,7 @@ {% if page_num != page_data.page %} <li class="page-item"> <a class="page-link" - href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_imported', page=page_num) }}"> + href="{{ url_for('rki.url_rki_imported', page=page_num) }}"> {{ page_num }} </a> </li> @@ -43,7 +43,7 @@ {% if page_data.has_next %} <li class="page-item"> <a class="page-link" - href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_imported', page=page_data.next_num) }}"> + href="{{ url_for('rki.url_rki_imported', page=page_data.next_num) }}"> Next </a> </li> @@ -57,27 +57,37 @@ <table class="table table-hover table-striped"> <thead> <tr> - <th scope="col">date_reported</th> - <th scope="col">country_code</th> - <th scope="col">country</th> - <th scope="col">who_region</th> - <th scope="col">new_cases</th> - <th scope="col">cumulative_cases</th> - <th scope="col">new_deaths</th> - <th scope="col">cumulative_deaths</th> + <th scope="col">bundesland</th> + <th scope="col">landkreis</th> + <th scope="col">altersgruppe</th> + <th scope="col">geschlecht</th> + <th scope="col">anzahl fall</th> + <th scope="col">anzahl todesfall</th> + <th scope="col">meldedatum</th> + <th scope="col">neuer fall</th> + <th scope="col">neuer todesfall</th> + <th scope="col">neu genesen</th> + <th scope="col">anzahl genesen</th> + <th scope="col">ist erkrankungsbeginn</th> + <th scope="col">altersgruppe2</th> </tr> </thead> <tbody> {% for who_global_data_import in page_data.items %} <tr> - <td>{{ who_global_data_import.date_reported }}</td> - <td>{{ who_global_data_import.country_code }}</td> - <td>{{ who_global_data_import.country }}</td> - <td>{{ who_global_data_import.who_region }}</td> - <td>{{ who_global_data_import.new_cases }}</td> - <td>{{ who_global_data_import.cumulative_cases }}</td> - <td>{{ who_global_data_import.new_deaths }}</td> - <td>{{ who_global_data_import.cumulative_deaths }}</td> + <td>{{ who_global_data_import.bundesland }}</td> + <td>{{ who_global_data_import.landkreis }}</td> + <td>{{ who_global_data_import.altersgruppe }}</td> + <td>{{ who_global_data_import.geschlecht }}</td> + <td>{{ who_global_data_import.anzahl_fall }}</td> + <td>{{ who_global_data_import.anzahl_todesfall }}</td> + <td>{{ who_global_data_import.meldedatum }}</td> + <td>{{ who_global_data_import.neuer_fall }}</td> + <td>{{ who_global_data_import.neuer_todesfall }}</td> + <td>{{ who_global_data_import.neu_genesen }}</td> + <td>{{ who_global_data_import.anzahl_genesen }}</td> + <td>{{ who_global_data_import.ist_erkrankungsbeginn }}</td> + <td>{{ who_global_data_import.altersgruppe2 }}</td> </tr> {% endfor %} </tbody> diff --git a/src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/rki_bundeslaender_info.html b/src/covid19/blueprints/rki_cases/templates/rki/rki_info.html similarity index 92% rename from src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/rki_bundeslaender_info.html rename to src/covid19/blueprints/rki_cases/templates/rki/rki_info.html index 1b666e09e0f577c97b77a884a66fdd354ea3edf4..0d204f21c316dfe72bb6a976bbb2193b264041db 100644 --- a/src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/rki_bundeslaender_info.html +++ b/src/covid19/blueprints/rki_cases/templates/rki/rki_info.html @@ -1,8 +1,8 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} - {% include 'rki_bundeslaender/navigation/rki_bundeslaender_navtabs.html' %} + {% include 'rki/navigation/rki_navtabs.html' %} <div class="container"> <div class="row"> diff --git a/src/covid19/blueprints/rki_cases/templates/rki/rki_tasks.html b/src/covid19/blueprints/rki_cases/templates/rki/rki_tasks.html new file mode 100644 index 0000000000000000000000000000000000000000..a53093155022b13bbeae96eb1649179902950744 --- /dev/null +++ b/src/covid19/blueprints/rki_cases/templates/rki/rki_tasks.html @@ -0,0 +1,90 @@ +{% extends 'app_all/layout/page_layout.html' %} + +{% block content %} + {{super()}} + {% include 'rki/navigation/rki_navtabs.html' %} + + <div class="container"> + <div class="row"> + <div class="col"> + <h2>RKI</h2> + </div> + </div> + <div class="row"> + <div class="col"> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-danger btn-lg btn-block text-left" + href="{{ url_for('rki_test.url_rki_test_tests') }}" + role="button">RKI :: TEST</a> + </div> + </div> + <div class="col"> + </div> + </div> + <p></p> + <div class="row"> + <div class="col"> + <h4>Update Full</h4> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for('rki.url_task_rki_full_update_starschema') }}" + role="button">RKI :: Task :: update :: star_schema :: full</a> + </div> + </div> + <div class="col"> + <h4>Update</h4> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for('rki.url_task_rki_update_starschema') }}" + role="button">RKI :: Task :: update :: star_schema</a> + </div> + </div> + </div> + <p></p> + <div class="row"> + <div class="col"> + <h4>Update Full</h4> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-success btn-lg btn-block text-left" + href="{{ url_for('rki.url_task_rki_download') }}" + role="button">RKI :: Task :: download</a> + <a class="btn btn-info btn-lg btn-block text-left" + href="{{ url_for('rki.url_task_rki_import') }}" + role="button">RKI :: Task :: import</a> + <a class="btn btn-warning btn-lg btn-block text-left" + href="{{ url_for('rki.url_task_rki_full_update_dimensiontables') }}" + role="button">RKI :: Task :: update :: dimension-tables :: full</a> + <a class="btn btn-secondary btn-lg btn-block text-left" + href="{{ url_for('rki.url_task_rki_full_update_facttable') }}" + role="button">RKI :: Task :: update :: fact-table :: full</a> + </div> + </div> + <div class="col"> + <h4>Update</h4> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-success btn-lg btn-block text-left" + href="{{ url_for('rki.url_task_rki_download') }}" + role="button">RKI :: Task :: download</a> + <a class="btn btn-info btn-lg btn-block text-left" + href="{{ url_for('rki.url_task_rki_import') }}" + role="button">RKI :: Task :: import</a> + <a class="btn btn-warning btn-lg btn-block text-left" + href="{{ url_for('rki.url_task_rki_update_dimensiontables') }}" + role="button">RKI :: Task :: update :: dimension-tables</a> + <a class="btn btn-secondary btn-lg btn-block text-left" + href="{{ url_for('rki.url_task_rki_update_facttable') }}" + role="button">RKI :: Task :: update :: fact-table</a> + </div> + </div> + </div> + </div> +{% endblock %} + + + +{% block footer_container %} + +{% endblock %} + + + diff --git a/src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/rki_bundeslaender_test.html b/src/covid19/blueprints/rki_cases/templates/rki/rki_test.html similarity index 87% rename from src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/rki_bundeslaender_test.html rename to src/covid19/blueprints/rki_cases/templates/rki/rki_test.html index c87ce9cea521ed8f4500a3f717e45bf44fa71ef3..e9c117b6867a5a2ba9d6b0327428e94160e7bd3d 100644 --- a/src/covid19/blueprints/rki/rki_bundeslaender/templates/rki_bundeslaender/rki_bundeslaender_test.html +++ b/src/covid19/blueprints/rki_cases/templates/rki/rki_test.html @@ -1,8 +1,8 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} - {% include 'rki_bundeslaender/navigation/rki_bundeslaender_navtabs.html' %} + {% include 'rki/navigation/rki_navtabs.html' %} <div class="container"> <div class="row"> @@ -13,7 +13,7 @@ {% if page_data.has_prev %} <li class="page-item"> <a class="page-link" - href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_test', page=page_data.prev_num) }}"> + href="{{ url_for('rki.url_rki_test', page=page_data.prev_num) }}"> Previous </a> </li> @@ -24,7 +24,7 @@ {% if page_num != page_data.page %} <li class="page-item"> <a class="page-link" - href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_test', page=page_num) }}"> + href="{{ url_for('rki.url_rki_test', page=page_num) }}"> {{ page_num }} </a> </li> @@ -43,7 +43,7 @@ {% if page_data.has_next %} <li class="page-item"> <a class="page-link" - href="{{ url_for('rki_bundeslaender.url_rki_bundeslaender_test', page=page_data.next_num) }}"> + href="{{ url_for('rki.url_rki_test', page=page_data.next_num) }}"> Next </a> </li> diff --git a/src/mq/__init__.py b/src/covid19/blueprints/rki_cases_test/__init__.py similarity index 100% rename from src/mq/__init__.py rename to src/covid19/blueprints/rki_cases_test/__init__.py diff --git a/src/covid19/blueprints/rki_cases_test/rki_test_service.py b/src/covid19/blueprints/rki_cases_test/rki_test_service.py new file mode 100644 index 0000000000000000000000000000000000000000..9232940c7bde5b5120fce7b92f485c51a01f56ee --- /dev/null +++ b/src/covid19/blueprints/rki_cases_test/rki_test_service.py @@ -0,0 +1,107 @@ +from database import db, app +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig +from covid19.blueprints.rki.rki_model import RkiData, RkiDateReported, RkiCountryRegion, RkiCountry +from covid19.blueprints.rki.rki_model_import import RkiImport + + +class RkiTestService: + def __init__(self, database, rki_service): + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" RkiTestService [init]") + app.logger.debug("------------------------------------------------------------") + self.__database = database + self.__rki_service = rki_service + self.cfg = ApplicationServiceConfig.create_config_for_owid() + app.logger.debug("------------------------------------------------------------") + app.logger.info(" RkiTestService [ready]") + + def delete_last_day(self): + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" RkiTestService.delete_last_day() [START]") + app.logger.debug("------------------------------------------------------------") + joungest_datum_str = RkiData.get_joungest_datum() + joungest_datum = RkiDateReported.find_by_date_reported(joungest_datum_str) + app.logger.info("joungest_datum:") + app.logger.info(joungest_datum) + app.logger.info("RkiData.get_data_for_one_day(joungest_datum):") + i = 0 + for data in RkiData.get_data_for_one_day(joungest_datum): + i += 1 + line = "Owid: to be deleted | " + str(i) + " | " + str(data.date_reported) + " | " + str(data.country) + " | " + app.logger.info(line) + app.logger.info("RkiData.delete_data_for_one_day(joungest_datum)") + RkiData.delete_data_for_one_day(joungest_datum) + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" RkiTestService.delete_last_day() [DONE]") + app.logger.debug("------------------------------------------------------------") + + def delete_last_continent(self): + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" RkiTestService.delete_last_continent() [START]") + app.logger.debug("------------------------------------------------------------") + app.logger.info("OwidContinent.get_last_continent()") + last_continent = RkiCountryRegion.get_last_continent() + app.logger.info("last_continent:" + str(last_continent)) + app.logger.info("OwidCountry.get_all_countries_for_continent(last_continent)") + countries_for_continent = RkiCountry.get_all_countries_for_continent(last_continent) + i = 0 + for country in countries_for_continent: + for data in RkiData.get_all_data_for_country(country): + i += 1 + line = "Owid: to be deleted | " + str(i) + " | " + str(data.date_reported) + " | " + str(data.country) + " | " + app.logger.info(line) + app.logger.info("RkiData.delete_all_data_for_country(country)") + RkiData.delete_all_data_for_country(country) + app.logger.info("RkiCountry.delete_all_countries_for_continent(last_continent)") + RkiCountry.delete_all_countries_for_continent(last_continent) + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" RkiTestService.delete_last_continent() [DONE]") + app.logger.debug("------------------------------------------------------------") + + def run_update_star_schema_incremental(self): + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" RkiTestService.run_update_star_schema_incremental() [START]") + app.logger.debug("------------------------------------------------------------") + self.__rki_service.run_update_star_schema_incremental() + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" RkiTestService.run_update_star_schema_incremental() [DONE]") + app.logger.debug("------------------------------------------------------------") + + def full_update_dimension_tables(self): + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" RkiTestService.full_update_dimension_tables() [START]") + app.logger.debug("------------------------------------------------------------") + app.logger.debug("") + RkiData.remove_all() + RkiCountry.remove_all() + for continent in RkiCountryRegion.get_all(): + app.logger.info("continent.region: " + continent.region) + for oi in RkiImport.get_countries_for_continent(continent.region): + app.logger.info("continent.region: " + continent.region +" - oi.location: " + oi.location) + o = RkiCountry( + continent_id=continent.id, + continent=continent, + location=oi.location, + iso_code=oi.iso_code, + population=oi.population, + population_density=oi.population_density, + median_age=oi.median_age, + aged_65_older=oi.aged_65_older, + aged_70_older=oi.aged_70_older, + gdp_per_capita=oi.gdp_per_capita, + extreme_poverty=oi.extreme_poverty, + cardiovasc_death_rate=oi.cardiovasc_death_rate, + diabetes_prevalence=oi.diabetes_prevalence, + female_smokers=oi.female_smokers, + male_smokers=oi.male_smokers, + handwashing_facilities=oi.handwashing_facilities, + hospital_beds_per_thousand=oi.hospital_beds_per_thousand, + life_expectancy=oi.life_expectancy, + human_development_index=oi.human_development_index + ) + db.session.add(o) + db.session.commit() + app.logger.debug("") + app.logger.debug("------------------------------------------------------------") + app.logger.debug(" RkiTestService.full_update_dimension_tables() [DONE]") + app.logger.debug("------------------------------------------------------------") diff --git a/src/covid19/blueprints/rki_cases_test/rki_test_views.py b/src/covid19/blueprints/rki_cases_test/rki_test_views.py new file mode 100644 index 0000000000000000000000000000000000000000..5ce409c5f7b4f3fcc744a8afdd8c733a891baad8 --- /dev/null +++ b/src/covid19/blueprints/rki_cases_test/rki_test_views.py @@ -0,0 +1,221 @@ +from flask import render_template, redirect, url_for, flash, Blueprint +from celery import states +from celery.utils.log import get_task_logger +from flask_login import login_required + +from database import app, db + +from covid19.blueprints.app_all.all_services import who_service, owid_service +from covid19.blueprints.app_all.all_services import rki_service, rki_vaccination_service +from covid19.blueprints.app_all.all_services import ecdc_service, divi_service +from covid19.blueprints.app_all.all_services import app_admin_service, app_user_service +from covid19.blueprints.app_mq.application_workers import celery +from covid19.blueprints.rki_cases.rki_model import RkiData +from covid19.blueprints.rki_cases.rki_model_import import RkiImport +from covid19.blueprints.app_application.application_model_transient import ApplicationPage + +from covid19.blueprints.owid_test.owid_test_service import OwidTestService + +rki_test_service = OwidTestService(db, rki_service) + +app_rki_test = Blueprint('rki_test', __name__, template_folder='templates', url_prefix='/rki/test') + +# --------------------------------------------------------------------------------------------------------------- +# Url Routes Frontend +# --------------------------------------------------------------------------------------------------------------- + + +@app_rki_test.route('/tests') +@login_required +def url_rki_test_tests(): + app.logger.info("url_rki_test_tests - START") + page_info = ApplicationPage('RKI', "Tests") + return render_template( + 'rki_test/rki_tests.html', + page_info=page_info) + + +@app_rki_test.route('/full_update_dimension_tables') +@login_required +def url_rki_test_full_update_dimension_tables(): + app.logger.info("url_rki_test_full_update_dimension_tables - START") + flash("url_rki_test_full_update_dimension_tables - START") + return redirect(url_for('owid_test.url_rki_test_tests')) + + +@app_rki_test.route('/update_dimension_tables') +@login_required +def url_rki_test_update_dimension_tables(): + app.logger.info("url_rki_test_update_dimension_tables - START") + flash("url_rki_test_update_dimension_tables - START") + return redirect(url_for('owid_test.url_rki_test_tests')) + + +@app_rki_test.route('/full_update_fact_table') +@login_required +def url_rki_test_full_update_fact_table(): + app.logger.info("url_rki_test_full_update_fact_table - START") + flash("url_rki_test_full_update_fact_table - START") + return redirect(url_for('owid_test.url_rki_test_tests')) + + +@app_rki_test.route('/update_fact_table') +@login_required +def url_rki_test_update_fact_table(): + app.logger.info("url_rki_test_update_fact_table - START") + flash("url_rki_test_update_fact_table - START") + return redirect(url_for('owid_test.url_rki_test_tests')) + + +@app_rki_test.route('/full_update_star_schema') +@login_required +def url_rki_test_full_update_star_schema(): + app.logger.info("url_rki_test_full_update_star_schema - START") + flash("url_rki_test_full_update_star_schema - START") + return redirect(url_for('owid_test.url_rki_test_tests')) + + +@app_rki_test.route('/update_star_schema') +@login_required +def url_rki_test_update_star_schema(): + app.logger.info("url_rki_test_update_star_schema - START") + flash("url_rki_test_update_star_schema - START") + return redirect(url_for('owid_test.url_rki_test_tests')) + + +@app_rki_test.route('/rki_import/countries') +@login_required +def url_rki_test_rki_import_countries(): + app.logger.info("url_rki_test_rki_import_countries - START") + flash("url_rki_test_rki_import_countries - START") + i = 0 + for c in RkiImport.countries(): + i += 1 + line = " | " + str(i) + " | " + c.countries.iso_code + " | " + c.countries.location + " | " + c.countries.continent + " | " + app.logger.info(line) + app.logger.info("url_rki_test_rki_import_countries - DONE") + flash("url_rki_test_rki_import_countries - DONE") + return redirect(url_for('owid_test.url_rki_test_tests')) + + +@app_rki_test.route('/rki_import/get_new_dates_reported_as_array') +@login_required +def url_rki_test_rki_import_get_new_dates_reported_as_array(): + app.logger.info("url_rki_test_rki_import_get_new_dates_reported_as_array - START") + flash("url_rki_test_rki_import_get_new_dates_reported_as_array - START") + i = 0 + for date_reported in RkiImport.get_new_dates_reported_as_array(): + i += 1 + line = " | " + str(i) + " | " + date_reported + " | " + app.logger.info(line) + app.logger.info("url_rki_test_rki_import_get_new_dates_reported_as_array - DONE") + flash("url_rki_test_rki_import_get_new_dates_reported_as_array - DONE") + return redirect(url_for('owid_test.url_rki_test_tests')) + + +@app_rki_test.route('/rki_data/get_datum_of_all_data') +@login_required +def url_rki_test_rki_data_get_datum_of_all_data(): + app.logger.info("url_rki_test_rki_data_get_datum_of_all_data - START") + flash("url_rki_test_rki_data_get_datum_of_all_data - START") + for datum in RkiData.get_datum_of_all_data(): + app.logger.info(str(datum)) + app.logger.info("url_rki_test_rki_data_get_datum_of_all_data - DONE") + flash("url_rki_test_rki_data_get_datum_of_all_data - DONE") + return redirect(url_for('owid_test.url_rki_test_tests')) + + +@app_rki_test.route('/rki_import/get_datum_of_all_import') +@login_required +def url_rki_test_rki_import_get_datum_of_all_import(): + app.logger.info("url_rki_test_rki_import_get_datum_of_all_import - START") + flash("url_rki_test_rki_import_get_datum_of_all_import - START") + for datum in RkiImport.get_datum_of_all_import(): + app.logger.info(str(datum)) + app.logger.info("url_rki_test_rki_import_get_datum_of_all_import - DONE") + flash("url_rki_test_rki_import_get_datum_of_all_import - DONE") + return redirect(url_for('owid_test.url_rki_test_tests')) + + +@app_rki_test.route('/rki_service/service_update/rki_import_get_new_dates_as_array') +@login_required +def url_rki_test_rki_service_service_update_rki_import_get_new_dates_as_array(): + app.logger.info("url_rki_test_rki_service_service_update_rki_import_get_new_dates_as_array - START") + flash("url_rki_test_rki_service_service_update_rki_import_get_new_dates_as_array - START") + for datum in rki_service.service_update.rki_import_get_new_dates_as_array(): + app.logger.info(str(datum)) + app.logger.info("url_rki_test_rki_service_service_update_rki_import_get_new_dates_as_array - DONE") + flash("url_rki_test_rki_service_service_update_rki_import_get_new_dates_as_array - DONE") + return redirect(url_for('owid_test.url_rki_test_tests')) + + +@app_rki_test.route('/rki_test_service/delete_last_day') +@login_required +def url_rki_test_rki_test_service_delete_last_day(): + app.logger.info("url_rki_test_rki_test_service_delete_last_day - START: rki_test_service.delete_last_day()") + flash("url_rki_test_rki_test_service_delete_last_day - START: rki_test_service.delete_last_day()") + rki_test_service.delete_last_day() + app.logger.info("url_rki_test_rki_test_service_delete_last_day - DONE: rki_test_service.delete_last_day()") + flash("url_rki_test_rki_test_service_delete_last_day - DONE: rki_test_service.delete_last_day()") + return redirect(url_for('owid_test.url_rki_test_tests')) + + +@app_rki_test.route('/rki_test_service/delete_last_continent') +@login_required +def url_rki_test_rki_test_service_delete_last_continent(): + app.logger.info("url_rki_test_rki_test_service_delete_last_continent - START: rki_test_service.delete_last_continent()") + flash("url_rki_test_rki_test_service_delete_last_continent - START: rki_test_service.delete_last_continent()") + rki_test_service.delete_last_continent() + flash("url_rki_test_rki_test_service_delete_last_continent - DONE: rki_test_service.delete_last_continent()") + app.logger.info("url_rki_test_rki_test_service_delete_last_continent - DONE: rki_test_service.delete_last_continent()") + return redirect(url_for('owid_test.url_rki_test_tests')) + + +@app_rki_test.route('/rki_test_service/full_update_dimension_tables') +@login_required +def url_rki_test_rki_test_service_full_update_dimension_tables(): + app.logger.info("url_rki_test_rki_test_service_full_update_dimension_tables - START: rki_test_service.full_update_dimension_tables()") + flash("url_rki_test_rki_test_service_full_update_dimension_tables - START: rki_test_service.full_update_dimension_tables()") + rki_test_service.full_update_dimension_tables() + app.logger.info("url_rki_test_rki_test_service_full_update_dimension_tables - DONE: rki_test_service.full_update_dimension_tables()") + flash("url_rki_test_rki_test_service_full_update_dimension_tables - DONE: rki_test_service.full_update_dimension_tables()") + return redirect(url_for('owid_test.url_rki_test_tests')) + + +# ---------------------------------------------------------------------------------------------------------------- +# Celery TASKS +# ---------------------------------------------------------------------------------------------------------------- + + +@celery.task(bind=True) +def task_rki_test_update_star_schema(self): + logger = get_task_logger(__name__) + self.update_state(state=states.STARTED) + logger.info("------------------------------------------------------------") + logger.info(" Received: task_rki_test_update_star_schema [OK] ") + logger.info("------------------------------------------------------------") + rki_test_service.run_update_star_schema_incremental() + self.update_state(state=states.SUCCESS) + result = "OK (task_rki_test_update_star_schema)" + return result + + +# ---------------------------------------------------------------------------------------------------------------- +# URL Routes for Celery TASKS +# ---------------------------------------------------------------------------------------------------------------- + +@app_rki_test.route('/task/owid_test/update_star_schema_incremental') +@login_required +def url_task_rki_test_update_star_schema(): + app.logger.info("url_task_rki_test_update_star_schema - START: task_rki_test_update_star_schema.apply_async()") + flash("url_task_rki_test_update_star_schema - START: task_rki_test_update_star_schema.apply_async()") + task_rki_test_update_star_schema.apply_async() + flash("url_task_rki_test_update_star_schema - DONE: task_rki_test_update_star_schema.apply_async()") + app.logger.info("url_task_rki_test_update_star_schema - DONE: task_rki_test_update_star_schema.apply_async()") + return redirect(url_for('owid_test.url_rki_test_tests')) + + + + + + diff --git a/src/web/__init__.py b/src/covid19/blueprints/rki_cases_test/templates/__init__.py similarity index 100% rename from src/web/__init__.py rename to src/covid19/blueprints/rki_cases_test/templates/__init__.py diff --git a/src/covid19/blueprints/rki_cases_test/templates/rki_test/rki_tests.html b/src/covid19/blueprints/rki_cases_test/templates/rki_test/rki_tests.html new file mode 100644 index 0000000000000000000000000000000000000000..95e8350cdc012009e8d7b80ef16a0be9d520cf43 --- /dev/null +++ b/src/covid19/blueprints/rki_cases_test/templates/rki_test/rki_tests.html @@ -0,0 +1,126 @@ +{% extends 'app_all/layout/page_layout.html' %} + +{% block content %} + {{super()}} + {% include 'owid/navigation/owid_navtabs.html' %} + + <div class="container"> + <p> + <h2>RKI</h2> + </p> + <div class="row"> + <div class="col"> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'rki.url_rki_tasks') }}" + role="button">RKI :: Tasks</a> + </div> + </div> + </div> + <p> + <h4>RKI Tests</h4> + </p> + <div class="row"> + <div class="col"> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'rki_test.url_task_rki_test_update_star_schema') }}" + role="button">url_task_rki_test update_star_schema</a> + </div> + </div> + <div class="col"> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-danger btn-lg btn-block text-left" + href="{{ url_for( 'rki_test.url_rki_test_rki_test_service_full_update_dimension_tables') }}" + role="button">url_rki_test rki_test_service full_update_dimension_tables</a> + </div> + </div> + </div> + <p></p> + <div class="row"> + <div class="col"> + <p> + <h4>Prepare Test Data</h4> + </p> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'rki_test.url_rki_test_rki_test_service_delete_last_day') }}" + role="button">url_rki_test rki_test_service delete_last_day</a> + </div> + <p> </p> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'rki_test.url_rki_test_rki_test_service_delete_last_continent') }}" + role="button">url_rki_test_rki test_service delete_last_continent</a> + </div> + </div> + <div class="col"> + <p><h4>countries</h4></p> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-danger btn-lg btn-block text-left" + href="{{ url_for( 'rki_test.url_rki_test_rki_import_countries') }}" + role="button">url_rki_test rki_import countries</a> + </div> + <p><h4>dates_reported</h4></p> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'rki_test.url_rki_test_rki_import_get_new_dates_reported_as_array') }}" + role="button">url_rki_test rki_import get_new_dates_reported_as_array</a> + <a class="btn btn-danger btn-lg btn-block text-left" + href="{{ url_for( 'rki_test.url_rki_test_rki_data_get_datum_of_all_data') }}" + role="button">url_rki_test rki_data get_datum_of_all_data</a> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'rki_test.url_rki_test_rki_import_get_datum_of_all_import') }}" + role="button">url_rki_test rki_import get_datum_of_all_import</a> + <a class="btn btn-danger btn-lg btn-block text-left" + href="{{ url_for( 'rki_test.url_rki_test_rki_service_service_update_rki_import_get_new_dates_as_array') }}" + role="button">url_rki_test rki_service service_update rki_import_get_new_dates_as_array</a> + </div> + </div> + </div> + <p></p> + <div class="row"> + <div class="col"> + <p> + <h4>Full Update</h4> + </p> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-danger btn-lg btn-block text-left" + href="{{ url_for( 'rki_test.url_rki_test_full_update_dimension_tables') }}" + role="button">url_rki_test full_update_dimension_tables</a> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'rki_test.url_rki_test_full_update_fact_table') }}" + role="button">url_rki_test full_update_fact_table</a> + <a class="btn btn-secondary btn-lg btn-block text-left" + href="{{ url_for( 'rki_test.url_rki_test_full_update_star_schema') }}" + role="button">url_rki_test full_update_star_schema</a> + </div> + </div> + <div class="col"> + <p> + <h4>Update</h4> + </p> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-danger btn-lg btn-block text-left" + href="{{ url_for( 'rki_test.url_rki_test_update_dimension_tables') }}" + role="button">url_rki_test update_dimension_tables</a> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'rki_test.url_rki_test_update_fact_table') }}" + role="button">url_rki_test update_fact_table</a> + <a class="btn btn-secondary btn-lg btn-block text-left" + href="{{ url_for( 'rki_test.url_rki_test_update_star_schema') }}" + role="button">url_rki_test update_star_schema</a> + </div> + </div> + </div> + </div> +{% endblock %} + + + +{% block footer_container %} + +{% endblock %} + + + diff --git a/src/covid19/blueprints/rki_vaccination/__init__.py b/src/covid19/blueprints/rki_vaccination/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_model.py b/src/covid19/blueprints/rki_vaccination/rki_vaccination_model.py similarity index 97% rename from src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_model.py rename to src/covid19/blueprints/rki_vaccination/rki_vaccination_model.py index b68f57bcb414616b6aa17e3b87d965bcb640c48b..873bd31e69756bc49bed6dbb43ebf9a0aafa9639 100644 --- a/src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_model.py +++ b/src/covid19/blueprints/rki_vaccination/rki_vaccination_model.py @@ -1,7 +1,7 @@ from datetime import date from database import db, ITEMS_PER_PAGE -from covid19.blueprints.application.application_model import ApplicationDateReported +from covid19.blueprints.app_all.all_model import ApplicationDateReported, ApplicationRegion class RkiVaccinationDateReported(ApplicationDateReported): diff --git a/src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_model_import.py b/src/covid19/blueprints/rki_vaccination/rki_vaccination_model_import.py similarity index 91% rename from src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_model_import.py rename to src/covid19/blueprints/rki_vaccination/rki_vaccination_model_import.py index 47ac63bf9b132d298e5e941af40effe6b67eb073..5b7de89a0e9845986ad8e788cee54b52f62f97db 100644 --- a/src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_model_import.py +++ b/src/covid19/blueprints/rki_vaccination/rki_vaccination_model_import.py @@ -5,7 +5,6 @@ class RkiVaccinationImport(db.Model): __tablename__ = 'application__import__rki_vaccination' id = db.Column(db.Integer, primary_key=True) - datum = db.Column(db.String(255), nullable=False) dosen_kumulativ = db.Column(db.Integer, nullable=False) dosen_differenz_zum_vortag = db.Column(db.Integer, nullable=False) dosen_biontech_kumulativ = db.Column(db.Integer, nullable=False) @@ -26,6 +25,14 @@ class RkiVaccinationImport(db.Model): indikation_beruf_voll = db.Column(db.Integer, nullable=False) indikation_medizinisch_voll = db.Column(db.Integer, nullable=False) indikation_pflegeheim_voll = db.Column(db.Integer, nullable=False) + date_reported = db.Column(db.String(255), nullable=False) + datum = db.Column(db.Date, nullable=False) + year = db.Column(db.Integer, nullable=False) + month = db.Column(db.Integer, nullable=False) + day_of_month = db.Column(db.Integer, nullable=False) + day_of_week = db.Column(db.Integer, nullable=False) + week_of_year = db.Column(db.Integer, nullable=False) + year_week = db.Column(db.String(255), nullable=False) @classmethod def remove_all(cls): diff --git a/src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_service.py b/src/covid19/blueprints/rki_vaccination/rki_vaccination_service.py similarity index 59% rename from src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_service.py rename to src/covid19/blueprints/rki_vaccination/rki_vaccination_service.py index 72dd2f67d381390dfaa8f4b2534e4285427899d3..eef5fb52a6fa875e249be257816da71b5b8f28c6 100644 --- a/src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_service.py +++ b/src/covid19/blueprints/rki_vaccination/rki_vaccination_service.py @@ -1,10 +1,10 @@ from flask import flash from database import app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig -from covid19.blueprints.application.application_service_download import ApplicationServiceDownload -from covid19.blueprints.rki.rki_vaccination.rki_vaccination_service_import import RkiVaccinationServiceImport -from covid19.blueprints.rki.rki_vaccination.rki_vaccination_service_update import RkiVaccinationServiceUpdate +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig +from covid19.blueprints.app_all.all_service_download import ApplicationServiceDownload +from covid19.blueprints.rki_vaccination.rki_vaccination_service_import import RkiVaccinationServiceImport +from covid19.blueprints.rki_vaccination.rki_vaccination_service_update import RkiVaccinationServiceUpdate, RkiVaccinationServiceUpdateFull class RkiVaccinationService: @@ -17,6 +17,7 @@ class RkiVaccinationService: self.service_download = ApplicationServiceDownload(database, self.cfg) self.service_import = RkiVaccinationServiceImport(database, self.cfg) self.service_update = RkiVaccinationServiceUpdate(database, self.cfg) + self.service_update_full = RkiVaccinationServiceUpdateFull(database, self.cfg) app.logger.debug("------------------------------------------------------------") app.logger.info(" Vaccination Service [ready]") @@ -35,51 +36,63 @@ class RkiVaccinationService: app.logger.info("vaccination_service.task_database_drop_create done") return self - def run_download_only(self): + def run_download(self): self.service_download.download_file() return self - def run_import_only(self): + def run_import(self): self.service_import.import_file() return self - def run_update_dimension_tables_only(self): + def run_full_update_dimension_tables(self): + self.service_update_full.update_dimension_tables_only() + return self + + def run_update_dimension_tables(self): self.service_update.update_dimension_tables_only() return self - def run_update_fact_table_incremental_only(self): + def run_update_fact_table(self): self.service_update.update_fact_table_incremental_only() return self - def run_update_fact_table_initial_only(self): - self.service_update.update_fact_table_initial_only() + def run_full_update_fact_table(self): + self.service_update_full.update_fact_table_initial_only() return self - def run_update_star_schema_incremental(self): + def task_admin_update_star_schema(self): self.service_update.update_star_schema_incremental() return self - def run_update_star_schema_initial(self): - self.run_import_only() - self.service_update.update_star_schema_initial() + def task_admin_full_update_star_schema(self): + self.run_import() + self.service_update_full.update_star_schema_initial() return self def download_all_files(self): self.service_download.download_file() return self - def task_import_all_files(self): + def task_admin_import_all_files(self): self.service_import.import_file() return self - def update_dimension_tables_only(self): + def task_admin_update_full_dimension_tables(self): + self.service_update_full.update_dimension_tables_only() + return self + + def task_admin_update_dimension_tables(self): + self.service_update.update_dimension_tables_only() + return self + + def update_dimension_tables(self): self.service_update.update_dimension_tables_only() return self - def update_fact_table_initial_only(self): - self.service_update.update_fact_table_initial_only() + def full_update_fact_table(self): + self.service_update_full.update_fact_table_initial_only() return self - def update_fact_table_incremental_only(self): + def update_fact_table(self): self.service_update.update_fact_table_incremental_only() return self diff --git a/src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_service_import.py b/src/covid19/blueprints/rki_vaccination/rki_vaccination_service_import.py similarity index 84% rename from src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_service_import.py rename to src/covid19/blueprints/rki_vaccination/rki_vaccination_service_import.py index 06faaed67b4a97e4f6233bd1ada8fe26b7d05d5b..44966df6b047df51763b900546b16d37027d49b1 100644 --- a/src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_service_import.py +++ b/src/covid19/blueprints/rki_vaccination/rki_vaccination_service_import.py @@ -2,8 +2,10 @@ import csv import psycopg2 from database import db, app -from covid19.blueprints.rki.rki_vaccination.rki_vaccination_model_import import RkiVaccinationImport -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig + +from covid19.blueprints.rki_vaccination.rki_vaccination_model import RkiVaccinationDateReported +from covid19.blueprints.rki_vaccination.rki_vaccination_model_import import RkiVaccinationImport +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig class RkiVaccinationServiceImport: @@ -34,8 +36,9 @@ class RkiVaccinationServiceImport: with open(src_cvsfile_name, newline='\n') as csv_file: file_reader = csv.DictReader(csv_file, delimiter='\t', quotechar='"') for row in file_reader: + date_reported = row['date'] + d = RkiVaccinationDateReported.create_new_object_factory(my_date_rep=date_reported) o = RkiVaccinationImport( - datum=row['date'], dosen_kumulativ=self.__int(row['dosen_kumulativ']), dosen_differenz_zum_vortag=self.__int(row['dosen_differenz_zum_vortag']), dosen_biontech_kumulativ=self.__int(row['dosen_biontech_kumulativ']), @@ -55,7 +58,15 @@ class RkiVaccinationServiceImport: indikation_alter_voll=self.__int(row['indikation_alter_voll']), indikation_beruf_voll=self.__int(row['indikation_beruf_voll']), indikation_medizinisch_voll=self.__int(row['indikation_medizinisch_voll']), - indikation_pflegeheim_voll=self.__int(row['indikation_pflegeheim_voll']) + indikation_pflegeheim_voll=self.__int(row['indikation_pflegeheim_voll']), + date_reported=date_reported, + datum=d.datum, + year=d.year, + month=d.month, + day_of_month=d.day_of_month, + day_of_week=d.day_of_week, + week_of_year=d.day_of_week, + year_week=d.year_week ) db.session.add(o) k += 1 diff --git a/src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_service_update.py b/src/covid19/blueprints/rki_vaccination/rki_vaccination_service_update.py similarity index 50% rename from src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_service_update.py rename to src/covid19/blueprints/rki_vaccination/rki_vaccination_service_update.py index d1d382cdf46138255f3c3cabbfe7769269d6b304..407c81bbf6239149dfe4f36802394eff2b623bed 100644 --- a/src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_service_update.py +++ b/src/covid19/blueprints/rki_vaccination/rki_vaccination_service_update.py @@ -1,11 +1,10 @@ from database import db, app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig -from covid19.blueprints.rki.rki_vaccination.rki_vaccination_model_import import RkiVaccinationImport -from covid19.blueprints.rki.rki_vaccination.rki_vaccination_model import RkiVaccinationDateReported, RkiVaccinationData +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig +from covid19.blueprints.rki_vaccination.rki_vaccination_model_import import RkiVaccinationImport +from covid19.blueprints.rki_vaccination.rki_vaccination_model import RkiVaccinationDateReported, RkiVaccinationData - -class RkiVaccinationServiceUpdate: +class RkiVaccinationServiceUpdateBase: def __init__(self, database, config: ApplicationServiceConfig): app.logger.debug("------------------------------------------------------------") app.logger.debug(" Europe Service Update [init]") @@ -15,6 +14,151 @@ class RkiVaccinationServiceUpdate: app.logger.debug("------------------------------------------------------------") app.logger.debug(" Europe Service Update [ready] ") + +class RkiVaccinationServiceUpdateFull(RkiVaccinationServiceUpdateBase): + + def __update_date_reported(self): + app.logger.info(" __update_date_reported [begin]") + app.logger.info("------------------------------------------------------------") + RkiVaccinationData.remove_all() + RkiVaccinationDateReported.remove_all() + date_reported_list = RkiVaccinationImport.get_date_reported_as_array() + i = 0 + for one_date_reported in date_reported_list: + i += 1 + output = " [ " + str(i) + " ] " + one_date_reported + " added" + o = RkiVaccinationDateReported.create_new_object_factory(one_date_reported) + db.session.add(o) + app.logger.info(output) + db.session.commit() + app.logger.info(" __update_date_reported [done]") + app.logger.info("------------------------------------------------------------") + return self + + def __update_fact_table_initial(self): + app.logger.info(" __update_data_initial [begin]") + app.logger.info("------------------------------------------------------------") + RkiVaccinationData.remove_all() + result_date_rep = RkiVaccinationImport.get_date_rep() + i = 0 + for item_date_rep, in result_date_rep: + date_reported = RkiVaccinationDateReported.find_by_date_reported( + p_date_reported=item_date_rep + ) + if date_reported is None: + o = RkiVaccinationDateReported.create_new_object_factory(my_date_rep=item_date_rep) + date_reported = o + result_data_import = RkiVaccinationImport.find_by_datum(date_reported.date_reported_import_str) + for item_import in result_data_import: + o = RkiVaccinationData( + date_reported=date_reported, + dosen_kumulativ=item_import.dosen_kumulativ, + dosen_differenz_zum_vortag=item_import.dosen_differenz_zum_vortag, + dosen_biontech_kumulativ=item_import.dosen_biontech_kumulativ, + dosen_moderna_kumulativ=item_import.dosen_moderna_kumulativ, + personen_erst_kumulativ=item_import.personen_erst_kumulativ, + personen_voll_kumulativ=item_import.personen_voll_kumulativ, + impf_quote_erst=item_import.impf_quote_erst, + impf_quote_voll=item_import.impf_quote_voll, + indikation_alter_dosen=item_import.indikation_alter_dosen, + indikation_beruf_dosen=item_import.indikation_beruf_dosen, + indikation_medizinisch_dosen=item_import.indikation_medizinisch_dosen, + indikation_pflegeheim_dosen=item_import.indikation_pflegeheim_dosen, + indikation_alter_erst=item_import.indikation_alter_erst, + indikation_beruf_erst=item_import.indikation_beruf_erst, + indikation_medizinisch_erst=item_import.indikation_medizinisch_erst, + indikation_pflegeheim_erst=item_import.indikation_pflegeheim_erst, + indikation_alter_voll=item_import.indikation_alter_voll, + indikation_beruf_voll=item_import.indikation_beruf_voll, + indikation_medizinisch_voll=item_import.indikation_medizinisch_voll, + indikation_pflegeheim_voll=item_import.indikation_pflegeheim_voll + ) + db.session.add(o) + i += 1 + if i % 500 == 0: + app.logger.info(" update Vaccination initial ... " + str(i) + " rows") + db.session.commit() + db.session.commit() + app.logger.info(" update Vaccination initial ... " + str(i) + " rows total") + app.logger.info(" __update_data_initial [done]") + app.logger.info("------------------------------------------------------------") + return self + + def __update_fact_table_incremental(self): + app.logger.info(" __update_fact_table_incremental Vaccination [begin]") + app.logger.info("------------------------------------------------------------") + result_date_rep = RkiVaccinationImport.get_daterep_missing_in_vaccination_data() + i = 0 + for item_date_rep in result_date_rep: + date_reported = RkiVaccinationDateReported.find_by_date_reported(item_date_rep) + #date_reported = RkiVaccinationDateReported.create_new_object_factory(item_date_rep) + result_data_import = RkiVaccinationImport.find_by_datum(item_date_rep) + for item_data_import in result_data_import: + o = RkiVaccinationData( + date_reported=date_reported, + dosen_kumulativ=item_data_import.dosen_kumulativ, + dosen_differenz_zum_vortag=item_data_import.dosen_differenz_zum_vortag, + dosen_biontech_kumulativ=item_data_import.dosen_biontech_kumulativ, + dosen_moderna_kumulativ=item_data_import.dosen_moderna_kumulativ, + personen_erst_kumulativ=item_data_import.personen_erst_kumulativ, + personen_voll_kumulativ=item_data_import.personen_voll_kumulativ, + impf_quote_erst=item_data_import.impf_quote_erst, + impf_quote_voll=item_data_import.impf_quote_voll, + indikation_alter_dosen=item_data_import.indikation_alter_dosen, + indikation_beruf_dosen=item_data_import.indikation_beruf_dosen, + indikation_medizinisch_dosen=item_data_import.indikation_medizinisch_dosen, + indikation_pflegeheim_dosen=item_data_import.indikation_pflegeheim_dosen, + indikation_alter_erst=item_data_import.indikation_alter_erst, + indikation_beruf_erst=item_data_import.indikation_beruf_erst, + indikation_medizinisch_erst=item_data_import.indikation_medizinisch_erst, + indikation_pflegeheim_erst=item_data_import.indikation_pflegeheim_erst, + indikation_alter_voll=item_data_import.indikation_alter_voll, + indikation_beruf_voll=item_data_import.indikation_beruf_voll, + indikation_medizinisch_voll=item_data_import.indikation_medizinisch_voll, + indikation_pflegeheim_voll=item_data_import.indikation_pflegeheim_voll + ) + db.session.add(o) + i += 1 + if i % 500 == 0: + app.logger.info(" update Vaccination incremental ... " + str(i) + " rows") + db.session.commit() + db.session.commit() + app.logger.info(" update Vaccination incremental ... " + str(i) + " rows total") + app.logger.info(" __update_fact_table_incremental Vaccination [done]") + app.logger.info("------------------------------------------------------------") + return self + + def __update_dimension_table_date_reported(self): + self.__update_date_reported() + return self + + def update_dimension_tables_only(self): + self.__update_dimension_table_date_reported() + return self + + def update_fact_table_incremental_only(self): + self.__update_fact_table_incremental() + return self + + def update_fact_table_initial_only(self): + self.__update_fact_table_initial() + return self + + def update_star_schema_incremental(self): + self.__update_dimension_table_date_reported() + self.__update_fact_table_incremental() + return self + + def update_star_schema_initial(self): + RkiVaccinationData.remove_all() + RkiVaccinationDateReported.remove_all() + self.__update_dimension_table_date_reported() + self.__update_fact_table_initial() + return self + + +class RkiVaccinationServiceUpdate(RkiVaccinationServiceUpdateBase): + def __update_date_reported(self): app.logger.info(" __update_date_reported [begin]") app.logger.info("------------------------------------------------------------") diff --git a/src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_views.py b/src/covid19/blueprints/rki_vaccination/rki_vaccination_views.py similarity index 72% rename from src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_views.py rename to src/covid19/blueprints/rki_vaccination/rki_vaccination_views.py index 7b684f587cdd5d73516cedfb25911554861c10f9..f168bfb6dbe368d93e8904f297566cab5321ca76 100644 --- a/src/covid19/blueprints/rki/rki_vaccination/rki_vaccination_views.py +++ b/src/covid19/blueprints/rki_vaccination/rki_vaccination_views.py @@ -4,12 +4,15 @@ from celery.utils.log import get_task_logger from flask_admin.contrib.sqla import ModelView from database import admin, db -from covid19.blueprints.application.application_services import rki_vaccination_service -from covid19.blueprints.application.application_workers import celery +from covid19.blueprints.app_all.all_services import who_service, owid_service +from covid19.blueprints.app_all.all_services import rki_service, rki_vaccination_service +from covid19.blueprints.app_all.all_services import ecdc_service, divi_service +from covid19.blueprints.app_all.all_services import app_admin_service, app_user_service +from covid19.blueprints.app_mq.application_workers import celery -from covid19.blueprints.rki.rki_vaccination.rki_vaccination_model import RkiVaccinationData, RkiVaccinationDateReported -from covid19.blueprints.rki.rki_vaccination.rki_vaccination_model_import import RkiVaccinationImport -from covid19.blueprints.application.application_model_transient import ApplicationPage +from covid19.blueprints.rki_vaccination.rki_vaccination_model import RkiVaccinationData, RkiVaccinationDateReported +from covid19.blueprints.rki_vaccination.rki_vaccination_model_import import RkiVaccinationImport +from covid19.blueprints.app_application.application_model_transient import ApplicationPage app_rki_vaccination = Blueprint('rki_vaccination', __name__, template_folder='templates', url_prefix='/rki/vaccination') @@ -67,72 +70,71 @@ def url_vaccination_data(page=1): @celery.task(bind=True) -def task_vaccination_download_only(self): +def task_vaccination_import(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") - logger.info(" Received: task_europe_download_only [OK] ") + logger.info(" Received: task_europe_import_only [OK] ") logger.info("------------------------------------------------------------") - rki_vaccination_service.run_download_only() + rki_vaccination_service.run_import() self.update_state(state=states.SUCCESS) - result = "OK (task_europe_download_only)" + result = "OK (task_europe_import_only)" return result @celery.task(bind=True) -def task_vaccination_import_only(self): +def task_vaccination_full_update_dimension_tables(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") - logger.info(" Received: task_europe_import_only [OK] ") + logger.info(" Received: task_vaccination_full_update_dimension_tables [OK] ") logger.info("------------------------------------------------------------") - rki_vaccination_service.run_import_only() + rki_vaccination_service.run_full_update_dimension_tables() self.update_state(state=states.SUCCESS) - result = "OK (task_europe_import_only)" + result = "OK (task_vaccination_full_update_dimension_tables)" return result - @celery.task(bind=True) -def task_vaccination_update_dimension_tables_only(self): +def task_vaccination_update_dimension_tables(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") logger.info(" Received: task_europe_update_dimension_tables_only [OK] ") logger.info("------------------------------------------------------------") - rki_vaccination_service.run_update_dimension_tables_only() + rki_vaccination_service.run_update_dimension_tables() self.update_state(state=states.SUCCESS) result = "OK (task_europe_update_dimension_tables_only)" return result @celery.task(bind=True) -def task_vaccination_update_facttable_incremental_only(self): +def task_vaccination_update_facttable(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") logger.info(" Received: task_europe_update_fact_table_incremental_only [OK] ") logger.info("------------------------------------------------------------") - rki_vaccination_service.run_update_fact_table_incremental_only() + rki_vaccination_service.run_update_fact_table() self.update_state(state=states.SUCCESS) result = "OK (task_europe_update_fact_table_incremental_only)" return result @celery.task(bind=True) -def task_vaccination_update_facttable_initial_only(self): +def task_vaccination_full_update_facttable(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") logger.info(" Received: task_europe_update_fact_table_initial_only [OK] ") logger.info("------------------------------------------------------------") - rki_vaccination_service.run_update_fact_table_initial_only() + rki_vaccination_service.run_full_update_fact_table() self.update_state(state=states.SUCCESS) result = "OK (task_europe_update_fact_table_initial_only)" return result @celery.task(bind=True) -def task_vaccination_update_starschema_incremental(self): +def task_vaccination_update_starschema(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") @@ -145,7 +147,7 @@ def task_vaccination_update_starschema_incremental(self): @celery.task(bind=True) -def task_vaccination_task_update_starschema_initial(self): +def task_vaccination_full_update_starschema(self): logger = get_task_logger(__name__) self.update_state(state=states.STARTED) logger.info("------------------------------------------------------------") @@ -162,52 +164,59 @@ def task_vaccination_task_update_starschema_initial(self): # ---------------------------------------------------------------------------------------------------------------- -@app_rki_vaccination.route('/task/download/only') -def url_vaccination_task_download_only(): +@app_rki_vaccination.route('/task/download') +def url_task_vaccination_download(): flash("url_vaccination_task_download_only started") - rki_vaccination_service.run_download_only() + rki_vaccination_service.run_download() return redirect(url_for('rki_vaccination.url_vaccination_tasks')) -@app_rki_vaccination.route('/task/import/only') -def url_vaccination_task_import_only(): +@app_rki_vaccination.route('/task/import') +def url_task_vaccination_import(): flash("url_vaccination_task_import_only started") - task_vaccination_import_only.apply_async() + task_vaccination_import.apply_async() + return redirect(url_for('rki_vaccination.url_vaccination_tasks')) + + +@app_rki_vaccination.route('/task/update/full/dimension-tables') +def url_task_vaccination_full_update_dimension_tables(): + flash("url_vaccination_task_update_dimensiontables_only started") + task_vaccination_full_update_dimension_tables.apply_async() return redirect(url_for('rki_vaccination.url_vaccination_tasks')) -@app_rki_vaccination.route('/task/update/dimension-tables/only') -def url_vaccination_task_update_dimensiontables_only(): +@app_rki_vaccination.route('/task/update/dimension-tables') +def url_task_vaccination_update_dimension_tables(): flash("url_vaccination_task_update_dimensiontables_only started") - task_vaccination_update_dimension_tables_only.apply_async() + task_vaccination_update_dimension_tables.apply_async() return redirect(url_for('rki_vaccination.url_vaccination_tasks')) @app_rki_vaccination.route('/task/update/fact-table/incremental/only') -def url_vaccination_task_update_facttable_incremental_only(): +def url_task_vaccination_update_facttable(): flash("url_vaccination_task_update_facttable_incremental_only started") - task_vaccination_update_facttable_incremental_only.apply_async() + task_vaccination_update_facttable.apply_async() return redirect(url_for('rki_vaccination.url_vaccination_tasks')) @app_rki_vaccination.route('/task/update/fact-table/initial/only') -def url_vaccination_task_update_facttable_initial_only(): +def url_task_vaccination_full_update_facttable(): flash("url_vaccination_task_update_facttable_initial_only started") - task_vaccination_update_facttable_initial_only.apply_async() + task_vaccination_full_update_facttable.apply_async() return redirect(url_for('rki_vaccination.url_vaccination_tasks')) @app_rki_vaccination.route('/task/update/star_schema/initial') -def url_vaccination_task_update_starschema_initial(): +def url_task_vaccination_full_update_starschema(): flash("url_vaccination_task_update_star_schemainitial started") - rki_vaccination_service.run_download_only() - task_vaccination_task_update_starschema_initial.apply_async() + rki_vaccination_service.run_download() + task_vaccination_full_update_starschema.apply_async() return redirect(url_for('rki_vaccination.url_vaccination_tasks')) @app_rki_vaccination.route('/task/update/star_schema/incremental') -def url_vaccination_task_update_starschema_incremental(): +def url_task_vaccination_update_starschema(): flash("url_vaccination_task_update_starschema_incremental started") - rki_vaccination_service.run_download_only() - task_vaccination_update_starschema_incremental.apply_async() + rki_vaccination_service.run_download() + task_vaccination_update_starschema.apply_async() return redirect(url_for('rki_vaccination.url_vaccination_tasks')) diff --git a/src/covid19/blueprints/rki_vaccination/templates/__init__.py b/src/covid19/blueprints/rki_vaccination/templates/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data.html b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data.html similarity index 93% rename from src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data.html rename to src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data.html index 6d83a2a824306f10fb53e35b192236572ba03bd9..55f9909d474d4aac1131cf79162157d0a3b18442 100644 --- a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data.html +++ b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data_pagination.html b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data_pagination.html similarity index 100% rename from src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data_pagination.html rename to src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data_pagination.html diff --git a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data_table.html b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data_table.html similarity index 100% rename from src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data_table.html rename to src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data_table.html diff --git a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data_table_head.html b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data_table_head.html similarity index 100% rename from src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data_table_head.html rename to src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/data/rki_vaccination_data_table_head.html diff --git a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/imported/rki_vaccination_imported.html b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/imported/rki_vaccination_imported.html similarity index 93% rename from src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/imported/rki_vaccination_imported.html rename to src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/imported/rki_vaccination_imported.html index 45878b35595cbf872180deea6416fe554bd45f12..ded66e63dd5e51b68383b047cd64cd45e2841665 100644 --- a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/imported/rki_vaccination_imported.html +++ b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/imported/rki_vaccination_imported.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/imported/rki_vaccination_imported_pagination.html b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/imported/rki_vaccination_imported_pagination.html similarity index 100% rename from src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/imported/rki_vaccination_imported_pagination.html rename to src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/imported/rki_vaccination_imported_pagination.html diff --git a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/imported/rki_vaccination_imported_table.html b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/imported/rki_vaccination_imported_table.html similarity index 100% rename from src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/imported/rki_vaccination_imported_table.html rename to src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/imported/rki_vaccination_imported_table.html diff --git a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/navigation/rki_vaccination_navbar_dropdown.html b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/navigation/rki_vaccination_navbar_dropdown.html similarity index 72% rename from src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/navigation/rki_vaccination_navbar_dropdown.html rename to src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/navigation/rki_vaccination_navbar_dropdown.html index dd38e5fce33bad9b6c520ff0d893ca87e94dcaf7..69bc853692c8514f5ddb952285b4f7c6b8cb35b1 100644 --- a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/navigation/rki_vaccination_navbar_dropdown.html +++ b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/navigation/rki_vaccination_navbar_dropdown.html @@ -25,41 +25,46 @@ <div class="dropdown-divider"></div> </li> <li> - <a class="dropdown-item" href="{{ url_for( 'rki_vaccination.url_vaccination_task_download_only') }}"> + <a class="dropdown-item" href="{{ url_for( 'rki_vaccination.url_task_vaccination_download') }}"> RKI Vaccination :: TASK:: url_vaccination_task_download_only </a> </li> <li> - <a class="dropdown-item" href="{{ url_for( 'rki_vaccination.url_vaccination_task_import_only') }}"> + <a class="dropdown-item" href="{{ url_for( 'rki_vaccination.url_task_vaccination_import') }}"> RKI Vaccination :: TASK:: url_vaccination_task_download_only </a> </li> <li> - <a class="dropdown-item" href="{{ url_for( 'rki_vaccination.url_vaccination_task_update_dimensiontables_only') }}"> - RKI Vaccination :: TASK:: url_vaccination_task_update_dimensiontables_only + <a class="dropdown-item" href="{{ url_for( 'rki_vaccination.url_task_vaccination_full_update_dimension_tables') }}"> + RKI Vaccination :: TASK:: url_task_vaccination_full_update_dimension_tables </a> </li> <li> - <a class="dropdown-item" href="{{ url_for( 'rki_vaccination.url_vaccination_task_update_facttable_incremental_only') }}"> - RKI Vaccination :: TASK:: url_vaccination_task_update_facttable_incremental_only + <a class="dropdown-item" href="{{ url_for( 'rki_vaccination.url_task_vaccination_update_dimension_tables') }}"> + RKI Vaccination :: TASK:: url_task_vaccination_update_dimension_tables </a> </li> <li> - <a class="dropdown-item" href="{{ url_for( 'rki_vaccination.url_vaccination_task_update_facttable_initial_only') }}"> - RKI Vaccination :: TASK:: url_vaccination_task_update_facttable_initial_only + <a class="dropdown-item" href="{{ url_for( 'rki_vaccination.url_task_vaccination_full_update_facttable') }}"> + RKI Vaccination :: TASK:: url_task_vaccination_full_update_facttable + </a> + </li> + <li> + <a class="dropdown-item" href="{{ url_for( 'rki_vaccination.url_task_vaccination_update_facttable') }}"> + RKI Vaccination :: TASK:: url_task_vaccination_update_facttable </a> </li> <li> <div class="dropdown-divider"></div> </li> <li> - <a class="dropdown-item" href="{{ url_for( 'rki_vaccination.url_vaccination_task_update_starschema_initial') }}"> - RKI Vaccination :: TASK:: url_vaccination_task_update_starschema_initial + <a class="dropdown-item" href="{{ url_for( 'rki_vaccination.url_task_vaccination_full_update_starschema') }}"> + RKI Vaccination :: TASK:: url_task_vaccination_full_update_starschema </a> </li> <li> - <a class="dropdown-item" href="{{ url_for( 'rki_vaccination.url_vaccination_task_update_starschema_incremental') }}"> - RKI Vaccination :: TASK:: url_vaccination_task_update_starschema_incremental + <a class="dropdown-item" href="{{ url_for( 'rki_vaccination.url_task_vaccination_update_starschema') }}"> + RKI Vaccination :: TASK:: url_task_vaccination_update_starschema </a> </li> <li> diff --git a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/navigation/rki_vaccination_navtabs.html b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/navigation/rki_vaccination_navtabs.html similarity index 93% rename from src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/navigation/rki_vaccination_navtabs.html rename to src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/navigation/rki_vaccination_navtabs.html index 5ee4ad1a43ed91396740119c100cd6e53df519e2..6a90979d7a46f67aabafd4de92d76ca63c9127b9 100644 --- a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/navigation/rki_vaccination_navtabs.html +++ b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/navigation/rki_vaccination_navtabs.html @@ -8,6 +8,7 @@ RKI Vaccination Info </a> </li> + {% if current_user.is_authenticated %} <li class="nav-item"> <a class="nav-link" href="{{ url_for( 'rki_vaccination.url_vaccination_tasks') }}"> @@ -20,6 +21,7 @@ RKI Vaccination :: imported </a> </li> + {% endif %} <li class="nav-item"> <a class="nav-link" href="{{ url_for( 'rki_vaccination.url_vaccination_data') }}"> diff --git a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/rki_vaccination_info.html b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/rki_vaccination_info.html similarity index 95% rename from src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/rki_vaccination_info.html rename to src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/rki_vaccination_info.html index 7d35cfe4a996d47902ab93cefed0b15d4857fc1a..cd99ef4575f1b7247a216691e70f92df2163ee4a 100644 --- a/src/covid19/blueprints/rki/rki_vaccination/templates/rki_vaccination/rki_vaccination_info.html +++ b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/rki_vaccination_info.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/rki_vaccination_tasks.html b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/rki_vaccination_tasks.html new file mode 100644 index 0000000000000000000000000000000000000000..6b67f5bb9915acf11f061819b745287c24b5d067 --- /dev/null +++ b/src/covid19/blueprints/rki_vaccination/templates/rki_vaccination/rki_vaccination_tasks.html @@ -0,0 +1,79 @@ +{% extends 'app_all/layout/page_layout.html' %} + +{% block content %} + {{super()}} + {% include 'rki_vaccination/navigation/rki_vaccination_navtabs.html' %} + + <div class="container"> + <div class="row"> + <div class="col"> + <h3>RKI Vaccination Tasks</h3> + </div> + </div> + <div class="row"> + <div class="col"> + <h4>Full Update</h4> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-danger btn-lg btn-block text-left" + href="{{ url_for( 'rki_vaccination.url_task_vaccination_full_update_starschema') }}" + role="button">Vaccination :: Task :: update :: star_schema :: full</a> + </div> + </div> + <div class="col"> + <h4>Update</h4> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'rki_vaccination.url_task_vaccination_update_starschema') }}" + role="button">Vaccination :: Task :: update :: star_schema</a> + </div> + </div> + </div> + <p></p> + <div class="row"> + <div class="col"> + <h4>Full Update</h4> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-success btn-lg btn-block text-left" + href="{{ url_for( 'rki_vaccination.url_task_vaccination_download') }}" + role="button">Vaccination :: Task :: download :: only</a> + + <a class="btn btn-info btn-lg btn-block text-left" + href="{{ url_for( 'rki_vaccination.url_task_vaccination_import') }}" + role="button">Vaccination :: Task :: import :: only</a> + + <a class="btn btn-warning btn-lg btn-block text-left" + href="{{ url_for( 'rki_vaccination.url_task_vaccination_full_update_dimension_tables') }}" + role="button">Vaccination :: Task :: update :: dimension-tables :: full</a> + + <a class="btn btn-secondary btn-lg btn-block text-left" + href="{{ url_for( 'rki_vaccination.url_task_vaccination_full_update_facttable') }}" + role="button">Vaccination :: Task :: update :: fact-table :: full</a> + </div> + </div> + <div class="col"> + <h4>Update</h4> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-success btn-lg btn-block text-left" + href="{{ url_for( 'rki_vaccination.url_task_vaccination_download') }}" + role="button">Vaccination :: Task :: download :: only</a> + + <a class="btn btn-info btn-lg btn-block text-left" + href="{{ url_for( 'rki_vaccination.url_task_vaccination_import') }}" + role="button">Vaccination :: Task :: import :: only</a> + + <a class="btn btn-warning btn-lg btn-block text-left" + href="{{ url_for( 'rki_vaccination.url_task_vaccination_update_dimension_tables') }}" + role="button">Vaccination :: Task :: update :: dimension-tables</a> + + <a class="btn btn-secondary btn-lg btn-block text-left" + href="{{ url_for( 'rki_vaccination.url_task_vaccination_update_facttable') }}" + role="button">Vaccination :: Task :: update :: fact-table</a> + </div> + </div> + </div> + </div> +{% endblock %} + + + + diff --git a/src/covid19/blueprints/who/templates/who/country/who_country_all.html b/src/covid19/blueprints/who/templates/who/country/who_country_all.html index da3c31d72d0481d16de5409022113b1f148ca06e..f0cb63bbdf1f9208bd37bfc884eb0d1eca142d86 100644 --- a/src/covid19/blueprints/who/templates/who/country/who_country_all.html +++ b/src/covid19/blueprints/who/templates/who/country/who_country_all.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/country/who_country_germany.html b/src/covid19/blueprints/who/templates/who/country/who_country_germany.html index cd4675faad9c64d74e8822f753415844f80a501a..9a5d2f990142141a6d0fafcb93f634be75f0c2f8 100644 --- a/src/covid19/blueprints/who/templates/who/country/who_country_germany.html +++ b/src/covid19/blueprints/who/templates/who/country/who_country_germany.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/country/who_country_one.html b/src/covid19/blueprints/who/templates/who/country/who_country_one.html index 7f61469fe8597dc6f9005c58247e8160448000b0..f640da896c099ead3ccdb5484febd102b7d5ee7c 100644 --- a/src/covid19/blueprints/who/templates/who/country/who_country_one.html +++ b/src/covid19/blueprints/who/templates/who/country/who_country_one.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/country/who_country_one_cases_cumulative.html b/src/covid19/blueprints/who/templates/who/country/who_country_one_cases_cumulative.html index 5aae35beb7ca944108a520b7800393c22aa14aca..3151606fd84e041ec42e7eb28795910f41a9b81f 100644 --- a/src/covid19/blueprints/who/templates/who/country/who_country_one_cases_cumulative.html +++ b/src/covid19/blueprints/who/templates/who/country/who_country_one_cases_cumulative.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/country/who_country_one_cases_new.html b/src/covid19/blueprints/who/templates/who/country/who_country_one_cases_new.html index a522b64cdceb012b4ba9b9fb2c194ea7ee2500c5..b424d0e2bf519ee14c3db1fde56dec187592d6de 100644 --- a/src/covid19/blueprints/who/templates/who/country/who_country_one_cases_new.html +++ b/src/covid19/blueprints/who/templates/who/country/who_country_one_cases_new.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/country/who_country_one_deaths_cumulative.html b/src/covid19/blueprints/who/templates/who/country/who_country_one_deaths_cumulative.html index d55e49fc8fbfb8c331de4c776f9d878148a6aa6b..dd4769a07491441312b4e6b1dec1ce4cdf8ec16d 100644 --- a/src/covid19/blueprints/who/templates/who/country/who_country_one_deaths_cumulative.html +++ b/src/covid19/blueprints/who/templates/who/country/who_country_one_deaths_cumulative.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/country/who_country_one_deaths_new.html b/src/covid19/blueprints/who/templates/who/country/who_country_one_deaths_new.html index 6a771b79bc54481fad5b95e556c13d23ddd0ba36..274dbb4b5fb17cc473763b9a6057dab35e70da21 100644 --- a/src/covid19/blueprints/who/templates/who/country/who_country_one_deaths_new.html +++ b/src/covid19/blueprints/who/templates/who/country/who_country_one_deaths_new.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_all.html b/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_all.html index eea1d5dab6331468a984df2f3fc2fe962f0f3f34..5c2d9c89c18b82dcd956c8f36619ebf3b72660f2 100644 --- a/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_all.html +++ b/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_all.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one.html b/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one.html index fb852908da57023a907d05d68bc08d75f8bd3bfa..7bd09c871cd38238088a03a1f07af03595397cf2 100644 --- a/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one.html +++ b/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one_cases_cumulative.html b/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one_cases_cumulative.html index 2e6562a57a27c4cccce811027fea0fc595b738f3..00a1889a4da1c52169ff12839b710d7a3e451d3d 100644 --- a/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one_cases_cumulative.html +++ b/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one_cases_cumulative.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one_cases_new.html b/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one_cases_new.html index fb852908da57023a907d05d68bc08d75f8bd3bfa..7bd09c871cd38238088a03a1f07af03595397cf2 100644 --- a/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one_cases_new.html +++ b/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one_cases_new.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one_deaths_cumulative.html b/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one_deaths_cumulative.html index 6cade560341b221034de178f547b65c38538e911..55dfd994935f5e907bffa4c9402a7e53307cd72f 100644 --- a/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one_deaths_cumulative.html +++ b/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one_deaths_cumulative.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one_deaths_new.html b/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one_deaths_new.html index c61e0d1972b4df5e5cc5ef3b37a7458fb522ffbf..9ae177aa8bd9afcaddafa61f4632a3316d7bc64e 100644 --- a/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one_deaths_new.html +++ b/src/covid19/blueprints/who/templates/who/date_reported/who_date_reported_one_deaths_new.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/navigation/who_navbar_dropdown.html b/src/covid19/blueprints/who/templates/who/navigation/who_navbar_dropdown.html index 2c2e5a9df4da1ab5a5a18de69361cec947ad163c..66039f6c56290c73e6a506e11bfb9ecc5b7b251d 100644 --- a/src/covid19/blueprints/who/templates/who/navigation/who_navbar_dropdown.html +++ b/src/covid19/blueprints/who/templates/who/navigation/who_navbar_dropdown.html @@ -4,60 +4,63 @@ </a> <ul class="dropdown-menu"> <li> - <a class="dropdown-item" href="{{ url_for( 'who.url_who_date_reported_all') }}"> - WHO + <a class="dropdown-item" href="{{ url_for( 'who.url_who_info') }}"> + WHO Info </a> </li> <li> <div class="dropdown-divider"></div> </li> + {% if current_user.is_authenticated %} <li> - <a class="dropdown-item" href="{{ url_for( 'who.url_who_germany') }}"> - WHO Germany + <a class="dropdown-item" href="{{ url_for( 'who.url_who_tasks') }}"> + WHO Tasks </a> </li> + {% endif %} + {% if current_user.is_authenticated %} <li> <div class="dropdown-divider"></div> </li> <li> - <a class="dropdown-item" href="{{ url_for( 'who.url_who_region_all') }}"> - WHO Regions + <a class="dropdown-item" href="{{ url_for( 'who.url_who_imported') }}"> + WHO imported </a> </li> + {% endif %} <li> - <a class="dropdown-item" href="{{ url_for( 'who.url_who_date_reported_all') }}"> - WHO Date Reported - </a> + <div class="dropdown-divider"></div> </li> <li> - <a class="dropdown-item" href="{{ url_for( 'who.url_who_country_all') }}"> - WHO Countries + <a class="dropdown-item" href="{{ url_for( 'who.url_who_date_reported_all') }}"> + WHO </a> </li> <li> <div class="dropdown-divider"></div> </li> - {% if current_user.is_authenticated %} <li> - <a class="dropdown-item" href="{{ url_for( 'who.url_who_imported') }}"> - WHO imported + <a class="dropdown-item" href="{{ url_for( 'who.url_who_germany') }}"> + WHO Germany </a> </li> - {% endif %} <li> <div class="dropdown-divider"></div> </li> <li> - <a class="dropdown-item" href="{{ url_for( 'who.url_who_info') }}"> - WHO Info + <a class="dropdown-item" href="{{ url_for( 'who.url_who_region_all') }}"> + WHO Regions </a> </li> - {% if current_user.is_authenticated %} <li> - <a class="dropdown-item" href="{{ url_for( 'who.url_who_tasks') }}"> - WHO Tasks + <a class="dropdown-item" href="{{ url_for( 'who.url_who_date_reported_all') }}"> + WHO Date Reported + </a> + </li> + <li> + <a class="dropdown-item" href="{{ url_for( 'who.url_who_country_all') }}"> + WHO Countries </a> </li> - {% endif %} </ul> </li> \ No newline at end of file diff --git a/src/covid19/blueprints/who/templates/who/navigation/who_navtabs.html b/src/covid19/blueprints/who/templates/who/navigation/who_navtabs.html index 032b51dc9f878a8676f2532346bc6777e51662e3..bb9fe4bbf1a5d5973161c9fc802de64877ae4015 100644 --- a/src/covid19/blueprints/who/templates/who/navigation/who_navtabs.html +++ b/src/covid19/blueprints/who/templates/who/navigation/who_navtabs.html @@ -13,12 +13,14 @@ <a class="nav-link" href="{{ url_for( 'who.url_who_tasks') }}">WHO tasks</a> </li> - {% endif %} - {% if current_user.is_authenticated %} <li class="nav-item"> <a class="nav-link" href="{{ url_for( 'who_test.url_who_test_tests') }}">WHO Tests</a> </li> + <li class="nav-item"> + <a class="nav-link" + href="{{ url_for( 'who.url_who_imported') }}">WHO imported</a> + </li> {% endif %} <li class="nav-item"> <a class="nav-link" @@ -36,12 +38,6 @@ <a class="nav-link" href="{{ url_for( 'who.url_who_country_all') }}">WHO Countries</a> </li> - {% if current_user.is_authenticated %} - <li class="nav-item"> - <a class="nav-link" - href="{{ url_for( 'who.url_who_imported') }}">WHO imported</a> - </li> - {% endif %} </ul> </nav> </div> diff --git a/src/covid19/blueprints/who/templates/who/region/who_region_all.html b/src/covid19/blueprints/who/templates/who/region/who_region_all.html index 12960224fc8e1134a925f295a3b040d3e3bf3c5d..4e831b20362039c502ddfbdd480689de51b404a7 100644 --- a/src/covid19/blueprints/who/templates/who/region/who_region_all.html +++ b/src/covid19/blueprints/who/templates/who/region/who_region_all.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/region/who_region_one.html b/src/covid19/blueprints/who/templates/who/region/who_region_one.html index e273103351b75ac5ba0d54a70ffb0efe954eb0c4..ded82dc85ae4e54841d9cf70aa880263ad45e6d0 100644 --- a/src/covid19/blueprints/who/templates/who/region/who_region_one.html +++ b/src/covid19/blueprints/who/templates/who/region/who_region_one.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/who_imported.html b/src/covid19/blueprints/who/templates/who/who_imported.html index d12fed01d11e780fb0ef5fb7a5ffea531913d2c5..d79a0170478afe6fd6ded96218786afc03f4fb35 100644 --- a/src/covid19/blueprints/who/templates/who/who_imported.html +++ b/src/covid19/blueprints/who/templates/who/who_imported.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/who_info.html b/src/covid19/blueprints/who/templates/who/who_info.html index 43bb0444dd4b903d25ba2b6c07e7501283266e0e..27dc9729ed0bfa386305076637f46589c62b1f03 100644 --- a/src/covid19/blueprints/who/templates/who/who_info.html +++ b/src/covid19/blueprints/who/templates/who/who_info.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who/templates/who/who_tasks.html b/src/covid19/blueprints/who/templates/who/who_tasks.html index ce8cbe3f7e306b6aafa2beb6870bf443d729cc98..3be00b9f58497f47a5f8cd1900cc486836b411ee 100644 --- a/src/covid19/blueprints/who/templates/who/who_tasks.html +++ b/src/covid19/blueprints/who/templates/who/who_tasks.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} @@ -13,10 +13,22 @@ href="{{ url_for( 'who.url_task_who_full_update_star_schema') }}" role="button">WHO :: Task :: update :: star_schema :: full</a> </div> + </div> + <div class="col"> + <h4>Update</h4> + <div class="btn-group-vertical" role="group" aria-label="Views"> + <a class="btn btn-primary btn-lg btn-block text-left" + href="{{ url_for( 'who.url_task_who_update_star_schema') }}" + role="button">WHO :: Task :: update :: star_schema</a> + </div> + </div> + </div> + <div class="row"> + <div class="col"> <h4>Full Update</h4> <div class="btn-group-vertical" role="group" aria-label="Views"> <a class="btn btn-success btn-lg btn-block text-left" - href="{{ url_for( 'who.url_task_download_files') }}" + href="{{ url_for( 'who.url_download_files') }}" role="button">WHO :: Task :: download :: files</a> <a class="btn btn-info btn-lg btn-block text-left" href="{{ url_for( 'who.url_task_who_import_files') }}" @@ -30,16 +42,10 @@ </div> </div> <div class="col"> - <h4>Update</h4> - <div class="btn-group-vertical" role="group" aria-label="Views"> - <a class="btn btn-primary btn-lg btn-block text-left" - href="{{ url_for( 'who.url_task_who_update_star_schema') }}" - role="button">WHO :: Task :: update :: star_schema</a> - </div> <h4>Update</h4> <div class="btn-group-vertical" role="group" aria-label="Views"> <a class="btn btn-success btn-lg btn-block text-left" - href="{{ url_for( 'who.url_task_download_files') }}" + href="{{ url_for( 'who.url_download_files') }}" role="button">WHO :: Task :: download :: files</a> <a class="btn btn-info btn-lg btn-block text-left" href="{{ url_for( 'who.url_task_who_import_files') }}" diff --git a/src/covid19/blueprints/who/who_model.py b/src/covid19/blueprints/who/who_model.py index cf768574c020d4d2cfbfab02ea7f9e9f37e4479f..6340ab3ffbea9c120fd23b15a031fb795f5885ce 100644 --- a/src/covid19/blueprints/who/who_model.py +++ b/src/covid19/blueprints/who/who_model.py @@ -2,7 +2,7 @@ from sqlalchemy import and_ from datetime import date from sqlalchemy.orm import joinedload, subqueryload from database import db, ITEMS_PER_PAGE -from covid19.blueprints.application.application_model import ApplicationDateReported, ApplicationRegion +from covid19.blueprints.app_all.all_model import ApplicationDateReported, ApplicationRegion class WhoDateReported(ApplicationDateReported): diff --git a/src/covid19/blueprints/who/who_model_import.py b/src/covid19/blueprints/who/who_model_import.py index 4db10ce746df9cd7ec2f45a164d92e086910ee9d..ac099e8d29537de09be5a38c557290d2a939eb7b 100644 --- a/src/covid19/blueprints/who/who_model_import.py +++ b/src/covid19/blueprints/who/who_model_import.py @@ -1,19 +1,25 @@ from sqlalchemy.orm import Bundle from database import db, ITEMS_PER_PAGE - class WhoImport(db.Model): __tablename__ = 'application__import__who' id = db.Column(db.Integer, primary_key=True) - date_reported = db.Column(db.String(255), nullable=False) - country_code = db.Column(db.String(255), nullable=False) - country = db.Column(db.String(255), nullable=False) - who_region = db.Column(db.String(255), nullable=False) new_cases = db.Column(db.String(255), nullable=False) cumulative_cases = db.Column(db.String(255), nullable=False) new_deaths = db.Column(db.String(255), nullable=False) cumulative_deaths = db.Column(db.String(255), nullable=False) + country_code = db.Column(db.String(255), nullable=False) + country = db.Column(db.String(255), nullable=False) + who_region = db.Column(db.String(255), nullable=False) + date_reported = db.Column(db.String(255), nullable=False) + datum = db.Column(db.Date, nullable=False) + year = db.Column(db.Integer, nullable=False) + month = db.Column(db.Integer, nullable=False) + day_of_month = db.Column(db.Integer, nullable=False) + day_of_week = db.Column(db.Integer, nullable=False) + week_of_year = db.Column(db.Integer, nullable=False) + year_week = db.Column(db.String(255), nullable=False) @classmethod def remove_all(cls): diff --git a/src/covid19/blueprints/who/who_service.py b/src/covid19/blueprints/who/who_service.py index fa0cf3376d290aa71930c3bfc4dff3b25dd7589a..407bee9d855f5b102d2531334ec9e05e33db6dc9 100644 --- a/src/covid19/blueprints/who/who_service.py +++ b/src/covid19/blueprints/who/who_service.py @@ -1,8 +1,8 @@ from flask import flash from database import app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig -from covid19.blueprints.application.application_service_download import ApplicationServiceDownload +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig +from covid19.blueprints.app_all.all_service_download import ApplicationServiceDownload from covid19.blueprints.who.who_service_import import WhoServiceImport from covid19.blueprints.who.who_service_update import WhoServiceUpdate, WhoServiceUpdateFull @@ -37,12 +37,12 @@ class WhoService: app.logger.info("WhoService.database_drop_create_posttask [done]") return self - def full_update_dimension_tables(self): + def task_admin_update_full_dimension_tables(self): self.service_update_full.full_update_dimension_tables() return self - def update_dimension_tables_only(self): - self.service_update_full.full_update_dimension_tables() + def task_admin_update_dimension_tables(self): + self.service_update.update_dimension_tables() return self def download_all_files(self): @@ -67,12 +67,12 @@ class WhoService: self.service_update_full.full_update_star_schema() return self - def run_update_star_schema_initial(self): + def task_admin_full_update_star_schema(self): self.service_import.import_file() self.service_update_full.full_update_star_schema() return self - def run_update_star_schema_incremental(self): + def task_admin_update_fact_table(self): self.service_import.import_file() self.service_update.update_star_schema() return self diff --git a/src/covid19/blueprints/who/who_service_import.py b/src/covid19/blueprints/who/who_service_import.py index 124e4e5d591c0b0387a74aa0b333229269b6fdd3..2e30a87740ff6cbcb02ae11a93ae0ce35de9567c 100644 --- a/src/covid19/blueprints/who/who_service_import.py +++ b/src/covid19/blueprints/who/who_service_import.py @@ -2,8 +2,9 @@ import sys import csv import psycopg2 from database import db, app +from covid19.blueprints.who.who_model import WhoDateReported from covid19.blueprints.who.who_model_import import WhoImport -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig class WhoServiceImport: @@ -32,15 +33,24 @@ class WhoServiceImport: file_reader = csv.DictReader(csv_file, delimiter=',', quotechar='"') k = 0 for row in file_reader: + date_reported = row[keyDate_reported] + d = WhoDateReported.create_new_object_factory(my_date_rep=date_reported) o = WhoImport( - date_reported=row[keyDate_reported], - country_code=row['Country_code'], - country=row['Country'], - who_region=row['WHO_region'], new_cases=row['New_cases'], cumulative_cases=row['Cumulative_cases'], new_deaths=row['New_deaths'], - cumulative_deaths=row['Cumulative_deaths'] + cumulative_deaths=row['Cumulative_deaths'], + country_code=row['Country_code'], + country=row['Country'], + who_region=row['WHO_region'], + date_reported=row[keyDate_reported], + datum=d.datum, + year=d.year, + month=d.month, + day_of_month=d.day_of_month, + day_of_week=d.day_of_week, + week_of_year=d.day_of_week, + year_week=d.year_week ) db.session.add(o) k += 1 diff --git a/src/covid19/blueprints/who/who_service_update.py b/src/covid19/blueprints/who/who_service_update.py index 45c5c2a84bd0fd72e4af4d60cca9348cba7c6ee8..caf4a6f04a57ab40bad59faba7fdc06553e1e574 100644 --- a/src/covid19/blueprints/who/who_service_update.py +++ b/src/covid19/blueprints/who/who_service_update.py @@ -1,7 +1,7 @@ from database import db, app +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig from covid19.blueprints.who.who_model import WhoCountryRegion, WhoDateReported, WhoCountry, WhoData from covid19.blueprints.who.who_model_import import WhoImport -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig class WhoServiceUpdateBase: diff --git a/src/covid19/blueprints/who/who_views.py b/src/covid19/blueprints/who/who_views.py index c5df55bbce8592c94c00956392fb0d93fd74157b..1ab55345ef2867fffe189a8b87fdfef5437215ab 100644 --- a/src/covid19/blueprints/who/who_views.py +++ b/src/covid19/blueprints/who/who_views.py @@ -6,12 +6,12 @@ from flask_admin.contrib.sqla import ModelView from flask_login import login_required from database import app, admin, db -from covid19.blueprints.application.application_services import who_service -from covid19.blueprints.application.application_workers import celery +from covid19.blueprints.app_all.all_services import who_service +from covid19.blueprints.app_mq.application_workers import celery +from covid19.blueprints.app_application.application_model_transient import ApplicationPage from covid19.blueprints.who.who_model_import import WhoImport from covid19.blueprints.who.who_model import WhoCountryRegion, WhoCountry, WhoDateReported, WhoData -from covid19.blueprints.application.application_model_transient import ApplicationPage app_who = Blueprint('who', __name__, template_folder='templates', url_prefix='/who') @@ -357,19 +357,6 @@ def url_who_mytest(): # ---------------------------------------------------------------------------------------------------------------- -@celery.task(bind=True) -def task_download_files(self): - logger = get_task_logger(__name__) - self.update_state(state=states.STARTED) - logger.info("------------------------------------------------------------") - logger.info(" Received: task_download_files [OK] ") - logger.info("------------------------------------------------------------") - who_service.download_files() - self.update_state(state=states.SUCCESS) - result = "OK (task_who_download_only)" - return result - - @celery.task(bind=True) def task_who_import_files(self): logger = get_task_logger(__name__) @@ -475,17 +462,6 @@ def url_download_files(): return redirect(url_for('who.url_who_tasks')) -@app_who.route('/task/files/download') -@login_required -def url_task_download_files(): - app.logger.info("url_task_download_files [start]") - task_download_files.apply_async() - flash(message="async task_download_files [start]", category="warning") - app.logger.warn("async task_download_files [start]") - app.logger.info("url_task_download_files [done]") - return redirect(url_for('who.url_who_tasks')) - - @app_who.route('/task/files/import') @login_required def url_task_who_import_files(): @@ -497,17 +473,6 @@ def url_task_who_import_files(): return redirect(url_for('who.url_who_tasks')) -@app_who.route('/task/update/dimension_tables') -@login_required -def url_task_who_update_dimension_tables(): - app.logger.info("url_task_who_update_dimension_tables [start]") - task_who_update_dimension_tables.apply_async() - flash(message="async task_who_update_dimension_tables [start]", category="warning") - app.logger.warn("async task_who_update_dimension_tables [start]") - app.logger.info("url_task_who_update_dimension_tables [done]") - return redirect(url_for('who.url_who_tasks')) - - @app_who.route('/task/update/full/dimension_tables') @login_required def url_task_who_full_update_dimension_tables(): @@ -519,6 +484,17 @@ def url_task_who_full_update_dimension_tables(): return redirect(url_for('who.url_who_tasks')) +@app_who.route('/task/update/dimension_tables') +@login_required +def url_task_who_update_dimension_tables(): + app.logger.info("url_task_who_update_dimension_tables [start]") + task_who_update_dimension_tables.apply_async() + flash(message="async task_who_update_dimension_tables [start]", category="warning") + app.logger.warn("async task_who_update_dimension_tables [start]") + app.logger.info("url_task_who_update_dimension_tables [done]") + return redirect(url_for('who.url_who_tasks')) + + @app_who.route('/task/update/full/fact-table') @login_required def url_task_who_full_update_fact_table(): @@ -541,6 +517,19 @@ def url_task_who_update_fact_table(): return redirect(url_for('who.url_who_tasks')) +@app_who.route('/task/update/full/star_schema') +@login_required +def url_task_who_full_update_star_schema(): + app.logger.info("url_task_who_full_update_star_schema [start]") + who_service.download_files() + flash("who_service.run_download_only() [done]") + task_who_full_update_star_schema.apply_async() + flash(message="async task_who_full_update_star_schema [start]", category="warning") + app.logger.warn("async task_who_full_update_star_schema [start]") + app.logger.info("url_task_who_full_update_star_schema [done]") + return redirect(url_for('who.url_who_tasks')) + + @app_who.route('/task/update/star_schema') @login_required def url_task_who_update_star_schema(): @@ -553,15 +542,3 @@ def url_task_who_update_star_schema(): app.logger.info("url_task_who_update_star_schema [done]") return redirect(url_for('who.url_who_tasks')) - -@app_who.route('/task/update/full/star_schema') -@login_required -def url_task_who_full_update_star_schema(): - app.logger.info("url_task_who_full_update_star_schema [start]") - who_service.download_files() - flash("who_service.run_download_only() [done]") - task_who_full_update_star_schema.apply_async() - flash(message="async task_who_full_update_star_schema [start]", category="warning") - app.logger.warn("async task_who_full_update_star_schema [start]") - app.logger.info("url_task_who_full_update_star_schema [done]") - return redirect(url_for('who.url_who_tasks')) diff --git a/src/covid19/blueprints/who_test/templates/who_test/who_tests.html b/src/covid19/blueprints/who_test/templates/who_test/who_tests.html index f79ff4b1cf1ea3bce6075f1d7108fefaa131b554..daae61e99a2ab6d775faeffac505ce3fd717b059 100644 --- a/src/covid19/blueprints/who_test/templates/who_test/who_tests.html +++ b/src/covid19/blueprints/who_test/templates/who_test/who_tests.html @@ -1,4 +1,4 @@ -{% extends 'application/page_layout.html' %} +{% extends 'app_all/layout/page_layout.html' %} {% block content %} {{super()}} diff --git a/src/covid19/blueprints/who_test/who_test_service.py b/src/covid19/blueprints/who_test/who_test_service.py index 565d5e8ef3788311980df2f3c9d1328da43c2e33..cd74347431af31de4bca9293580f7049958ba533 100644 --- a/src/covid19/blueprints/who_test/who_test_service.py +++ b/src/covid19/blueprints/who_test/who_test_service.py @@ -1,7 +1,8 @@ from database import app -from covid19.blueprints.application.application_service_config import ApplicationServiceConfig +from covid19.blueprints.app_all.all_service_config import ApplicationServiceConfig from covid19.blueprints.who.who_model import WhoDateReported, WhoData + class WhoTestService: def __init__(self, database, who_service): app.logger.debug("------------------------------------------------------------") diff --git a/src/covid19/blueprints/who_test/who_test_views.py b/src/covid19/blueprints/who_test/who_test_views.py index d6126688609c498307d04b51dfafa94c7700a2a6..c04cba9bcef9de5c4867d7d07ce2f8286c3f73a9 100644 --- a/src/covid19/blueprints/who_test/who_test_views.py +++ b/src/covid19/blueprints/who_test/who_test_views.py @@ -4,12 +4,12 @@ from celery.utils.log import get_task_logger from flask_login import login_required from database import app, db -from covid19.blueprints.application.application_services import who_service -from covid19.blueprints.application.application_workers import celery +from covid19.blueprints.app_all.all_services import who_service +from covid19.blueprints.app_mq.application_workers import celery +from covid19.blueprints.app_application.application_model_transient import ApplicationPage from covid19.blueprints.who.who_model_import import WhoImport from covid19.blueprints.who.who_model import WhoData -from covid19.blueprints.application.application_model_transient import ApplicationPage from covid19.blueprints.who_test.who_test_service import WhoTestService @@ -30,6 +30,7 @@ def url_who_test_tests(): 'who_test/who_tests.html', page_info=page_info) + @app_who_test.route('/who_import/countries') @login_required def url_who_test_who_import_countries(): @@ -60,6 +61,7 @@ def url_who_test_who_import_get_new_dates_as_array(): app.logger.info("url_who_mytest - DONE: WhoImport.get_new_dates_as_array()") return redirect(url_for('who_test.url_who_test_tests')) + @app_who_test.route('/who_data/get_datum_of_all_who_data') @login_required def url_who_test_who_data_get_datum_of_all_who_data(): @@ -71,6 +73,7 @@ def url_who_test_who_data_get_datum_of_all_who_data(): app.logger.info("url_who_test_who_data_get_datum_of_all_who_data - DONE: WhoData.get_datum_of_all_who_data()") return redirect(url_for('who_test.url_who_test_tests')) + @app_who_test.route('/who_data/get_datum_of_all_who_import') @login_required def url_who_test_who_data_get_datum_of_all_who_import(): @@ -82,6 +85,7 @@ def url_who_test_who_data_get_datum_of_all_who_import(): app.logger.info("url_who_test_who_data_get_datum_of_all_who_import - DONE: WhoImport.get_datum_of_all_who_import()") return redirect(url_for('who_test.url_who_test_tests')) + @app_who_test.route('/who_service/service_update/who_import_get_new_dates_as_array') @login_required def url_who_test_who_service_who_import_get_new_dates_as_array(): @@ -93,6 +97,7 @@ def url_who_test_who_service_who_import_get_new_dates_as_array(): app.logger.info("url_who_test_who_import_get_new_dates_as_array - DONE: WhoService.who_import_get_new_dates_as_array()") return redirect(url_for('who_test.url_who_test_tests')) + @app_who_test.route('/who_test_service/delete_last_day') @login_required def url_who_test_who_test_service_delete_last_days_data(): @@ -125,6 +130,7 @@ def task_who_test_update_star_schema_incremental(self): # URL Routes for Celery TASKS # ---------------------------------------------------------------------------------------------------------------- + @app_who_test.route('/task/update_star_schema_incremental') @login_required def url_task_who_test_update_star_schema_incremental(): diff --git a/src/covid19/package-lock.json b/src/covid19/package-lock.json index b00774e09b9b78f357ed6d0454a882dc0050c591..4a5606c28ec6a0a139a41db72e33d82c0998b953 100644 --- a/src/covid19/package-lock.json +++ b/src/covid19/package-lock.json @@ -1,6 +1,6 @@ { "name": "flask-covid19-static", - "version": "0.0.32", + "version": "0.0.33", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/src/covid19/package.json b/src/covid19/package.json index ebcf5a0fc6a6e4688fd7ebded6f84de8f9ae96ac..c39a3afae827f794eb30692537856b002b4cf39c 100644 --- a/src/covid19/package.json +++ b/src/covid19/package.json @@ -1,6 +1,6 @@ { "name": "flask-covid19-static", - "version": "0.0.32", + "version": "0.0.34", "description": "Covid19 Data Aggregation - also a Project to learn Python Flask, SQLAlchemy, Celery et al.", "main": "index.js", "repository": { diff --git a/src/mq.py b/src/mq.py index 88b4f8a579bb39d98afd39cfdc870d344f31ff20..9ab036d12b46514d7274bc647a12e02e22f3c8ad 100644 --- a/src/mq.py +++ b/src/mq.py @@ -2,7 +2,7 @@ import sys import subprocess import covid19 from covid19 import app -from covid19.blueprints.application.application_workers import celery, run_mq +from covid19.blueprints.app_mq.application_workers import celery, run_mq # Celery: https://docs.celeryproject.org/en/stable/userguide/index.html diff --git a/version b/version index f9d08f8f11b4cce9383c262a547e9c4a0b66472f..cdd2fd6ba5c77830ca11a19f1ec6ddb597ba6a21 100644 --- a/version +++ b/version @@ -1 +1 @@ -0.0.32 \ No newline at end of file +0.0.34 \ No newline at end of file