diff --git a/docs/blueprints/application/application_domain_model.txt b/docs/blueprints/application/application_domain_model.txt index b27c87682e05104845dbc9ac7d4284d72f9b94e3..c6278860893027aaaf0026112e701c73a8cda850 100644 --- a/docs/blueprints/application/application_domain_model.txt +++ b/docs/blueprints/application/application_domain_model.txt @@ -1,4 +1,22 @@ @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 Course { id: Integer dateiname: String diff --git a/docs/blueprints/ecdc/ecdc_domain_model.txt b/docs/blueprints/ecdc/ecdc_domain_model.txt index b27c87682e05104845dbc9ac7d4284d72f9b94e3..c6278860893027aaaf0026112e701c73a8cda850 100644 --- a/docs/blueprints/ecdc/ecdc_domain_model.txt +++ b/docs/blueprints/ecdc/ecdc_domain_model.txt @@ -1,4 +1,22 @@ @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 Course { id: Integer dateiname: String diff --git a/docs/blueprints/owid/owid_domain_model.txt b/docs/blueprints/owid/owid_domain_model.txt index b27c87682e05104845dbc9ac7d4284d72f9b94e3..c99b945cce9b112fe0a396a4cb3d6101362a5376 100644 --- a/docs/blueprints/owid/owid_domain_model.txt +++ b/docs/blueprints/owid/owid_domain_model.txt @@ -1,26 +1,105 @@ @startuml -entity Course { +entity OwidImport { id: Integer - dateiname: String - parent_dir: String - title: String - path_relative: String - get_absolute_path() - get_relative_path() + 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_all_as_dict() {classifier} get_by_id(other_id: Integer) {classifier} find_by_id(other_id: Integer) - {classifier} get_kurse_all() + {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 Workflow { +entity ApplicationDateReported { id: Integer - dateiname: String - parent_dir: String - get_absolute_path() - get_relative_path() + 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 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() @@ -29,13 +108,68 @@ entity Workflow { {classifier} find_by_id(other_id: Integer) {classifier} get_workflow_for_id(workflow_id: Integer) } -entity Lektion { +entity OwidData { id: Integer - dateiname: String - parent_dir: String - title: String - lektion_nr: Integer - verified: Boolean + 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 get_absolute_path() get_relative_path() {classifier} remove_all() @@ -49,102 +183,109 @@ entity Lektion { {classifier} get_folien_for_lektion_id(lektion_id: Integer) {classifier} get_all_verified() } -entity FolienSatz { - id: Integer - dateiname: String - parent_dir: String - title: String - lektion_nr: Integer - foliensatz_nr_in_lektion: Integer - get_absolute_path() - get_relative_path() - {classifier} get_foliensaetze_for_lektion(lektion: Lektion) - {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) +OwidData "1" *--> "*" OwidDateReported: date_reported +ApplicationDateReported <|-- OwidDateReported +class OwidServiceImport { + import_file() } -entity Folie { - id: Integer - title: String - lektion_nr: Integer - folien_nr_in_lektion: Integer - folien_nr_in_foliensatz: Integer - foliensatz_nr_in_lektion: Integer - {classifier} get_folien_for_foliensatz(lektion: FolienSatz) - {classifier} getFolienKey(lektion_nr: Integer, folien_nr_in_lektion: 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) - {classifier} get_folien_for_lektion(lektion: Lektion) +class OwidServiceUpdate { + 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() } -entity Abbildung { - id: Integer - dateiname: String - parent_dir: String - title: String - abbildung_nr_in_lektion: Integer - abbildung_nr_in_foliensatz: Integer - folien_nr_in_lektion: Integer - folien_nr_in_foliensatz: Integer - folien_satz_nr: Integer - lektion_nr: Integer - bildnachweis: Integer - get_absolute_path() - get_relative_path() - {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 OwidService { + 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() +} +class ApplicationServiceDownload { + -log_error() + -log_success() + -prepare_download() + -download_with_wget() + -download_with_subprocess_and_os_native_wget() + download_file() +} +class ApplicationServiceConfig { + 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() +} +ApplicationServiceConfig : SQLAlchemy database +ApplicationServiceDownload : ApplicationServiceConfig cfg +ApplicationServiceDownload : SQLAlchemy database +OwidServiceUpdate : ApplicationServiceConfig cfg +OwidServiceUpdate : SQLAlchemy database +OwidServiceImport : ApplicationServiceConfig cfg +OwidServiceImport : SQLAlchemy database +OwidService : ApplicationServiceConfig cfg +OwidService : SQLAlchemy database +OwidService : OwidServiceUpdate service_update +OwidService : OwidServiceImport service_import +OwidService : ApplicationServiceDownload service_download +class owid_views_frontend { + 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() } -Course "1" *--> "*" Workflow: workflows -Workflow "*" --> "1" Course: course -Workflow "1" *--> "*" Lektion: lektionen -Lektion "*" --> "1" Workflow: course_workflow -Lektion "1" o--> "*" Abbildung: abbildungen -Abbildung "*" --> "1" Lektion: lektion -Lektion "1" *--> "*" FolienSatz: foliensaetze -FolienSatz "*" --> "1" Lektion: lektion -FolienSatz "1" *--> "*" Folie: folien -FolienSatz "1" *--> "*" Abbildung: abbildungen -Folie "*" --> "1" FolienSatz: foliensatz -Folie "1" o--> "*" Abbildung: abbildungen -Abbildung "*" --> "1" Folie: folie -Abbildung "*" --> "1" FolienSatz: foliensatz -class ArtefactContentService { - rename_src_files() - prepare_data_update() - run_data_update() - run_db_dump() - run_db_reimport() - parse_file_name(datei: String) - create_or_fetch_folie(file_name_dict, lektion: Lektion) - get_abbbildung_for_id(abbbildung_id: Integer) +class owid_views_tasks { + 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() } -ArtefactContentService : SQLAlchemy database -ArtefactContentService : String[] courses -ArtefactContentService : String[] workflows -ArtefactContentService : String[] lektionen -ArtefactContentService : String[] course_names -class artefact_content_views { - url_root() - url_home() - url_update_data() - url_rename() - url_kurse_all() - url_kurse_workflow_lektionen(workflow_id: Integer) - url_kurse_workflow_lektion_folien(lektion_id: Integer) - url_abbbildung_id(abbildung_id: Integer) - url_db_dump() - url_db_reimport() - task_data_update() - task_rename_src_files() +class owid_celery_tasks { + 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() } +owid_views_frontend : OwidService owid_service +owid_views_tasks : OwidService owid_service +owid_celery_tasks : OwidService owid_service @enduml diff --git a/docs/blueprints/rki_vaccination/rki_vaccination_domain_model.txt b/docs/blueprints/rki_vaccination/rki_vaccination_domain_model.txt index b27c87682e05104845dbc9ac7d4284d72f9b94e3..c6278860893027aaaf0026112e701c73a8cda850 100644 --- a/docs/blueprints/rki_vaccination/rki_vaccination_domain_model.txt +++ b/docs/blueprints/rki_vaccination/rki_vaccination_domain_model.txt @@ -1,4 +1,22 @@ @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 Course { id: Integer dateiname: String diff --git a/docs/blueprints/who/who_domain_model.txt b/docs/blueprints/who/who_domain_model.txt index 3387f57f880087f46bb94087fd97faf35d818698..48edda156a34c60eb66a48cdabdf2365a1f7b98d 100644 --- a/docs/blueprints/who/who_domain_model.txt +++ b/docs/blueprints/who/who_domain_model.txt @@ -1,4 +1,22 @@ @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 WhoDateReported { id: Integer date_reported: String @@ -76,21 +94,6 @@ entity WhoImport { {classifier} countries() } -Course "1" *--> "*" Workflow: workflows -Workflow "*" --> "1" Course: course -Workflow "1" *--> "*" Lektion: lektionen -Lektion "*" --> "1" Workflow: course_workflow -Lektion "1" o--> "*" Abbildung: abbildungen -Abbildung "*" --> "1" Lektion: lektion -Lektion "1" *--> "*" FolienSatz: foliensaetze -FolienSatz "*" --> "1" Lektion: lektion -FolienSatz "1" *--> "*" Folie: folien -FolienSatz "1" *--> "*" Abbildung: abbildungen -Folie "*" --> "1" FolienSatz: foliensatz -Folie "1" o--> "*" Abbildung: abbildungen -Abbildung "*" --> "1" Folie: folie -Abbildung "*" --> "1" FolienSatz: foliensatz - class WhoService { pretask_database_drop_create() task_database_drop_create() @@ -111,18 +114,26 @@ class WhoServiceImport { import_file() } class WhoServiceUpdate { - __update_date_reported() - __update_region() - __update_country() - __update_data_incremental() - __update_data_initial() - __update_dimension_tables() + -update_date_reported() + -update_region() + -update_country() + -update_data_incremental() + -update_data_initial() + -update_dimension_tables() update_dimension_tables_only() update_fact_table_incremental_only() update_fact_table_initial_only() update_star_schema_incremental() update_star_schema_initial() } +class ApplicationServiceDownload { + -log_error() + -log_success() + -prepare_download() + -download_with_wget() + -download_with_subprocess_and_os_native_wget() + download_file() +} class ApplicationServiceConfig { limit_nr: Integer data_path: String @@ -148,7 +159,35 @@ ArtefactContentService : String[] courses ArtefactContentService : String[] workflows ArtefactContentService : String[] lektionen ArtefactContentService : String[] course_names -class who_views { +class who_views_frontends { + url_root() + url_home() + url_update_data() + url_rename() + url_kurse_all() + url_kurse_workflow_lektionen(workflow_id: Integer) + url_kurse_workflow_lektion_folien(lektion_id: Integer) + url_abbbildung_id(abbildung_id: Integer) + url_db_dump() + url_db_reimport() + task_data_update() + task_rename_src_files() +} +class who_celery_tasks { + url_root() + url_home() + url_update_data() + url_rename() + url_kurse_all() + url_kurse_workflow_lektionen(workflow_id: Integer) + url_kurse_workflow_lektion_folien(lektion_id: Integer) + url_abbbildung_id(abbildung_id: Integer) + url_db_dump() + url_db_reimport() + task_data_update() + task_rename_src_files() +} +class who_views_tasks { url_root() url_home() url_update_data() diff --git a/src/covid19/blueprints/owid/owid_model_import.py b/src/covid19/blueprints/owid/owid_model_import.py index a32ca3852b8e891494d87b818bacceb7e5861820..44e31de34fcdd8d525d9c76722b3f652ef848ceb 100644 --- a/src/covid19/blueprints/owid/owid_model_import.py +++ b/src/covid19/blueprints/owid/owid_model_import.py @@ -90,6 +90,12 @@ class OwidImport(db.Model): .filter(cls.id == other_id)\ .one() + @classmethod + def find_by_id(cls, other_id): + return db.session.query(cls)\ + .filter(cls.id == other_id)\ + .one() + @classmethod def get_dates(cls): return db.session.query(cls.date)\