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()
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"
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())