Ejemplo n.º 1
0
    def test_same_data(
        self,
        app,
        use_db,
        remote_data,
        mock_send_telegram_message,
    ):
        CaseDataFactory(
            location__minzdrav_name="Алматы",
            confirmed=11,
            recovered=12,
            fatal=13,
        )
        CaseDataFactory(
            location__minzdrav_name="Астана",
            confirmed=21,
            recovered=22,
            fatal=23,
        )
        CaseDataFactory(
            location__minzdrav_name="Шымкент",
            confirmed=31,
            recovered=32,
            fatal=33,
        )

        update_data()

        cases = CaseData.query.all()

        assert len(cases) == 3

        assert queries.load_current_data() == remote_data

        mock_send_telegram_message.assert_not_called()
Ejemplo n.º 2
0
    def test_with_old_data_diff_date(self, app, use_db, remote_data,
                                     remote_totals,
                                     mock_send_telegram_message):
        CaseDataFactory(
            location__minzdrav_name="Алматы",
            confirmed=1,
            recovered=2,
            fatal=3,
            date=date(2020, 12, 10),
        )
        CaseDataFactory(
            location__minzdrav_name="Астана",
            confirmed=1,
            recovered=2,
            fatal=3,
            date=date(2020, 12, 10),
        )
        CaseDataFactory(
            location__minzdrav_name="Шымкент",
            confirmed=1,
            recovered=2,
            fatal=3,
            date=date(2020, 12, 10),
        )

        update_data()

        cases = CaseData.query.all()

        assert len(cases) == 6

        assert queries.load_current_data() == remote_data
        assert queries.get_totals() == remote_totals

        mock_send_telegram_message.assert_called_once()
Ejemplo n.º 3
0
def update_data():
    try:
        by_region, totals = fetch_data(parser="html.parser")
    except FetchParseError as e:
        log.error(f"Failed to parse remote data {e}")
        send_telegram_message(f"Update failed\n{e}")
        return
    except FetchServerError as e:
        log.error(f"Failed to load remote data {e}")
        return

    existing_data = queries.load_current_data()

    today = get_local_date()

    try:
        diff_data = compare_data(existing_data, by_region)
    except ValueError as e:
        log.error(e)
        return

    if not diff_data:
        return

    services.update_or_create_total_record(record_date=today, **totals)

    locations_mapping = queries.get_locations_minzdrav_name_mapping()

    message = "New data:\n"

    for location_name, record in diff_data.items():
        location_id = locations_mapping[location_name]

        services.update_or_create_record(location_id=location_id,
                                         record_date=today,
                                         **record)

        message += f"\n{location_name}:"
        for key, value in record.items():
            message += f"\n{key} - {value}"

    log.info(message)
    send_telegram_message(message)
Ejemplo n.º 4
0
    def test_no_old_data(
        self,
        app,
        use_db,
        locations,
        remote_data,
        remote_totals,
        mock_send_telegram_message,
    ):
        update_data()

        cases = CaseData.query.all()

        assert len(cases) == 3

        assert queries.load_current_data() == remote_data
        assert queries.get_totals() == remote_totals

        mock_send_telegram_message.assert_called_once()
Ejemplo n.º 5
0
    def test_remote_cases_greater_than_in_db(self, app, use_db,
                                             mock_fetch_data, remote_totals,
                                             mock_send_telegram_message):
        remote_data = {
            "Алматы": {
                "confirmed": 1,
                "recovered": 1,
                "fatal": 1,
            },
            "Астана": {
                "confirmed": 1,
                "recovered": 1,
                "fatal": 1,
            },
            "Шымкент": {
                "confirmed": 1,
                "recovered": 1,
                "fatal": 1,
            },
        }

        mock_fetch_data.return_value = remote_data, remote_totals

        CaseDataFactory(
            location__minzdrav_name="Алматы",
            confirmed=1,
            recovered=1,
            fatal=1,
            date=date(2020, 12, 11),
        )
        CaseDataFactory(
            location__minzdrav_name="Астана",
            confirmed=1,
            recovered=1,
            fatal=1,
            date=date(2020, 12, 11),
        )
        CaseDataFactory(
            location__minzdrav_name="Шымкент",
            confirmed=1,
            recovered=1,
            fatal=1,
            date=date(2020, 12, 11),
        )
        CaseDataFactory(
            location__minzdrav_name="Алматы",
            confirmed=2,
            recovered=2,
            fatal=2,
            date=date(2020, 12, 12),
        )
        CaseDataFactory(
            location__minzdrav_name="Астана",
            confirmed=3,
            recovered=3,
            fatal=3,
            date=date(2020, 12, 12),
        )
        CaseDataFactory(
            location__minzdrav_name="Шымкент",
            confirmed=3,
            recovered=3,
            fatal=3,
            date=date(2020, 12, 12),
        )

        update_data()

        cases = CaseData.query.all()

        assert len(cases) == 3

        assert queries.load_current_data() == remote_data

        mock_send_telegram_message.assert_not_called()