Пример #1
0
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)
Пример #2
0
    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)
Пример #3
0
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: