def get_report_by_ccaa(date_in_header, ccaas_today, ccaas_yesterday, ccaas_accumulated_today): tweets = [] for ccaa in filter(lambda x: x in CCAA_POPULATION.keys(), sorted(ccaas_today.keys())): tweets.append(get_territorial_unit_report(ccaa, date_in_header, ccaas_today[ccaa], ccaas_yesterday[ccaa], ccaas_accumulated_today[ccaa])) return tweets
def test_given_no_data_frame_acceded_when_access_then_tabula_used( self, tabula_mock): date = datetime(2020, 5, 5) page = "1" area = MagicMock() report = SpainCovid19MinistryReport(date, page, area) report._get_url = MagicMock() valid_data = { "Col1*": ["value1", "value2*", "value3", "value4*"] + list(CCAA_POPULATION.keys()) } d1 = DataFrame(data={"Col1": [1, 2, 3]}) d2 = DataFrame(data=valid_data) tabula_mock.read_pdf.return_value = [d1, d2] returned_data_frame = report.data_frame tabula_mock.read_pdf.assert_called_once_with( report._get_url.return_value, pages=str(page), area=area, pandas_options={'dtype': str}) report._get_url.assert_called_once_with() self.assertEqual(valid_data["Col1*"], list(returned_data_frame['Col1']))
def test_given_dataframe_when_get_column_data_then_map_returned(self): with patch.object(SpainCovid19MinistryReport, 'data_frame'): report = SpainCovid19MinistryReport(None, None) headers = ["heade1", "header2", "header3"] ccaas = list(map(lambda x: x + "*", CCAA_POPULATION.keys())) data1 = list(map(lambda x: str(x), range(1, 20))) data2 = list(map(lambda x: str(x) + ".000", range(21, 40))) report.data_frame = DataFrame( data={ "Unnamed: 0": headers + ccaas, "Column1": headers + data1, "Column2": headers + data2 }) result = report.get_column_data(2) self.assertEqual(list(CCAA_POPULATION.keys()), list(result.keys())) self.assertEqual(list(range(21000, 40000, 1000)), list(result.values()))
def update_percentage(date, accum_measurement, percentage_measurement): accum = influx.get_stat_accumulated_until_day(accum_measurement, date) data = {} allowed_regions = list(CCAA_POPULATION.keys()) allowed_regions.append(SPAIN) for region in filter(lambda x: x in allowed_regions, accum.keys()): percentage = 100 * accum[region] / (CCAA_POPULATION[region] if region in CCAA_POPULATION else sum(CCAA_POPULATION.values())) data[region] = percentage influx.insert_stats(percentage_measurement, date, data)
def calculate_global_incidence(dict_to_unpack, measurement): population_to_compare = { Measurement.ACCUMULATED_INCIDENCE.value: CCAA_POPULATION, Measurement.PERCENTAGE_ADMITTED.value: CCAA_ADMITTED_BEDS, Measurement.PERCENTAGE_ICU.value: CCAA_ICU_BEDS }[measurement.value] total_cases = 0 population = 0 ccaas = filter(lambda x: x in CCAA_POPULATION.keys(), dict_to_unpack.keys()) for ccaa in ccaas: total_cases += dict_to_unpack[ccaa][measurement] * population_to_compare[ccaa] / 100000 population += population_to_compare[ccaa] return total_cases / population * 100000 if population else 0
def get_global_data(dict_to_unpack): keys = set([key for ccaa in dict_to_unpack for key in dict_to_unpack[ccaa].keys()]) ia_exists = Measurement.ACCUMULATED_INCIDENCE in keys keys.discard(Measurement.ACCUMULATED_INCIDENCE) result = defaultdict(lambda: 0) for key in keys: for ccaa in filter(lambda x: x in CCAA_POPULATION.keys(), dict_to_unpack.keys()): result[key] += dict_to_unpack[ccaa][key] if dict_to_unpack[ccaa][key] else 0 if ia_exists: result[Measurement.ACCUMULATED_INCIDENCE] = calculate_global_incidence(dict_to_unpack, Measurement.ACCUMULATED_INCIDENCE) result[Measurement.PERCENTAGE_ADMITTED] = calculate_global_incidence(dict_to_unpack, Measurement.PERCENTAGE_ADMITTED) result[Measurement.PERCENTAGE_ICU] = calculate_global_incidence(dict_to_unpack, Measurement.PERCENTAGE_ICU) return result
def publish_report(today): today_vaccinations = influx.get_stat_group_by_day(Measurement.VACCINATIONS, today) today_completed_vaccinations = influx.get_stat_group_by_day( Measurement.COMPLETED_VACCINATIONS, today) today_first_doses = influx.get_stat_group_by_day( Measurement.FIRST_DOSE_VACCINATIONS, today) accumulated_vaccinations = influx.get_stat_accumulated_until_day( Measurement.VACCINATIONS, today) accumulated_completed_vaccinations = influx.get_stat_accumulated_until_day( Measurement.COMPLETED_VACCINATIONS, today) accumulated_first_doses = influx.get_stat_accumulated_until_day( Measurement.FIRST_DOSE_VACCINATIONS, today) today_str = today.strftime("%d/%m/%Y") spain_tweet = get_vaccination_report(SPAIN, accumulated_vaccinations, today_vaccinations, accumulated_completed_vaccinations, today_completed_vaccinations, accumulated_first_doses, today_first_doses) interactive_graph_sentence = "➡️ Gráfico Interactivo: https://home.aitormagan.es/d/TeEplNgRk/covid-vacunas-espana?orgId=1" spain_tweet = f"🇪🇸 España - Vacunación a {today_str}:\n\n{spain_tweet}\n\n{interactive_graph_sentence}" graph_url = get_graph_url(datetime(2021, 1, 1), today, graph_path=VACCINE_IMAGE_PATH) last_tweet = twitter.publish_tweet_with_media(spain_tweet, graph_url) ccaa_tweets = [] for ccaa in filter(lambda x: x in CCAA_POPULATION.keys(), sorted(accumulated_vaccinations.keys())): ccaa_tweet = get_vaccination_report( ccaa, accumulated_vaccinations, today_vaccinations, accumulated_completed_vaccinations, today_completed_vaccinations, accumulated_first_doses, today_first_doses) ccaa_tweets.append( f"{ccaa} - Vacunación a {today_str}:\n\n{ccaa_tweet}") twitter.publish_tweets(ccaa_tweets, last_tweet)