From 38ca7aedaf27f65db8f93f3bf01a36ff69af636c Mon Sep 17 00:00:00 2001 From: thomaswoehlke <thomas.woehlke@gmail.com> Date: Tue, 19 Jan 2021 13:52:04 +0100 Subject: [PATCH] ### 0.0.8 Release * Fixed #13 /who/imported/ * Fixed #14 /europe/imported/ * Fixed #15 /who/update: Download * Fixed #16 /who/update: Import File to DB * Issue #17 /who/update: Update DB * Issue #3 ORM: 3NF for ecdc_europa_data_import * Issue #4 data update for 3NF ecdc_europa_data_import --- org/woehlke/covid19/europe/europe_model.py | 15 ++-- org/woehlke/covid19/europe/europe_service.py | 68 ------------------- .../covid19/europe/europe_service_update.py | 11 +++ 3 files changed, 20 insertions(+), 74 deletions(-) diff --git a/org/woehlke/covid19/europe/europe_model.py b/org/woehlke/covid19/europe/europe_model.py index ffc93156..ddd018ba 100644 --- a/org/woehlke/covid19/europe/europe_model.py +++ b/org/woehlke/covid19/europe/europe_model.py @@ -34,15 +34,18 @@ class EuropeDataImportTable(db.Model): def get_by_id(cls, other_id): return db.session.query(cls).filter(cls.id == other_id).one() + @classmethod + def get_date_rep(cls): + sql = "select distinct date_rep, year_week from europe_data_import order by year_week desc" + return db.session.execute(sql).all() + class EuropeDateReported(db.Model): __tablename__ = 'europe_date_reported' 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) + year_week = db.Column(db.String(255), nullable=False) @classmethod def remove_all(cls): @@ -123,9 +126,9 @@ class EuropeData(db.Model): __tablename__ = 'europe_data' id = db.Column(db.Integer, primary_key=True) - deaths = db.Column(db.String(255), nullable=False) - cases = db.Column(db.String(255), nullable=False) - cases_cumulative_14days_per_100000 = db.Column(db.String(255), nullable=False) + deaths_weekly = db.Column(db.String(255), nullable=False) + cases_weekly = db.Column(db.String(255), nullable=False) + notification_rate_per_100000_population_14days = db.Column(db.String(255), nullable=False) europe_country_id = db.Column(db.Integer, db.ForeignKey('europe_country.id'), nullable=False) europe_country = db.relationship('EuropeCountry', lazy='joined') diff --git a/org/woehlke/covid19/europe/europe_service.py b/org/woehlke/covid19/europe/europe_service.py index 607f44e0..12ac0783 100644 --- a/org/woehlke/covid19/europe/europe_service.py +++ b/org/woehlke/covid19/europe/europe_service.py @@ -28,74 +28,6 @@ class EuropeService: app.logger.info("------------------------------------------------------------") app.logger.info(" Europe Service [ready] ") - def __download(self): - app.logger.info("------------------------------------------------------------") - app.logger.info(" download Europa [begin]") - app.logger.info("------------------------------------------------------------") - app.logger.info(" FILE: "+self.__src_europa_cvsfile_name+" <- "+self.__url_src_data) - app.logger.info("------------------------------------------------------------") - os.makedirs('data', exist_ok=True) - app.logger.info("------------------------------------------------------------") - try: - data_file = wget.download(self.__url_src_data, self.__src_europa_cvsfile_name) - #os.remove(self.__src_europa_cvsfile_name) - #os.renames(data_file, self.__src_europa_cvsfile_name) - app.logger.info("------------------------------------------------------------") - except Exception as error: - app.logger.warning(error) - app.logger.warning("------------------------------------------------------------") - finally: - app.logger.info(" download Europa [done]") - return self - - def __import(self): - app.logger.info(" import Europa [begin]") - app.logger.info("------------------------------------------------------------") - app.logger.info(" FILE: "+self.__src_europa_cvsfile_name) - app.logger.info(" TABLE: europe_data_import") - app.logger.info("------------------------------------------------------------") - try: - EuropeDataImportTable.remove_all() - with open(self.__src_europa_cvsfile_name, newline='') as csv_file: - file_reader = csv.DictReader(csv_file, delimiter=',', quotechar='"') - k = 0 - for row in file_reader: - o = EuropeDataImportTable( - date_rep=row['dateRep'], - day=row['day'], - month=row['month'], - year=row['year'], - cases=row['cases'], - deaths=row['deaths'], - countries_and_territories=row['countriesAndTerritories'], - geo_id=row['geoId'], - country_territory_code=row['countryterritoryCode'], - 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'] - ) - db.session.add(o) - if (k % 1000) == 0: - db.session.commit() - app.logger.info(" import Europa ... " + str(k) + " rows") - k = k + 1 - db.session.commit() - except KeyError as error: - app.logger.warning("KeyError: import Europa [begin]") - app.logger.warning(":::"+str(error)+":::") - for item_key, item_value in row.items(): - app.logger.warning(item_key+" : "+item_value) - app.logger.warning("KeyError: import Europa [end]") - except (Exception, psycopg2.DatabaseError) as error: - app.logger.warning("WARN: import Europa [begin]") - app.logger.warning(error) - app.logger.warning("WARN: import Europa [end]") - finally: - app.logger.info("------------------------------------------------------------") - app.logger.info(" import Europa [done]") - return self - def download(self): app.logger.info(" download [begin]") app.logger.info("------------------------------------------------------------") diff --git a/org/woehlke/covid19/europe/europe_service_update.py b/org/woehlke/covid19/europe/europe_service_update.py index 9074065e..bda421df 100644 --- a/org/woehlke/covid19/europe/europe_service_update.py +++ b/org/woehlke/covid19/europe/europe_service_update.py @@ -1,6 +1,7 @@ import os import psycopg2 from database import db, app +from org.woehlke.covid19.europe.europe_model import EuropeDataImportTable class EuropeServiceUpdate: @@ -17,11 +18,21 @@ class EuropeServiceUpdate: app.logger.info("------------------------------------------------------------") app.logger.info(" Europe Service Update [ready] ") + def __update_date_reported(self): + EuropeDataImportTable.remove_all() + result = EuropeDataImportTable.get_date_rep() + for result_item in result.items: + my_date_rep = result_item['date_rep'] + year_week = result_item['year_week'] + app.logger.info("| "+my_date_rep+" | "+year_week+" |") + return self + def update_db(self): app.logger.info(" update_db [begin]") app.logger.info("------------------------------------------------------------") app.logger.info(" ... ") app.logger.info(" ... TBD ... ") + self.__update_date_reported() app.logger.info(" ... ") app.logger.info(" update_db [done]") app.logger.info("------------------------------------------------------------") -- GitLab