From 8e53f2e36a580201449370ba7cc284a993feb71f Mon Sep 17 00:00:00 2001
From: thomaswoehlke <thomas.woehlke@gmail.com>
Date: Sat, 3 Apr 2021 23:47:22 +0200
Subject: [PATCH] update data

---
 src/covid19/blueprints/owid/owid_model.py     | 23 +-----
 .../blueprints/owid/owid_service_update.py    | 73 +++++++++++--------
 2 files changed, 48 insertions(+), 48 deletions(-)

diff --git a/src/covid19/blueprints/owid/owid_model.py b/src/covid19/blueprints/owid/owid_model.py
index 9031cfd7..19f28e5d 100644
--- a/src/covid19/blueprints/owid/owid_model.py
+++ b/src/covid19/blueprints/owid/owid_model.py
@@ -54,25 +54,6 @@ class OwidContinent(ApplicationRegion):
     id = db.Column(db.Integer, primary_key=True)
     region = db.Column(db.String(255), nullable=False, unique=True)
 
-    @classmethod
-    def remove_all(cls):
-        for one in cls.get_all():
-            db.session.delete(one)
-        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()
-
 
 class OwidCountry(db.Model):
     __tablename__ = 'owid_country'
@@ -104,6 +85,10 @@ class OwidCountry(db.Model):
     life_expectancy = db.Column(db.String(255), nullable=False)
     human_development_index = db.Column(db.String(255), nullable=False)
 
+    @classmethod
+    def find_by_iso_code_and_location(cls, iso_code, location):
+        return db.session.query(cls).filter(and_((cls.iso_code == iso_code), (cls.location == location))).one_or_none()
+
     @classmethod
     def remove_all(cls):
         for one in cls.get_all():
diff --git a/src/covid19/blueprints/owid/owid_service_update.py b/src/covid19/blueprints/owid/owid_service_update.py
index 9be0ecaf..5a209b32 100644
--- a/src/covid19/blueprints/owid/owid_service_update.py
+++ b/src/covid19/blueprints/owid/owid_service_update.py
@@ -1,6 +1,6 @@
 from database import db, app
 from covid19.blueprints.application.application_service_config import ApplicationServiceConfig
-from covid19.blueprints.owid.owid_model import OwidDateReported, OwidData
+from covid19.blueprints.owid.owid_model import OwidDateReported, OwidData, OwidContinent, OwidCountry
 from covid19.blueprints.owid.owid_model_import import OwidImport
 
 
@@ -41,19 +41,46 @@ class OwidServiceUpdate:
         new_dates_reported_from_import = OwidImport.get_new_dates_reported_as_array()
         i = 0
         for my_date_reported in new_dates_reported_from_import:
-            my_date = OwidDateReported.find_by_date_reported(my_date_reported)
-            if my_date is None:
+            my_OwidDateReported = OwidDateReported.find_by_date_reported(my_date_reported)
+            if my_OwidDateReported is None:
                 myday = OwidDateReported.create_new_object_factory(my_date_reported)
                 db.session.add(myday)
                 db.session.commit()
-            my_date = OwidDateReported.get_by_date_reported(my_date_reported)
+            my_OwidDateReported = OwidDateReported.get_by_date_reported(my_date_reported)
             k = 0
             for oi in OwidImport.get_for_one_day(my_date_reported):
+                my_OwidContinent = OwidContinent.find_by_region(i_region=oi.continent)
+                if my_OwidContinent is None:
+                    my_OwidContinent = OwidContinent(region=oi.continent)
+                    db.session.add(my_OwidContinent)
+                    db.session.commit()
+                my_OwidContinent = OwidContinent.find_by_region(i_region=oi.continent)
+                my_OwidCountry = OwidCountry.find_by_iso_code_and_location(iso_code=oi.iso_code, location=oi.location)
+                if my_OwidCountry is None:
+                    my_OwidCountry = OwidCountry(
+                        continent=my_OwidContinent,
+                        population=oi.population,
+                        population_density=oi.population_density,
+                        median_age=oi.median_age,
+                        aged_65_older=oi.aged_65_older,
+                        aged_70_older=oi.aged_70_older,
+                        gdp_per_capita=oi.gdp_per_capita,
+                        extreme_poverty=oi.extreme_poverty,
+                        cardiovasc_death_rate=oi.cardiovasc_death_rate,
+                        diabetes_prevalence=oi.diabetes_prevalence,
+                        female_smokers=oi.female_smokers,
+                        male_smokers=oi.male_smokers,
+                        handwashing_facilities=oi.handwashing_facilities,
+                        hospital_beds_per_thousand=oi.hospital_beds_per_thousand,
+                        life_expectancy=oi.life_expectancy,
+                        human_development_index=oi.human_development_index,
+                    )
+                    db.session.add(my_OwidCountry)
+                    db.session.commit()
+                my_OwidCountry = OwidCountry.find_by_iso_code(iso_code=oi.iso_code, location=oi.location)
                 o = OwidData(
-                    iso_code=oi.iso_code,
-                    continent=oi.continent,
-                    location=oi.location,
-                    date_reported=my_date,
+                    date_reported=my_OwidDateReported,
+                    country=my_OwidCountry,
                     total_cases=oi.total_cases,
                     new_cases=oi.new_cases,
                     new_cases_smoothed=oi.new_cases_smoothed,
@@ -94,21 +121,6 @@ class OwidServiceUpdate:
                     people_fully_vaccinated_per_hundred=oi.people_fully_vaccinated_per_hundred,
                     new_vaccinations_smoothed_per_million=oi.new_vaccinations_smoothed_per_million,
                     stringency_index=oi.stringency_index,
-                    population=oi.population,
-                    population_density=oi.population_density,
-                    median_age=oi.median_age,
-                    aged_65_older=oi.aged_65_older,
-                    aged_70_older=oi.aged_70_older,
-                    gdp_per_capita=oi.gdp_per_capita,
-                    extreme_poverty=oi.extreme_poverty,
-                    cardiovasc_death_rate=oi.cardiovasc_death_rate,
-                    diabetes_prevalence=oi.diabetes_prevalence,
-                    female_smokers=oi.female_smokers,
-                    male_smokers=oi.male_smokers,
-                    handwashing_facilities=oi.handwashing_facilities,
-                    hospital_beds_per_thousand=oi.hospital_beds_per_thousand,
-                    life_expectancy=oi.life_expectancy,
-                    human_development_index=oi.human_development_index,
                 )
                 db.session.add(o)
                 i += 1
@@ -116,7 +128,7 @@ class OwidServiceUpdate:
                 if i % 500 == 0:
                     app.logger.info(" update OWID incremental ... "+str(i)+" rows")
             db.session.commit()
-            app.logger.info(" update OWID incremental ... " + str(i) + " rows [" + str(my_date) + "] (" + str(k) + ")")
+            app.logger.info(" update OWID incremental ... " + str(i) + " rows [" + str(my_OwidDateReported) + "] (" + str(k) + ")")
         app.logger.info(" update OWID incremental :  "+str(i)+" rows total")
         app.logger.info(" __update_fact_tables_incremental [done]")
         app.logger.info("------------------------------------------------------------")
@@ -232,7 +244,8 @@ class OwidServiceUpdate:
     def update_fact_table_initial_only(self):
         app.logger.info(" update_fact_tables_initial_only [begin]")
         app.logger.info("------------------------------------------------------------")
-        self.__update_fact_table_initial()
+        # TODO
+        # self.__update_fact_table_initial()
         app.logger.info(" update_fact_tables_initial_only [done]")
         app.logger.info("------------------------------------------------------------")
         return self
@@ -240,8 +253,9 @@ class OwidServiceUpdate:
     def update_star_schema_incremental(self):
         app.logger.info(" update_star_schema_incremental [begin]")
         app.logger.info("------------------------------------------------------------")
-        self.__update_dimension_tables()
-        self.__update_fact_table_incremental()
+        # TODO
+        # self.__update_dimension_tables()
+        # self.__update_fact_table_incremental()
         app.logger.info(" update_star_schema_incremental [done]")
         app.logger.info("------------------------------------------------------------")
         return self
@@ -249,8 +263,9 @@ class OwidServiceUpdate:
     def update_star_schema_initial(self):
         app.logger.info(" update_star_schema_initial [begin]")
         app.logger.info("------------------------------------------------------------")
-        self.__update_dimension_tables()
-        self.__update_fact_table_initial()
+        # TODO
+        # self.__update_dimension_tables()
+        # self.__update_fact_table_initial()
         app.logger.info(" update_star_schema_initial [done]")
         app.logger.info("------------------------------------------------------------")
         return self
-- 
GitLab