示例#1
0
def scrape(platforms=None):  # pragma: no cover

    compte_centres = 0
    compte_centres_avec_dispo = 0
    compte_bloqués = 0
    profiler = Profiling()
    with Manager() as manager:
        with profiler, Pool(POOL_SIZE, **profiler.pool_args()) as pool:
            creneau_q = BulkQueue(manager.Queue(maxsize=100))
            export_process = Process(target=export_by_creneau,
                                     args=(creneau_q, ))
            export_process.start()
            centre_iterator_proportion = ((c, creneau_q)
                                          for c in centre_iterator(
                                              platforms=platforms)
                                          if random() < PARTIAL_SCRAPE)
            centres_cherchés = pool.imap_unordered(
                cherche_prochain_rdv_dans_centre, centre_iterator_proportion,
                1)

            centres_cherchés = get_last_scans(centres_cherchés)
            log_requests_time(centres_cherchés)
            log_platform_requests(centres_cherchés)

        creneau_q.put(EOQ)
        export_process.join()
示例#2
0
def test_get_last_scans():

    center_info1 = CenterInfo("01", "Centre 1", "https://example1.fr")
    center_info2 = CenterInfo("01", "Centre 2", "https://example2.fr")

    center_info2.prochain_rdv = "2021-06-06T00:00:00"

    centres_cherchés = [center_info1, center_info2]

    fake_now = dt.datetime(2021, 5, 5)
    with mock_datetime_now(fake_now):
        centres_cherchés = get_last_scans(centres_cherchés)

    assert centres_cherchés[0].last_scan_with_availabilities == None
    assert centres_cherchés[1].last_scan_with_availabilities == "2021-05-05T00:00:00"
示例#3
0
def scrape(platforms=None):  # pragma: no cover
    compte_centres = 0
    compte_centres_avec_dispo = 0
    compte_bloqués = 0
    profiler = Profiling()
    with profiler, Pool(POOL_SIZE, **profiler.pool_args()) as pool:
        centre_iterator_proportion = (c for c in centre_iterator(
            platforms=platforms) if random() < PARTIAL_SCRAPE)
        centres_cherchés = pool.imap_unordered(
            cherche_prochain_rdv_dans_centre, centre_iterator_proportion, 1)

        centres_cherchés = get_last_scans(centres_cherchés)

        log_platform_requests(centres_cherchés)

        if platforms:
            for platform in platforms:
                compte_centres, compte_centres_avec_dispo, compte_bloqués = export_pool(
                    centres_cherchés, platform)

                logger.info(
                    f"{compte_centres_avec_dispo} centres de vaccination avaient des disponibilités sur {compte_centres} scannés"
                )
        else:
            compte_centres, compte_centres_avec_dispo, compte_bloqués = export_data(
                centres_cherchés, [])
            logger.info(
                f"{compte_centres_avec_dispo} centres de vaccination avaient des disponibilités sur {compte_centres} scannés"
            )
            if compte_centres_avec_dispo == 0:
                logger.error(
                    "Aucune disponibilité n'a été trouvée sur aucun centre, c'est bizarre, alors c'est probablement une erreur"
                )
                exit(code=1)

            if compte_bloqués > 10:
                logger.error(
                    "Notre IP a été bloquée par le CDN Doctolib plus de 10 fois. Pour éviter de pousser des données erronées, on s'arrête ici"
                )
                exit(code=2)
    logger.info(profiler.print_summary())