diff --git a/README.md b/README.md index beca4498565599217d182755026cd426db686465..1c033c69d97baa21a8446cbdff2cb86e91ad96a5 100644 --- a/README.md +++ b/README.md @@ -204,6 +204,7 @@ class WhoGlobalDataImportTable(db.Model): * Fixed #4 data update for 3NF ecdc_europa_data_import ### 0.0.10 Release +* Issue #24 update_data * Issue #26 /admin/database/dump * Issue #28 /admin/database/import * Issue #29 /who/info diff --git a/org/woehlke/covid19/rki/rki_model.py b/org/woehlke/covid19/rki/rki_model.py new file mode 100644 index 0000000000000000000000000000000000000000..647bc471472e2bff2c6d360f71c038866c25975f --- /dev/null +++ b/org/woehlke/covid19/rki/rki_model.py @@ -0,0 +1,283 @@ +from flask_sqlalchemy import Pagination +from sqlalchemy import and_, func +from database import db, ITEMS_PER_PAGE +from sqlalchemy.orm import joinedload, raiseload + + +class RkiDateReported(db.Model): + __tablename__ = 'rki_date_reported' + + id = db.Column(db.Integer, primary_key=True) + date_reported = db.Column(db.String(255), nullable=False, unique=True) + + @classmethod + def remove_all(cls): + db.session.execute("delete from " + cls.__tablename__) + db.session.commit() + return None + + @classmethod + def get_all_as_page(cls, page): + return db.session.query(cls).order_by(cls.date_reported.desc()).paginate(page, per_page=ITEMS_PER_PAGE) + + @classmethod + def get_all(cls): + return db.session.query(cls).all() + + @classmethod + def get_all_as_dict(cls): + dates_reported = {} + for my_date_reported in cls.get_all(): + dates_reported[my_date_reported.date_reported] = my_date_reported + return dates_reported + + @classmethod + def get_by_id(cls, other_id): + return db.session.query(cls).filter(cls.id == other_id).one() + + @classmethod + def find_by_date_reported(cls, i_date_reported): + return db.session.query(cls).filter(cls.date_reported == i_date_reported).one_or_none() + + +class RkiRegion(db.Model): + __tablename__ = 'rki_region' + + id = db.Column(db.Integer, primary_key=True) + region = db.Column(db.String(255), unique=True) + + @classmethod + def remove_all(cls): + db.session.execute("delete from " + cls.__tablename__) + db.session.commit() + return None + + @classmethod + def get_all(cls): + return db.session.query(cls).all() + + @classmethod + def get_all_as_page(cls, page): + return db.session.query(cls).order_by(cls.region).paginate(page, per_page=ITEMS_PER_PAGE) + + @classmethod + def get_all_as_dict(cls): + regions = {} + for my_region in cls.get_all(): + regions[my_region.region] = my_region + return regions + + @classmethod + def get_by_id(cls, other_id): + return db.session.query(cls).filter(cls.id == other_id).one() + + @classmethod + def find_by_region(cls, i_who_region): + my_region = db.session.query(cls).filter(cls.region == i_who_region).one_or_none() + return my_region + + +class RkiCountry(db.Model): + __tablename__ = 'rki_country' + + id = db.Column(db.Integer, primary_key=True) + country_code = db.Column(db.String(255), unique=True, nullable=False) + country = db.Column(db.String(255), unique=True, nullable=False) + region_id = db.Column(db.Integer, db.ForeignKey('who_region.id'), nullable=False) + region = db.relationship( + 'WhoRegion', + lazy='subquery', + order_by='WhoRegion.region') + + @classmethod + def remove_all(cls): + db.session.execute("delete from " + cls.__tablename__) + db.session.commit() + return None + + @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() + + @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_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 RkiGermanyData(db.Model): + __tablename__ = 'rki_global_data' + + id = db.Column(db.Integer, primary_key=True) + cases_new = db.Column(db.Integer, nullable=False) + cases_cumulative = db.Column(db.Integer, nullable=False) + deaths_new = db.Column(db.Integer, nullable=False) + deaths_cumulative = db.Column(db.Integer, nullable=False) + date_reported_id = db.Column(db.Integer, + db.ForeignKey('who_date_reported.id'), nullable=False) + date_reported = db.relationship( + 'WhoDateReported', lazy='joined', order_by='desc(WhoDateReported.date_reported)') + country_id = db.Column(db.Integer, + db.ForeignKey('who_country.id'), nullable=False) + country = db.relationship( + 'WhoCountry', lazy='joined', order_by='asc(WhoCountry.country)') + + @classmethod + def remove_all(cls): + db.session.execute("delete from " + cls.__tablename__) + 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_one_or_none_by_date_and_country(cls, my_date_reported, my_country): + return db.session.query(cls).filter( + and_( + cls.date_reported_id == my_date_reported.id, + cls.country_id == my_country.id + ) + ).one_or_none() + + @classmethod + def get_data_for_country(cls, who_country, page): + return db.session.query(cls).filter( + cls.country_id == who_country.id + ).populate_existing().options( + joinedload(cls.country).subqueryload(RkiCountry.region), + joinedload(cls.date_reported) + ).paginate(page, per_page=ITEMS_PER_PAGE) + + @classmethod + def get_data_for_day(cls, date_reported, page): + return db.session.query(cls).filter( + cls.date_reported_id == date_reported.id + ).populate_existing().options( + joinedload(cls.country).subqueryload(RkiCountry.region), + joinedload(cls.date_reported) + ).order_by( + cls.deaths_new.desc(), + cls.cases_new.desc(), + cls.deaths_cumulative.desc(), + cls.cases_cumulative.desc() + ).paginate(page, per_page=ITEMS_PER_PAGE) + + +class RkiGermanyDataImportTable(db.Model): + __tablename__ = 'rki_global_data_import' + + 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) + row_imported = db.Column(db.Boolean, nullable=False) + + @classmethod + def remove_all(cls): + db.session.execute("delete from " + cls.__tablename__) + 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 get_regions(cls): + return db.session.query(cls.who_region).distinct() + + @classmethod + def get_dates_reported(cls): + return db.session.query(cls.date_reported).distinct() + + @classmethod + def get_for_one_day(cls, day): + return db.session.query(cls).filter(cls.date_reported == day).all() + + @classmethod + def get_new_dates_as_array(cls): + sql_query = """ + select + date_reported + from + who_global_data_import + where + date_reported + not in ( + select + distinct + who_date_reported.date_reported + from + who_global_data + left join + who_date_reported + on + who_global_data.date_reported_id=who_date_reported.id + ) + group by + who_global_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/rki/rki_service.py b/org/woehlke/covid19/rki/rki_service.py new file mode 100644 index 0000000000000000000000000000000000000000..0faea52962ed13301d1585b6cad89d22fdeed18e --- /dev/null +++ b/org/woehlke/covid19/rki/rki_service.py @@ -0,0 +1,76 @@ +import os +from database import app +from org.woehlke.covid19.who.who_service_download import WhoServiceDownload +from org.woehlke.covid19.who.who_service_import import WhoServiceImport +from org.woehlke.covid19.who.who_service_update import WhoServiceUpdate + +rki_service = None + + +class RkiService: + def __init__(self, database): + app.logger.info("------------------------------------------------------------") + app.logger.info(" WHO Service [init]") + app.logger.info("------------------------------------------------------------") + self.__database = database + self.limit_nr = 20 + self.__who_cvsfile_name = "WHO-COVID-19-global-data.csv" + self.__src_who_cvsfile_name = "data"+os.sep+self.__who_cvsfile_name + self.__src_who_cvsfile_tmp_name = "data"+os.sep+"tmp_"+self.__who_cvsfile_name + self.__url_src_data = "https://covid19.who.int/"+self.__who_cvsfile_name + self.who_service_download = WhoServiceDownload(database) + self.who_service_import = WhoServiceImport(database) + self.who_service_update = WhoServiceUpdate(database) + app.logger.info("------------------------------------------------------------") + app.logger.info(" WHO Service [ready]") + + def run_download(self): + app.logger.info(" run update [begin]") + app.logger.info("------------------------------------------------------------") + success = self.who_service_download.download_file() + app.logger.info("") + app.logger.info(" run update [done]") + 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.who_service_import.import_file() + self.who_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("------------------------------------------------------------") + if import_file: + self.who_service_import.import_file() + self.who_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): + app.logger.info(" run update initial [begin]") + app.logger.info("------------------------------------------------------------") + if import_file: + self.who_service_import.import_file() + self.who_service_update.update_db_initial() + app.logger.info("") + app.logger.info(" run update initial [done]") + app.logger.info("------------------------------------------------------------") + return self + + def run_update_countries(self): + app.logger.info(" run update countries [begin]") + app.logger.info("------------------------------------------------------------") + self.who_service_update.update_who_country() + app.logger.info("") + app.logger.info(" run update countries [done]") + app.logger.info("------------------------------------------------------------") + return self diff --git a/org/woehlke/covid19/rki/rki_service_download.py b/org/woehlke/covid19/rki/rki_service_download.py new file mode 100644 index 0000000000000000000000000000000000000000..087673723c83a89e9d6456bcb388029b698b2017 --- /dev/null +++ b/org/woehlke/covid19/rki/rki_service_download.py @@ -0,0 +1,56 @@ +import os +import wget +from flask import flash +from database import app + +rki_service_download = None + + +class RkiServiceDownload: + def __init__(self, database): + app.logger.info("------------------------------------------------------------") + app.logger.info(" RKI Service Download [init]") + app.logger.info("------------------------------------------------------------") + self.__database = database + self.limit_nr = 20 + self.__who_cvsfile_name = "RKI-COVID-19-DE-data.csv" + self.__src_who_cvsfile_name = "data"+os.sep+self.__who_cvsfile_name + self.__src_who_cvsfile_tmp_name = "data"+os.sep+"tmp_"+self.__who_cvsfile_name + self.__url_src_data = "https://opendata.arcgis.com/datasets/ef4b445a53c1406892257fe63129a8ea_0.csv" + + self.__rki_landkreise_url_src ="https://opendata.arcgis.com/datasets/917fc37a709542548cc3be077a786c17_0.csv" + app.logger.info("------------------------------------------------------------") + app.logger.info(" RKI Service Download [ready]") + + def download_file(self): + app.logger.info(" download - RKI [begin] ") + app.logger.info("------------------------------------------------------------") + app.logger.info(" FILE: "+self.__src_who_cvsfile_name+" ") + app.logger.info(" FROM: "+self.__url_src_data+" ") + app.logger.info("------------------------------------------------------------") + os.makedirs('data', exist_ok=True) + try: + os.remove(self.__src_who_cvsfile_name) + data_file = wget.download(self.__url_src_data, self.__src_who_cvsfile_name) + app.logger.info(" " + data_file + " ") + except RuntimeError as error: + app.logger.info("############################################################") + app.logger.info(" " + error + " ") + app.logger.info("############################################################") + flash(message="error while downloading: " + self.__url_src_data, category='error') + except Exception as error: + app.logger.info("############################################################") + app.logger.info(error) + app.logger.info("############################################################") + flash(message="error after downloading: " + self.__who_cvsfile_name, category='error') + except AttributeError as aerror: + app.logger.info("############################################################") + app.logger.info(aerror) + app.logger.info("############################################################") + finally: + app.logger.info("------------------------------------------------------------") + app.logger.info(" download - RKI [done] ") + msg = "downloaded: " + self.__who_cvsfile_name + " " + flash(msg) + return self + diff --git a/org/woehlke/covid19/rki/rki_service_import.py b/org/woehlke/covid19/rki/rki_service_import.py new file mode 100644 index 0000000000000000000000000000000000000000..3adcea0f47053ac3417ba241e1f1aca79704a097 --- /dev/null +++ b/org/woehlke/covid19/rki/rki_service_import.py @@ -0,0 +1,74 @@ +import os +import sys +import csv +import psycopg2 +from database import db, app +from org.woehlke.covid19.who.who_model import WhoGlobalDataImportTable + + +rki_service_import = None + + +class RkiServiceImport: + def __init__(self, database): + app.logger.info("------------------------------------------------------------") + app.logger.info(" WHO Service Import [init]") + app.logger.info("------------------------------------------------------------") + self.__database = database + self.limit_nr = 20 + self.__who_cvsfile_name = "WHO-COVID-19-global-data.csv" + self.__src_who_cvsfile_name = "data"+os.sep+self.__who_cvsfile_name + self.__src_who_cvsfile_tmp_name = "data"+os.sep+"tmp_"+self.__who_cvsfile_name + self.__url_src_data = "https://covid19.who.int/"+self.__who_cvsfile_name + app.logger.info("------------------------------------------------------------") + app.logger.info(" WHO Service Import [ready]") + + def import_file(self): + app.logger.info(" import WHO [begin]") + app.logger.info("------------------------------------------------------------") + app.logger.info(" FILE: "+self.__src_who_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: + WhoGlobalDataImportTable.remove_all() + with open(self.__src_who_cvsfile_name, newline='\n') as csv_file: + file_reader = csv.DictReader(csv_file, delimiter=',', quotechar='"') + k = 0 + for row in file_reader: + o = WhoGlobalDataImportTable( + 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'], + row_imported=False + ) + db.session.add(o) + if (k % 2000) == 0: + db.session.commit() + app.logger.info(" import WHO ... " + str(k) + " rows") + k = k + 1 + db.session.commit() + except KeyError as error: + app.logger.warning("WARN: import WHO [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: import WHO [end]") + except (Exception, psycopg2.DatabaseError) as error: + app.logger.warning("WARN: import WHO [begin]") + app.logger.warning(error) + app.logger.warning("WARN: import WHO [end]") + finally: + app.logger.info("") + app.logger.info("------------------------------------------------------------") + app.logger.info(" import WHO [done]") + return self diff --git a/org/woehlke/covid19/rki/rki_service_update.py b/org/woehlke/covid19/rki/rki_service_update.py new file mode 100644 index 0000000000000000000000000000000000000000..6cbc6052154d2c1f417af3e85fcb32bc3ca7a0fa --- /dev/null +++ b/org/woehlke/covid19/rki/rki_service_update.py @@ -0,0 +1,239 @@ +import os +from database import db, app +from org.woehlke.covid19.who.who_model import WhoRegion, WhoDateReported, WhoCountry, WhoGlobalData +from org.woehlke.covid19.who.who_model import WhoGlobalDataImportTable + + +rki_service_update = None + + +class RkiServiceUpdate: + def __init__(self, database): + app.logger.info("------------------------------------------------------------") + app.logger.info(" WHO Service Update [init]") + app.logger.info("------------------------------------------------------------") + self.__database = database + self.limit_nr = 20 + self.__who_cvsfile_name = "WHO-COVID-19-global-data.csv" + self.__src_who_cvsfile_name = "data"+os.sep+self.__who_cvsfile_name + self.__src_who_cvsfile_tmp_name = "data"+os.sep+"tmp_"+self.__who_cvsfile_name + self.__url_src_data = "https://covid19.who.int/"+self.__who_cvsfile_name + app.logger.info("------------------------------------------------------------") + app.logger.info(" WHO 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 WhoGlobalDataImportTable.get_dates_reported(): + c = WhoDateReported.find_by_date_reported(i_date_reported) + if c is None: + o = WhoDateReported(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(WhoGlobalDataImportTable.who_region).distinct(): + c = db.session.query(WhoRegion).filter(WhoRegion.region == i_who_region).count() + if c == 0: + o = WhoRegion(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 = WhoRegion.find_by_region(i_who_region) + my_country = WhoCountry.find_by_country_code_and_country_and_who_region_id( + i_country_code, i_country, my_region + ) + if my_country is None: + o = WhoCountry( + country=i_country, + country_code=i_country_code, + region=my_region) + db.session.add(o) + db.session.commit() + my_country = WhoCountry.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 WHO [begin]") + app.logger.info("------------------------------------------------------------") + dates_reported = WhoDateReported.get_all_as_dict() + regions = WhoRegion.get_all_as_dict() + countries = WhoCountry.get_all_as_dict() + + # + # + i = 0 + result = WhoGlobalDataImportTable.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 = WhoGlobalData.find_one_or_none_by_date_and_country( + my_date_reported, + my_country) + if result_who_global_data is None: + o = WhoGlobalData( + 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 WHO ... "+str(i)+" rows") + db.session.commit() + i += 1 + db.session.commit() + app.logger.info(" update WHO : "+str(i)+" total rows") + app.logger.info(" update WHO [done]") + app.logger.info("------------------------------------------------------------") + return self + + def __update_who_global_data_short(self): + app.logger.info(" update WHO short [begin]") + app.logger.info("------------------------------------------------------------") + new_dates_reported_from_import = WhoGlobalDataImportTable.get_new_dates_as_array() + i = 0 + for my_date_reported in new_dates_reported_from_import: + my_date = WhoDateReported.find_by_date_reported(my_date_reported) + for result_item in WhoGlobalDataImportTable.get_for_one_day(my_date_reported): + my_country = WhoCountry.find_by_country_code(result_item.country_code) + o = WhoGlobalData( + 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 WHO short ... "+str(i)+" rows") + db.session.commit() + db.session.commit() + app.logger.info(" update WHO short : "+str(i)+" total rows") + app.logger.info(" update WHO short [done]") + app.logger.info("------------------------------------------------------------") + return self + + def __update_who_global_data_initial(self): + app.logger.info(" update WHO initial [begin]") + app.logger.info("------------------------------------------------------------") + WhoGlobalData.remove_all() + new_dates_reported_from_import = WhoGlobalDataImportTable.get_new_dates_as_array() + i = 0 + for my_date_reported in new_dates_reported_from_import: + my_date = WhoDateReported.find_by_date_reported(my_date_reported) + for result_item in WhoGlobalDataImportTable.get_for_one_day(my_date_reported): + my_country = WhoCountry.find_by_country_code(result_item.country_code) + o = WhoGlobalData( + 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 WHO initial ... "+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("------------------------------------------------------------") + 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