예제 #1
0
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)
예제 #2
0
    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']))
예제 #3
0
    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())
예제 #4
0
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 ")
예제 #5
0
    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()))
예제 #6
0
 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)
예제 #7
0
 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)
예제 #8
0
 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)