From c1a670f8d39dffbdf18705e2d01e2939a68ce7fb Mon Sep 17 00:00:00 2001 From: thomaswoehlke <thomas.woehlke@gmail.com> Date: Mon, 25 Jan 2021 12:48:11 +0100 Subject: [PATCH] work --- app.py | 11 +- .../covid19/vaccination/vaccination_model.py | 31 --- .../vaccination/vaccination_service.py | 31 +-- .../vaccination/vaccination_service_import.py | 6 - .../vaccination/vaccination_service_update.py | 238 ------------------ ...nt_vaccination_germany_timeline_table.html | 28 +++ .../vaccination_germany_timeline.html | 62 +++++ .../vaccination/vaccination_imported.html | 88 ------- 8 files changed, 98 insertions(+), 397 deletions(-) delete mode 100644 org/woehlke/covid19/vaccination/vaccination_service_update.py create mode 100644 templates/vaccination/fragment_vaccination_germany_timeline_table.html create mode 100644 templates/vaccination/vaccination_germany_timeline.html delete mode 100644 templates/vaccination/vaccination_imported.html diff --git a/app.py b/app.py index d3c6928a..00d65d52 100644 --- a/app.py +++ b/app.py @@ -13,7 +13,7 @@ from org.woehlke.covid19.who.who_service import WhoService from org.woehlke.covid19.europe.europe_service import EuropeService from org.woehlke.covid19.vaccination.vaccination_service import VaccinationService from org.woehlke.covid19.admin.admin_service import AdminService -from org.woehlke.covid19.vaccination.vaccination_model import VaccinationDataImportTable +from org.woehlke.covid19.vaccination.vaccination_model import VaccinationGermanyTimeline from celery.utils.log import get_task_logger @@ -645,6 +645,7 @@ def url_vaccination_tasks(): @app.route('/vaccination/update/initial') def url_vaccination_update_data(): vaccination_service.run_download() + flash("vaccination_service.run_download done") task_vaccination_update_initial.apply_async() flash("vaccination_service.run_update started") return redirect(url_for('url_vaccination_tasks')) @@ -652,11 +653,11 @@ def url_vaccination_update_data(): @app.route('/vaccination/imported/page/<int:page>') @app.route('/vaccination/imported') -def url_vaccination_data_imported(page=1): - page_info = ApplicationPage('Vaccination', "Last Import") - page_data = VaccinationDataImportTable.get_all_as_page(page) +def url_vaccination_germany_timeline(page=1): + page_info = ApplicationPage('Vaccination', "Germany Timeline") + page_data = VaccinationGermanyTimeline.get_all_as_page(page) return render_template( - 'vaccination/vaccination_imported.html', + 'vaccination/vaccination_germany_timeline.html', page_data=page_data, page_info=page_info) diff --git a/org/woehlke/covid19/vaccination/vaccination_model.py b/org/woehlke/covid19/vaccination/vaccination_model.py index a64ddd2a..007fae52 100644 --- a/org/woehlke/covid19/vaccination/vaccination_model.py +++ b/org/woehlke/covid19/vaccination/vaccination_model.py @@ -1,7 +1,4 @@ -from flask_sqlalchemy import Pagination -from sqlalchemy import and_, func from database import db, ITEMS_PER_PAGE -from sqlalchemy.orm import joinedload, raiseload class VaccinationGermanyTimeline(db.Model): @@ -49,31 +46,3 @@ class VaccinationGermanyTimeline(db.Model): def get_by_id(cls, other_id): return db.session.query(cls).filter(cls.id == other_id).one() - @classmethod - def get_new_dates_as_array(cls): - sql_query = """ - select - date_reported - from - vaccination_data_import - where - date_reported - not in ( - select - distinct - vaccination_date_reported.date_reported - from - vaccination_global_data - left join - vaccination_date_reported - on - vaccination_global_data.date_reported_id=vaccination_date_reported.id - ) - group by - vaccination_data_import.date_reported - order by date_reported desc - """ - new_dates = [] - for item in db.session.execute(sql_query): - new_dates.append(item['date_reported']) - return new_dates diff --git a/org/woehlke/covid19/vaccination/vaccination_service.py b/org/woehlke/covid19/vaccination/vaccination_service.py index c764d16e..6f6c0bcf 100644 --- a/org/woehlke/covid19/vaccination/vaccination_service.py +++ b/org/woehlke/covid19/vaccination/vaccination_service.py @@ -2,7 +2,6 @@ import os from database import app from org.woehlke.covid19.vaccination.vaccination_service_download import VaccinationServiceDownload from org.woehlke.covid19.vaccination.vaccination_service_import import VaccinationServiceImport -from org.woehlke.covid19.vaccination.vaccination_service_update import VaccinationServiceUpdate vaccination_service = None @@ -20,7 +19,6 @@ class VaccinationService: self.__url_src_data = "https://impfdashboard.de/static/data/germany_vaccinations_timeseries_v2.tsv" self.vaccination_service_download = VaccinationServiceDownload(database) self.vaccination_service_import = VaccinationServiceImport(database) - self.vaccination_service_update = VaccinationServiceUpdate(database) app.logger.info("------------------------------------------------------------") app.logger.info(" Vaccination Service [ready]") @@ -33,35 +31,10 @@ class VaccinationService: app.logger.info("------------------------------------------------------------") return success - def run_update(self, import_file=True): - app.logger.info(" run update [begin]") - app.logger.info("------------------------------------------------------------") - if import_file: - self.vaccination_service_import.import_file() - self.vaccination_service_update.update_db() - app.logger.info("") - app.logger.info(" run update [done]") - app.logger.info("------------------------------------------------------------") - return self - - def run_update_short(self, import_file=True): - app.logger.info(" run update short [begin]") - app.logger.info("------------------------------------------------------------") - app.logger.info(" ...") - #if import_file: - # self.vaccination_service_import.import_file() - #self.vaccination_service_update.update_db_short() - app.logger.info("") - app.logger.info(" run update short [done]") - app.logger.info("------------------------------------------------------------") - return self - - def run_update_initial(self, import_file=True): + def run_update_initial(self): app.logger.info(" run update initial [begin]") app.logger.info("------------------------------------------------------------") - if import_file: - self.vaccination_service_import.import_file() - #self.vaccination_service_update.update_db_initial() + self.vaccination_service_import.import_file() app.logger.info("") app.logger.info(" run update initial [done]") app.logger.info("------------------------------------------------------------") diff --git a/org/woehlke/covid19/vaccination/vaccination_service_import.py b/org/woehlke/covid19/vaccination/vaccination_service_import.py index 1ec838a0..50d49485 100644 --- a/org/woehlke/covid19/vaccination/vaccination_service_import.py +++ b/org/woehlke/covid19/vaccination/vaccination_service_import.py @@ -1,5 +1,4 @@ import os -import sys import csv import psycopg2 from database import db, app @@ -29,11 +28,6 @@ class VaccinationServiceImport: app.logger.info(" FILE: "+self.__src_cvsfile_name) app.logger.info(" TABLE: who_global_data_import") app.logger.info("------------------------------------------------------------") - row = None - if sys.platform == 'linux': - keyDate_reported ='\ufeffDate_reported' - else: - keyDate_reported = 'Date_reported' try: VaccinationGermanyTimeline.remove_all() k = 0 diff --git a/org/woehlke/covid19/vaccination/vaccination_service_update.py b/org/woehlke/covid19/vaccination/vaccination_service_update.py deleted file mode 100644 index 749fb51f..00000000 --- a/org/woehlke/covid19/vaccination/vaccination_service_update.py +++ /dev/null @@ -1,238 +0,0 @@ -import os -from database import db, app -from org.woehlke.covid19.vaccination.vaccination_model import VaccinationDataImportTable, VaccinationDateReported -from org.woehlke.covid19.vaccination.vaccination_model import VaccinationCountry, VaccinationRegion, VaccinationData - - -vaccination_service_update = None - - -class VaccinationServiceUpdate: - def __init__(self, database): - app.logger.info("------------------------------------------------------------") - app.logger.info(" Vaccination Service Update [init]") - app.logger.info("------------------------------------------------------------") - self.__database = database - self.limit_nr = 20 - self.__cvsfile_name = "germany_vaccinations_timeseries_v2.tsv" - self.__src_cvsfile_name = "data"+os.sep+self.__cvsfile_name - self.__src_cvsfile_tmp_name = "data"+os.sep+"tmp_"+self.__cvsfile_name - self.__url_src_data = "https://impfdashboard.de/static/data/germany_vaccinations_timeseries_v2.tsv" - app.logger.info("------------------------------------------------------------") - app.logger.info(" Vaccination Service Update [ready]") - - def __update_who_date_reported(self): - app.logger.info(" update who_date_reported [begin]") - app.logger.info("------------------------------------------------------------") - i = 0 - for i_date_reported, in VaccinationDataImportTable.get_dates_reported(): - c = VaccinationDateReported.find_by_date_reported(i_date_reported) - if c is None: - o = VaccinationDateReported(date_reported=i_date_reported) - db.session.add(o) - app.logger.info(" update who_date_reported "+i_date_reported+" added NEW") - if i % 10 == 0: - app.logger.info(" update who_date_reported "+i_date_reported+" not added") - db.session.commit() - i += 1 - db.session.commit() - app.logger.info("") - app.logger.info(" update who_date_reported [done]") - app.logger.info("------------------------------------------------------------") - return self - - def __update_who_region(self): - app.logger.info(" update who_region [begin]") - app.logger.info("------------------------------------------------------------") - i = 0 - for i_who_region, in db.session.query(VaccinationDataImportTable.who_region).distinct(): - c = db.session.query(VaccinationRegion).filter(VaccinationRegion.region == i_who_region).count() - if c == 0: - o = VaccinationRegion(region=i_who_region) - db.session.add(o) - app.logger.info(i_who_region +" added NEW ") - else: - app.logger.info(i_who_region +" not added ") - if i % 10 == 0: - db.session.commit() - i += 1 - db.session.commit() - app.logger.info("") - app.logger.info(" update who_region [done]") - app.logger.info("------------------------------------------------------------") - return self - - def __update_who_country(self): - app.logger.info(" update who_country [begin]") - app.logger.info("------------------------------------------------------------") - sql_text = """ - select distinct - who_global_data_import.country_code, - who_global_data_import.country, - who_global_data_import.who_region - from who_global_data_import - """ - result = db.session.execute(sql_text).fetchall() - for result_item in result: - i_country_code = result_item.country_code - i_country = result_item.country - i_who_region = result_item.who_region - output = i_country_code + " " + i_country + " " + i_who_region - my_region = VaccinationRegion.find_by_region(i_who_region) - my_country = VaccinationCountry.find_by_country_code_and_country_and_who_region_id( - i_country_code, i_country, my_region - ) - if my_country is None: - o = VaccinationCountry( - country=i_country, - country_code=i_country_code, - region=my_region) - db.session.add(o) - db.session.commit() - my_country = VaccinationCountry.find_by_country_code_and_country_and_who_region_id( - i_country_code, i_country, my_region - ) - output += " added NEW " - else: - output += " not added " - output += i_country_code + " id=" + str(my_country.id) - app.logger.info(output) - db.session.commit() - app.logger.info("") - app.logger.info(" update who_country [done]") - app.logger.info("------------------------------------------------------------") - return self - - def __update_who_global_data(self): - app.logger.info(" update Vaccination [begin]") - app.logger.info("------------------------------------------------------------") - dates_reported = VaccinationDateReported.get_all_as_dict() - regions = VaccinationRegion.get_all_as_dict() - countries = VaccinationCountry.get_all_as_dict() - # - # - i = 0 - result = VaccinationDataImportTable.get_all() - for result_item in result: - my_country = countries[result_item.country_code] - my_date_reported = dates_reported[result_item.date_reported] - result_who_global_data = VaccinationData.find_one_or_none_by_date_and_country( - my_date_reported, - my_country) - if result_who_global_data is None: - o = VaccinationData( - cases_new=int(result_item.new_cases), - cases_cumulative=int(result_item.cumulative_cases), - deaths_new=int(result_item.new_deaths), - deaths_cumulative=int(result_item.cumulative_deaths), - date_reported=my_date_reported, - country=my_country - ) - db.session.add(o) - if i % 2000 == 0: - app.logger.info(" update Vaccination ... "+str(i)+" rows") - db.session.commit() - i += 1 - db.session.commit() - app.logger.info(" update Vaccination : "+str(i)+" total rows") - app.logger.info(" update Vaccination [done]") - app.logger.info("------------------------------------------------------------") - return self - - def __update_who_global_data_short(self): - app.logger.info(" update Vaccination short [begin]") - app.logger.info("------------------------------------------------------------") - new_dates_reported_from_import = VaccinationDataImportTable.get_new_dates_as_array() - i = 0 - for my_date_reported in new_dates_reported_from_import: - my_date = VaccinationDateReported.find_by_date_reported(my_date_reported) - for result_item in VaccinationDataImportTable.get_for_one_day(my_date_reported): - my_country = VaccinationCountry.find_by_country_code(result_item.country_code) - o = VaccinationData( - cases_new=int(result_item.new_cases), - cases_cumulative=int(result_item.cumulative_cases), - deaths_new=int(result_item.new_deaths), - deaths_cumulative=int(result_item.cumulative_deaths), - date_reported=my_date, - country=my_country - ) - db.session.add(o) - result_item.row_imported = True - db.session.add(result_item) - i += 1 - if i % 500 == 0: - app.logger.info(" update Vaccination short ... "+str(i)+" rows") - db.session.commit() - db.session.commit() - app.logger.info(" update Vaccination short : "+str(i)+" total rows") - app.logger.info(" update Vaccination short [done]") - app.logger.info("------------------------------------------------------------") - return self - - def __update_who_global_data_initial(self): - app.logger.info(" update Vaccination initial [begin]") - app.logger.info("------------------------------------------------------------") - VaccinationData.remove_all() - new_dates_reported_from_import = VaccinationDataImportTable.get_new_dates_as_array() - i = 0 - for my_date_reported in new_dates_reported_from_import: - my_date = VaccinationDateReported.find_by_date_reported(my_date_reported) - for result_item in VaccinationDataImportTable.get_for_one_day(my_date_reported): - my_country = VaccinationCountry.find_by_country_code(result_item.country_code) - o = VaccinationData( - cases_new=int(result_item.new_cases), - cases_cumulative=int(result_item.cumulative_cases), - deaths_new=int(result_item.new_deaths), - deaths_cumulative=int(result_item.cumulative_deaths), - date_reported=my_date, - country=my_country - ) - db.session.add(o) - result_item.row_imported = True - db.session.add(result_item) - 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)+" total rows") - app.logger.info(" update Vaccination initial [done]") - app.logger.info("------------------------------------------------------------") - return self - - def update_db(self): - app.logger.info(" update db [begin]") - app.logger.info("------------------------------------------------------------") - self.__update_who_date_reported() - self.__update_who_region() - self.__update_who_country() - self.__update_who_global_data() - app.logger.info(" update db [done]") - app.logger.info("------------------------------------------------------------") - return self - - def update_db_short(self): - app.logger.info(" update db short [begin]") - app.logger.info("------------------------------------------------------------") - self.__update_who_date_reported() - self.__update_who_region() - self.__update_who_country() - self.__update_who_global_data_short() - app.logger.info(" update db short [done]") - app.logger.info("------------------------------------------------------------") - return self - - def update_db_initial(self): - app.logger.info(" update db initial [begin]") - app.logger.info("------------------------------------------------------------") - self.__update_who_date_reported() - self.__update_who_region() - self.__update_who_country() - self.__update_who_global_data_initial() - app.logger.info(" update db initial [done]") - app.logger.info("------------------------------------------------------------") - return self - - def update_who_country(self): - self.__update_who_country() - return self diff --git a/templates/vaccination/fragment_vaccination_germany_timeline_table.html b/templates/vaccination/fragment_vaccination_germany_timeline_table.html new file mode 100644 index 00000000..655215a3 --- /dev/null +++ b/templates/vaccination/fragment_vaccination_germany_timeline_table.html @@ -0,0 +1,28 @@ + <table class="table table-hover table-striped table-dark"> + <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 vaccination_germany_timeline in page_data.items %} + <tr> + <td>{{ vaccination_germany_timeline.date_reported }}</td> + <td>{{ vaccination_germany_timeline.country_code }}</td> + <td>{{ vaccination_germany_timeline.country }}</td> + <td>{{ vaccination_germany_timeline.who_region }}</td> + <td>{{ vaccination_germany_timeline.new_cases }}</td> + <td>{{ vaccination_germany_timeline.cumulative_cases }}</td> + <td>{{ vaccination_germany_timeline.new_deaths }}</td> + <td>{{ vaccination_germany_timeline.cumulative_deaths }}</td> + </tr> + {% endfor %} + </tbody> + </table> \ No newline at end of file diff --git a/templates/vaccination/vaccination_germany_timeline.html b/templates/vaccination/vaccination_germany_timeline.html new file mode 100644 index 00000000..b10cd69e --- /dev/null +++ b/templates/vaccination/vaccination_germany_timeline.html @@ -0,0 +1,62 @@ +{% extends 'page_layout.html' %} + +{% include 'fragment_pagination.html' %} + +{% block navigation_breadcrumb %} + +{% endblock %} + + +{% block navigation_navtabs %} + {% include 'vaccination/fragment_navtabs_vaccination.html' %} +{% endblock %} + + +{% block main_container %} + + {% 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('url_vaccination_germany_timeline', 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_vaccination_germany_timeline', 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_vaccination_germany_timeline', page=page_data.next_num) }}">Next</a> + </li> + {% endif %} + </ul> + {% endif %} + + {% include 'vaccination/fragment_vaccination_germany_timeline_table.html' %} + +{% endblock %} + + +{% block footer_container %} + +{% endblock %} + + + diff --git a/templates/vaccination/vaccination_imported.html b/templates/vaccination/vaccination_imported.html deleted file mode 100644 index 6714d23e..00000000 --- a/templates/vaccination/vaccination_imported.html +++ /dev/null @@ -1,88 +0,0 @@ -{% extends 'page_layout.html' %} - -{% include 'fragment_pagination.html' %} - -{% block navigation_breadcrumb %} - -{% endblock %} - - -{% block navigation_navtabs %} - {% include 'vaccination/fragment_navtabs_vaccination.html' %} -{% endblock %} - - -{% block main_container %} - - {% 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('url_rki_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('url_rki_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('url_rki_imported', page=page_data.next_num) }}">Next</a> - </li> - {% endif %} - </ul> - {% endif %} - - <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> -{% endblock %} - - -{% block footer_container %} - -{% endblock %} - - - -- GitLab