def export_centres_stats(center_data=Path( get_conf_outputs().get("last_scans")), stats_path=get_conf_outstats().get("global")): if center_data.exists(): centres_info = get_centres_info(center_data) centres_stats = { "tout_departement": { "disponibles": 0, "total": 0, "creneaux": 0 } } tout_dep_obj = centres_stats["tout_departement"] for dep_code, dep_value in centres_info.items(): nombre_disponibles = len(dep_value["centres_disponibles"]) count = len( dep_value["centres_indisponibles"]) + nombre_disponibles creneaux = sum([ center.get("appointment_count", 0) for center in dep_value["centres_disponibles"] ]) centres_stats[dep_code] = { "disponibles": nombre_disponibles, "total": count, "creneaux": creneaux, } tout_dep_obj["disponibles"] += nombre_disponibles tout_dep_obj["total"] += count tout_dep_obj["creneaux"] += creneaux available_pct = (tout_dep_obj["disponibles"] / max(1, tout_dep_obj["total"])) * 100 logger.info("Found {0}/{1} available centers. ({2}%)".format( tout_dep_obj["disponibles"], tout_dep_obj["total"], round(available_pct, 2), )) with open(Path("data", "output", stats_path), "w") as stats_file: json.dump(centres_stats, stats_file, indent=2) if stats_path != get_conf_outstats().get("global"): return generate_stats_date(centres_stats) generate_stats_dep_date(centres_stats) generate_stats_center_types(centres_info) make_maps(centres_info)
def export(self, creneaux: Iterator[Creneau]): count = 0 for creneau in creneaux: count += 1 for resource in self.resources.values(): resource.on_creneau(creneau) lieux_avec_dispo = len(self.resources["info_centres"].centres_disponibles) lieux_sans_dispo = len(self.resources["info_centres"].centres_indisponibles) lieux_bloques_mais_dispo = len(self.resources["info_centres"].centres_bloques_mais_disponibles) if lieux_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) logger.info( f"{lieux_avec_dispo} centres ont des disponibilités sur {lieux_avec_dispo+lieux_sans_dispo} centre scannés (+{lieux_bloques_mais_dispo} bloqués)" ) logger.info(f"{count} créneaux dans {lieux_avec_dispo} centres") print("\n") if lieux_bloques_mais_dispo > 0: logger.info(f"{lieux_bloques_mais_dispo} centres sont bloqués mais ont des disponibilités : ") for centre_bloque in self.resources["info_centres"].centres_bloques_mais_disponibles: logger.info(f"Le centre {centre_bloque} est bloqué mais a des disponibilités.") for key, resource in self.resources.items(): outfile_path = self.outpath_format.format(key) os.makedirs(os.path.dirname(outfile_path), exist_ok=True) with open(outfile_path, "w") as outfile: logger.debug(f"Writing file {outfile_path}") json.dump(resource.asdict(), outfile, indent=2) with open(get_conf_outputs().get("data_gouv"), "w") as outfile: logger.debug(f'Writing file {get_conf_outputs().get("data_gouv")}') json.dump(self.resources["info_centres"].opendata, outfile, indent=2)
python3 -m stats_generation.chronodoses \ --input="some/file.json" # Optional (should follow the same structure as data/output/info_centres.json.)\ --output="put/it/here.json" # Optional \ --national # Optional: Whether or not to add a summary national statistic. ``` """ import argparse import json import sys from pathlib import Path from typing import Dict, List from utils.vmd_config import get_conf_outputs, get_conf_outstats _default_input = Path(get_conf_outputs().get("last_scans")) _default_output = Path(get_conf_outstats().get("chronodoses")) def count_departments_chronodoses(data: dict) -> Dict[str, int]: return { department_id: _department_chronodoses(department_data) for department_id, department_data in data.items() } def _national_doses(per_department: Dict[str, int]) -> dict: return sum(per_department.values()) def _department_chronodoses(department_data: dict) -> int: