Example #1
0
 def relateInfections(self):
     countrys_data = self.getCurrentStaticData()
     querys = []
     for country in countrys_data:
         print(f"getting infectors of {country}")
         if countrys_data[country]['first_outbreak'] != "unknown":
             for infector in countrys_data[country]['first_outbreak']:
                 infector_uuid = self.__getCountryUuid(
                     infector, countrys_data[infector])
                 infected_uuid = self.__getCountryUuid(
                     country, countrys_data[country])
                 sql = f"INSERT INTO `infectedinfector`(infected, infector) VALUES ('{infected_uuid}', '{infector_uuid}');"
                 querys.append(sql)
     mysql = getConnAndCursor('inserter', 'covid19')
     try:
         points = 1
         for sql in querys:
             print(f"\rInserting data{'.'*(points%3)}", end='')
             mysql["cursor"].execute(sql)
             mysql["conn"].commit()
             points += 1
     except Exception as e:
         print(f"Error on query: {sql}")
         raise e
     finally:
         mysql["conn"].close()
         print('\n')
Example #2
0
 def insertDailyCases(self, data=None):
     data = data if data else self.getCurrentStaticData()
     countries_path = "./data_sources/countries_data/"
     daily_cases = set(self.__getDailyCasesUuids())
     #self.updateCasesData()
     mysql = getConnAndCursor('inserter', 'covid19')
     try:
         for country in data:
             if not os.path.exists(os.path.join(countries_path, country)):
                 print(f"Skipping {country}...")
                 continue
             print(f"Updating cases of {country}...")
             for case in os.scandir(os.path.join(countries_path, country)):
                 if case.name == '0001-01-01.json':
                     continue
                 uuid = self.hasher.get_hash(case.name + country)
                 if uuid in daily_cases:
                     continue
                 with open(case.path) as f:
                     case_data = json.load(f)
                 if not case_data:
                     continue
                 country_uuid = self.__getCountryUuid(
                     country, data[country])
                 sql = "INSERT INTO `daily_cases`(uuid, date, cases, deaths, recoverys, country) VALUES ("
                 sql += f"'{uuid}', "
                 sql += f"'{case_data['Date'].replace('T',' ').replace('Z',' ')}', "
                 sql += f"{case_data['Confirmed']}, "
                 sql += f"{case_data['Deaths']}, "
                 sql += f"{case_data['Recovered']}, "
                 sql += f"'{country_uuid}'"
                 sql += ");"
                 mysql["cursor"].execute(sql)
                 mysql["conn"].commit()
Example #3
0
 def insertStatus(self):
     status_data = self.__getCurrentCountriesStatus()
     countrys_data = self.getCurrentStaticData()
     mysql = getConnAndCursor("inserter", "covid19")
     try:
         for country in status_data:
             if country not in countrys_data:
                 continue
             arrival = datetime.fromtimestamp(
                 countrys_data[country]['arrival_date']
             ) if countrys_data[country]['arrival_date'] != 0 else 'NULL'
             uuid = self.hasher.get_hash(
                 country + str(countrys_data[country]['arrival_date']))
             sql = "INSERT INTO `overall_status`(uuid, cases, total_recoverys, total_deaths, tests_made, arrival, index_case) VALUES ("
             sql += f"'{uuid}', "
             sql += f"{status_data[country]['cases']}, "
             sql += f"{status_data[country]['recoverys']}, "
             sql += f"{status_data[country]['deaths']}, "
             sql += f"{countrys_data[country]['tests']}, "
             sql += f"'{arrival}', " if arrival != "NULL" else f"{arrival}, "
             sql += f"'{countrys_data[country]['index_case']}'"
             sql += ");"
             print(sql)
             mysql["cursor"].execute(sql)
             mysql["conn"].commit()
             mysql["cursor"].execute(
                 f"UPDATE `countries` SET overall_status='{uuid}' WHERE uuid='{self.hasher.get_hash(country + str(countrys_data[country]['long']) + str(countrys_data[country]['lat']))}';"
             )
             mysql["conn"].commit()
     except Exception as e:
         raise e
     finally:
         mysql['conn'].close()
Example #4
0
 def insertStaticData(self):
     data = self.getCurrentStaticData()
     mysql = getConnAndCursor('inserter', 'covid19')
     try:
         print("Inserting static data...")
         for country in data:
             sql = "INSERT INTO `countries`(uuid, country_name, population, cca2, cca3, ccn3, hospibed_per_kp, slug, latitud, longitud) VALUES ("
             sql += f"'{self.hasher.get_hash(country + str(data[country]['long']) + str(data[country]['lat']))}', "
             sql += f"'{country}', "
             sql += f"{data[country]['population']}, "
             sql += f"'{data[country]['cca2']}', "
             sql += f"'{data[country]['cca3']}', "
             sql += f"{data[country]['ccn3']}, "
             sql += f"{data[country]['hospital_bed']}, "
             sql += f"'{data[country]['slug']}', "
             sql += f"{data[country]['long']}, "
             sql += f"{data[country]['lat']}"
             sql += ");"
             print(sql)
             mysql['cursor'].execute(sql)
             mysql['conn'].commit()
     except Exception as e:
         raise e
     finally:
         mysql['conn'].close()
Example #5
0
 def __getDailyCasesUuids(self):
     mysql = getConnAndCursor("inserter", "covid19")
     try:
         mysql["cursor"].execute(f"SELECT uuid FROM `daily_cases`;")
         daily_cases = [row['uuid'] for row in mysql["cursor"].fetchall()]
         return daily_cases
     except Exception as e:
         raise e
     finally:
         mysql['conn'].close()
Example #6
0
 def updateData(self):
     self.updateTests()
     current_static_data = self.getCurrentStaticData()
     mysql = getConnAndCursor("inserter", "covid19")
     if not os.path.exists(self.__todays_wiki_data_path):
         print(f"Creating data_source: {self.__todays_wiki_data_path}...")
         self.createWikipediaSource()
     with open(self.__todays_wiki_data_path) as f:
         wiki_data = json.load(f)
     print("Updating general Status...")
     self.updateGeneralStatus(wiki_data, current_static_data, mysql)
     print("Updating daily cases...")
     self.updateCasesData()
     self.insertDailyCases(current_static_data)
     print("Done")