def update_database(today): pcrs_report = SpainCovid19MinistryReport(today, 1) deaths_report = SpainCovid19MinistryReport( today, 5, (142, 490, 142 + 343, 490 + 265)) hospital_report = SpainCovid19MinistryReport( today, 3, (169, 77, 169 + 280, 77 + 707)) try: accumulated_pcrs_today = pcrs_report.get_column_data(1) except Exception: # With some PDFs, tabula-pdf auto table detection fails. # We need to specify a custom area. pcrs_report = SpainCovid19MinistryReport( today, 1, (239, 56, 239 + 283, 56 + 756)) accumulated_pcrs_today = pcrs_report.get_column_data(1) accumulated_deaths_today = deaths_report.get_column_data(1) today_percentage_admitted = hospital_report.get_column_data(3, cast=float) today_percentage_icu = hospital_report.get_column_data(6, cast=float) today_pcrs_last_24h = pcrs_report.get_column_data(2) accumulated_incidence = pcrs_report.get_column_data(3, 1, float) update_stat(Measurement.PCRS, accumulated_pcrs_today, today) update_stat(Measurement.DEATHS, accumulated_deaths_today, today) influx.insert_stats(Measurement.PCRS_LAST_24H, today, today_pcrs_last_24h) influx.insert_stats(Measurement.ACCUMULATED_INCIDENCE, today, accumulated_incidence) influx.insert_stats(Measurement.PERCENTAGE_ADMITTED, today, today_percentage_admitted) influx.insert_stats(Measurement.PERCENTAGE_ICU, today, today_percentage_icu)
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_cases_pdf_when_get_url_then_cases_pdf_returned(self): date = datetime(2020, 5, 5) report = SpainCovid19MinistryReport(date, 1) pdf_id = 14 report.get_cases_pdf_id_for_date = MagicMock(return_value=pdf_id) self.assertEqual( "https://www.mscbs.gob.es/en/profesionales/saludPublica/ccayes/alertasActual/nCov-China/" f"documentos/Actualizacion_{pdf_id}_COVID-19.pdf", report._get_url())
def _get_hospitals_report(date): for height in [160, 150, 170, 135, 200]: try: hospital_report = SpainCovid19MinistryReport( date, 3, (height, 33, height + 260, 33 + 790)) hospital_report.get_column_data(7, cast=float) return hospital_report except HTTPError as e: raise e except Exception as e: pass raise Exception("Impossible to find an appropriate ")
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 test_given_14_5_when_get_id_then_105_returned(self): self.assertEqual( SpainCovid19MinistryReport.get_cases_pdf_id_for_date( datetime(2020, 5, 14)), 105)
def test_given_9_12_and_7_12_and_8_12_without_report_when_get_id_then_266_returned( self): self.assertEqual( SpainCovid19MinistryReport.get_cases_pdf_id_for_date( datetime(2020, 12, 9)), 266)
def test_given_13_7_when_get_id_then_161_returned(self): self.assertEqual( SpainCovid19MinistryReport.get_cases_pdf_id_for_date( datetime(2020, 7, 13)), 161)