diff --git a/BACKLOG.md b/BACKLOG.md index fa19b0c6e1f76cd968b2c29b99c2fcba1d147f6a..5f7148f235a7ff85140d1639941fe262dea447ca 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -191,13 +191,13 @@ ### 0.0.17 Release * Issue #146 add Tasks and URLs for starting Tasks to rki_views -* Issue #140 move WhoImport to RKI in: rk_service_import.py +* Fixed #140 move WhoImport to RKI in: rk_service_import.py * Issue #139 refactor RkiBundeslaenderServiceDownload to new method scheme introduced 07.02.2021 * Fixed #123 split RkiBundeslaenderService into two Services, one for bundeslaender and one for landkreise * Issue #125 implement RkiLandkreise * Issue #126 implement RkiBundeslaenderImport * Issue #127 implement RkiBundeslaenderImport.get_dates_reported -* Issue #128 add fields from csv to RkiLandkreiseImport +* Fixed #128 add fields from csv to RkiLandkreiseImport * Issue #132 refactor RkiBundeslaenderService to new method scheme introduced 07.02.2021 * Issue #133 implement RkiBundeslaenderService.task_database_drop_create * Issue #134 implement RkiBundeslaenderService.run_update_dimension_tables_only diff --git a/src/covid19/blueprints/rki_bundeslaender/rki_model.py b/src/covid19/blueprints/rki_bundeslaender/rki_model.py index 5e36100e41825b33cf4bf23ef0f980584df6cadc..f1ec0ddb01c8edf4376f08ed7d1982bdb80b3ff3 100644 --- a/src/covid19/blueprints/rki_bundeslaender/rki_model.py +++ b/src/covid19/blueprints/rki_bundeslaender/rki_model.py @@ -3,8 +3,8 @@ from datetime import date from sqlalchemy.orm import joinedload from database import db, ITEMS_PER_PAGE -from covid19.blueprints.common.common_model import CommonDateReported, CommonRegion -from covid19.blueprints.common.common_model import RkiDateReported, RkiRegion, RkiCountry + +# OBJECTID_1,LAN_ew_AGS,LAN_ew_GEN,LAN_ew_BEZ,LAN_ew_EWZ,OBJECTID,Fallzahl,Aktualisierung,AGS_TXT,GlobalID,faelle_100000_EW,Death,cases7_bl_per_100k,cases7_bl,death7_bl,cases7_bl_per_100k_txt,AdmUnitId,SHAPE_Length,SHAPE_Area # TODO: #123 split RkiBundeslaenderService into two Services, one for bundeslaender and one for landkreise @@ -13,21 +13,26 @@ class RkiBundeslaender(db.Model): __tablename__ = 'rki_bundeslaender' 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('rki_date_reported.id'), nullable=False) - date_reported = db.relationship( - 'RkiDateReported', - lazy='joined', - cascade='all, delete', - order_by='desc(RkiDateReported.date_reported)') - country_id = db.Column(db.Integer, - db.ForeignKey('rki_country.id'), nullable=False) - country = db.relationship( - 'RkiCountry', lazy='joined', order_by='asc(RkiCountry.country)') + + 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): @@ -49,33 +54,5 @@ class RkiBundeslaender(db.Model): 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) + 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_bundeslaender/rki_service.py b/src/covid19/blueprints/rki_bundeslaender/rki_service.py index 89417b9228700a1cfb9b0b7e792fc2ea5f7a6f7d..f03f0f5882f44eb4781b7c1a92c6032bedabe658 100644 --- a/src/covid19/blueprints/rki_bundeslaender/rki_service.py +++ b/src/covid19/blueprints/rki_bundeslaender/rki_service.py @@ -14,7 +14,6 @@ class RkiBundeslaenderService: app.logger.debug(" RKI Service [init]") app.logger.debug("------------------------------------------------------------") self.__database = database - self.limit_nr = 20 self.service_download = RkiBundeslaenderServiceDownload(database) self.service_import = RkiBundeslaenderServiceImport(database) self.service_update = RkiBundeslaenderServiceUpdate(database) diff --git a/src/covid19/blueprints/rki_bundeslaender/rki_service_download.py b/src/covid19/blueprints/rki_bundeslaender/rki_service_download.py index 5bed00cc0898976f2562c782ccfad9796010bb9b..410c8bfd669b79bf79765fd19fb6f2c0585cb4e3 100644 --- a/src/covid19/blueprints/rki_bundeslaender/rki_service_download.py +++ b/src/covid19/blueprints/rki_bundeslaender/rki_service_download.py @@ -4,6 +4,7 @@ from datetime import date from flask import flash from database import app +from covid19.blueprints.rki_bundeslaender.rki_service_config import RkiBundeslaenderServiceConfig # RkiBundeslaenderServiceDownload @@ -15,22 +16,12 @@ class RkiBundeslaenderServiceDownload: app.logger.debug(" RKI Service Download [init]") app.logger.debug("------------------------------------------------------------") self.__database = database - self.limit_nr = 20 - datum_heute = date.today().isoformat() - # - self.__bundeslaender_cvsfile_name = "RKI_COVID19__"+datum_heute+"__bundeslaender.csv" - self.__bundeslaender_url_src = "https://opendata.arcgis.com/datasets/ef4b445a53c1406892257fe63129a8ea_0.csv" - # - self.__landkreise_cvsfile_name = "RKI_COVID19__"+datum_heute+"__landkreise.csv" - self.__landkreise_url_src ="https://opendata.arcgis.com/datasets/917fc37a709542548cc3be077a786c17_0.csv" - # + self.cfg = RkiBundeslaenderServiceConfig() app.logger.debug("------------------------------------------------------------") app.logger.debug(" RKI Service Download [ready]") # TODO: #123 split RkiBundeslaenderService into two Services, one for bundeslaender and one for landkreise - def __download_file(self, datascope, cvsfile_name, url_src): - data_path = ".." + os.sep + ".." + os.sep + "data" + os.sep - src_cvsfile_path = data_path + cvsfile_name + def __download_file(self): app.logger.info(" download - RKI "+datascope+" [begin] ") app.logger.info("------------------------------------------------------------") app.logger.info(" FILE: "+cvsfile_name+" <- "+url_src) @@ -61,13 +52,3 @@ class RkiBundeslaenderServiceDownload: msg = "downloaded: " + cvsfile_name + " " flash(msg) return self - - # TODO: #123 split RkiService into two Services: RkiBundeslaenderService and RkiLandkreiseService - def download_file(self): - app.logger.info(" download - RKI [begin] ") - app.logger.info("------------------------------------------------------------") - self.__download_file("bundeslaender", self.__bundeslaender_cvsfile_name, self.__bundeslaender_url_src) - self.__download_file("landkreise", self.__landkreise_cvsfile_name, self.__landkreise_url_src) - app.logger.info(" download - RKI [done] ") - app.logger.info("------------------------------------------------------------") - return self diff --git a/src/covid19/blueprints/rki_bundeslaender/rki_service_import.py b/src/covid19/blueprints/rki_bundeslaender/rki_service_import.py index f1ba46b4d2ac065528f9a5dec3cd9f95fd692df3..a6cfa9f1e55ee709ef3d9bab88685c0f7de7c498 100644 --- a/src/covid19/blueprints/rki_bundeslaender/rki_service_import.py +++ b/src/covid19/blueprints/rki_bundeslaender/rki_service_import.py @@ -4,27 +4,20 @@ import csv import psycopg2 from database import db, app - -# TODO: #140 move WhoImport to RKI in: rk_service_import.py from covid19.blueprints.rki_bundeslaender.rki_model_import import RkiBundeslaenderImport +from covid19.blueprints.rki_bundeslaender.rki_service_config import RkiBundeslaenderServiceConfig -# TODO: #123 split RkiService into two Services: RkiBundeslaenderService and RkiLandkreiseService class RkiBundeslaenderServiceImport: def __init__(self, database): app.logger.debug("------------------------------------------------------------") app.logger.debug(" RKI Service Import [init]") app.logger.debug("------------------------------------------------------------") 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.cfg = RkiBundeslaenderServiceConfig() app.logger.debug("------------------------------------------------------------") app.logger.debug(" RKI Service Import [ready]") - # TODO: #123 split RkiService into two Services: RkiBundeslaenderService and RkiLandkreiseService def import_file(self): app.logger.info(" import RKI [begin]") app.logger.info("------------------------------------------------------------") @@ -37,7 +30,6 @@ class RkiBundeslaenderServiceImport: else: keyDate_reported = 'Date_reported' try: - # TODO: #140 move WhoImport to RKI in: rk_service_import.py RkiBundeslaenderImport.remove_all() with open(self.__src_who_cvsfile_name, newline='\n') as csv_file: file_reader = csv.DictReader(csv_file, delimiter=',', quotechar='"') diff --git a/src/covid19/blueprints/rki_landkreise/rki_model.py b/src/covid19/blueprints/rki_landkreise/rki_model.py index e75c17d235f976faceda2b251f013c412c105c32..2640f513de6e7631507d6fa97d4290959be7816d 100644 --- a/src/covid19/blueprints/rki_landkreise/rki_model.py +++ b/src/covid19/blueprints/rki_landkreise/rki_model.py @@ -12,22 +12,50 @@ class RkiLandkreise(db.Model): 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) + 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_bl_per_100k_txt = 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) diff --git a/src/covid19/blueprints/rki_landkreise/rki_model_import.py b/src/covid19/blueprints/rki_landkreise/rki_model_import.py index f883dd074cdee751466314c756eaf3dfea185f1a..2f4baba82538ef2531c29e65a3117e61112f4996 100644 --- a/src/covid19/blueprints/rki_landkreise/rki_model_import.py +++ b/src/covid19/blueprints/rki_landkreise/rki_model_import.py @@ -1,6 +1,6 @@ from database import db, ITEMS_PER_PAGE -# OBJECTID_1,LAN_ew_AGS,LAN_ew_GEN,LAN_ew_BEZ,LAN_ew_EWZ,OBJECTID,Fallzahl,Aktualisierung,AGS_TXT,GlobalID,faelle_100000_EW,Death,cases7_bl_per_100k,cases7_bl,death7_bl,cases7_bl_per_100k_txt,AdmUnitId,SHAPE_Length,SHAPE_Area +# 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 # TODO: #128 add fields from csv to RkiLandkreiseImport @@ -9,22 +9,50 @@ class RkiLandkreiseImport(db.Model): 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) + 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_bl_per_100k_txt = 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) @@ -48,6 +76,10 @@ class RkiLandkreiseImport(db.Model): 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 get_new_dates_as_array(cls):