forked from ScoDoc/ScoDoc
migration abs ->assiduites : statistiques
This commit is contained in:
parent
53c9658ce1
commit
21f57aab8f
@ -17,7 +17,7 @@ from app.scodoc.sco_utils import (
|
|||||||
printProgressBar,
|
printProgressBar,
|
||||||
)
|
)
|
||||||
from datetime import time, datetime, date
|
from datetime import time, datetime, date
|
||||||
from json import dump
|
from json import dump, dumps
|
||||||
|
|
||||||
|
|
||||||
class _glob:
|
class _glob:
|
||||||
@ -28,6 +28,64 @@ class _glob:
|
|||||||
CURRENT_ETU: list = []
|
CURRENT_ETU: list = []
|
||||||
MODULES: list[tuple[int, int]] = []
|
MODULES: list[tuple[int, int]] = []
|
||||||
COMPTE: list[int, int] = []
|
COMPTE: list[int, int] = []
|
||||||
|
ERR_ETU: list[int] = []
|
||||||
|
|
||||||
|
|
||||||
|
class _Statistics:
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self.object: dict = {"total": 0}
|
||||||
|
self.year: int = None
|
||||||
|
|
||||||
|
def __set_year(self, year: int):
|
||||||
|
if year not in self.object:
|
||||||
|
self.object[year] = {
|
||||||
|
"etuds_inexistant": [],
|
||||||
|
"abs_invalide": {},
|
||||||
|
}
|
||||||
|
self.year = year
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __add_etud(self, etudid: int):
|
||||||
|
if etudid not in self.object[self.year]["etuds_inexistant"]:
|
||||||
|
self.object[self.year]["etuds_inexistant"].append(etudid)
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __add_abs(self, abs: int, err: str):
|
||||||
|
if abs not in self.object[self.year]["abs_invalide"]:
|
||||||
|
self.object[self.year]["abs_invalide"][abs] = [err]
|
||||||
|
else:
|
||||||
|
self.object[self.year]["abs_invalide"][abs].append(err)
|
||||||
|
|
||||||
|
return self
|
||||||
|
|
||||||
|
def add_problem(self, abs: Absence, err: str):
|
||||||
|
abs.jour: date
|
||||||
|
pivot: date = date(abs.jour.year, 9, 15)
|
||||||
|
year: int = abs.jour.year
|
||||||
|
if pivot < abs.jour:
|
||||||
|
year += 1
|
||||||
|
self.__set_year(year)
|
||||||
|
|
||||||
|
if err == "Etudiant inexistant":
|
||||||
|
self.__add_etud(abs.etudid)
|
||||||
|
else:
|
||||||
|
self.__add_abs(abs.id, err)
|
||||||
|
|
||||||
|
self.object["total"] += 1
|
||||||
|
|
||||||
|
def compute_stats(self) -> dict:
|
||||||
|
stats: dict = {"total": self.object["total"]}
|
||||||
|
for year in self.object:
|
||||||
|
if year == "total":
|
||||||
|
continue
|
||||||
|
stats[year] = {}
|
||||||
|
stats[year]["etuds_inexistant"] = len(self.object[year]["etuds_inexistant"])
|
||||||
|
stats[year]["abs_invalide"] = len(self.object[year]["abs_invalide"])
|
||||||
|
|
||||||
|
return stats
|
||||||
|
|
||||||
|
def export(self, file):
|
||||||
|
dump(self.object, file, indent=2)
|
||||||
|
|
||||||
|
|
||||||
def migrate_abs_to_assiduites(
|
def migrate_abs_to_assiduites(
|
||||||
@ -52,6 +110,7 @@ def migrate_abs_to_assiduites(
|
|||||||
.etudid: relation -> Identite
|
.etudid: relation -> Identite
|
||||||
"""
|
"""
|
||||||
Profiler.clear()
|
Profiler.clear()
|
||||||
|
stats: _Statistics = _Statistics()
|
||||||
|
|
||||||
time_elapsed: Profiler = Profiler("migration")
|
time_elapsed: Profiler = Profiler("migration")
|
||||||
time_elapsed.start()
|
time_elapsed.start()
|
||||||
@ -86,10 +145,10 @@ def migrate_abs_to_assiduites(
|
|||||||
_glob.DUPLICATED = []
|
_glob.DUPLICATED = []
|
||||||
_glob.DUPLICATIONS_ASSIDUITES = {}
|
_glob.DUPLICATIONS_ASSIDUITES = {}
|
||||||
_glob.DUPLICATIONS_JUSTIFICATIFS = {}
|
_glob.DUPLICATIONS_JUSTIFICATIFS = {}
|
||||||
_glob.PROBLEMS = {}
|
|
||||||
_glob.CURRENT_ETU = []
|
_glob.CURRENT_ETU = []
|
||||||
_glob.MODULES = []
|
_glob.MODULES = []
|
||||||
_glob.COMPTE = [0, 0]
|
_glob.COMPTE = [0, 0]
|
||||||
|
_glob.ERR_ETU = []
|
||||||
|
|
||||||
absences_len: int = absences.count()
|
absences_len: int = absences.count()
|
||||||
|
|
||||||
@ -109,9 +168,7 @@ def migrate_abs_to_assiduites(
|
|||||||
db.session.add(generated)
|
db.session.add(generated)
|
||||||
_glob.COMPTE[0] += 1
|
_glob.COMPTE[0] += 1
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if abs.id not in _glob.PROBLEMS:
|
stats.add_problem(abs, e.args[0])
|
||||||
_glob.PROBLEMS[abs.id] = []
|
|
||||||
_glob.PROBLEMS[abs.id].append(e.args[0])
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if abs.estjust:
|
if abs.estjust:
|
||||||
@ -123,9 +180,7 @@ def migrate_abs_to_assiduites(
|
|||||||
_glob.COMPTE[1] += 1
|
_glob.COMPTE[1] += 1
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if abs.id not in _glob.PROBLEMS:
|
stats.add_problem(abs, e.args[0])
|
||||||
_glob.PROBLEMS[abs.id] = []
|
|
||||||
_glob.PROBLEMS[abs.id].append(e.args[0])
|
|
||||||
|
|
||||||
if i % 10 == 0:
|
if i % 10 == 0:
|
||||||
printProgressBar(
|
printProgressBar(
|
||||||
@ -160,27 +215,29 @@ def migrate_abs_to_assiduites(
|
|||||||
"Progression",
|
"Progression",
|
||||||
"effectué",
|
"effectué",
|
||||||
autosize=True,
|
autosize=True,
|
||||||
finish_msg=f"{ProgressBarColors.GREEN}Les absences ont bien été migrées.{ProgressBarColors.RESET}",
|
|
||||||
)
|
)
|
||||||
|
|
||||||
time_elapsed.stop()
|
time_elapsed.stop()
|
||||||
|
|
||||||
|
statistiques: dict = stats.compute_stats()
|
||||||
print(
|
print(
|
||||||
f"{ProgressBarColors.GREEN}La migration a pris {time_elapsed.elapsed():.2f} secondes {ProgressBarColors.RESET}"
|
f"{ProgressBarColors.GREEN}La migration a pris {time_elapsed.elapsed():.2f} secondes {ProgressBarColors.RESET}"
|
||||||
)
|
)
|
||||||
|
|
||||||
print(
|
print(
|
||||||
f"{ProgressBarColors.RED}Il y a eu {len(_glob.PROBLEMS)} absences qui n'ont pas pu être migrée."
|
f"{ProgressBarColors.RED}{statistiques['total']} absences qui n'ont pas pu être migrée."
|
||||||
)
|
)
|
||||||
print(
|
print(
|
||||||
f"Vous retrouverez un fichier json {ProgressBarColors.GREEN}/tmp/scodoc_migration_abs.json{ProgressBarColors.RED} contenant les ids des absences ainsi que les erreurs liées."
|
f"Vous retrouverez un fichier json {ProgressBarColors.GREEN}/tmp/scodoc_migration_abs.json{ProgressBarColors.RED} contenant les problèmes de migrations"
|
||||||
)
|
)
|
||||||
with open("/tmp/scodoc_migration_abs.json", "w", encoding="utf-8") as file:
|
with open("/tmp/scodoc_migration_abs.json", "w", encoding="utf-8") as file:
|
||||||
dump(_glob.PROBLEMS, file)
|
stats.export(file)
|
||||||
|
|
||||||
print(
|
print(
|
||||||
f"{ProgressBarColors.CYAN}{_glob.COMPTE[0]} assiduités et {_glob.COMPTE[1]} justificatifs ont été générés.{ProgressBarColors.RESET}"
|
f"{ProgressBarColors.CYAN}{_glob.COMPTE[0]} assiduités et {_glob.COMPTE[1]} justificatifs ont été générés.{ProgressBarColors.RESET}"
|
||||||
)
|
)
|
||||||
# afficher nombre justificatifs généré par rapport au nombre de justificatifs
|
|
||||||
|
print(dumps(statistiques, indent=2))
|
||||||
|
|
||||||
|
|
||||||
def _from_abs_to_assiduite(
|
def _from_abs_to_assiduite(
|
||||||
@ -205,7 +262,7 @@ def _from_abs_to_assiduite(
|
|||||||
)
|
)
|
||||||
if duplicata is not None:
|
if duplicata is not None:
|
||||||
_glob.DUPLICATED.append(duplicata)
|
_glob.DUPLICATED.append(duplicata)
|
||||||
return "Duplicated"
|
return "Duplicata"
|
||||||
|
|
||||||
desc: str = _abs.description
|
desc: str = _abs.description
|
||||||
entry_date: datetime = _abs.entry_date
|
entry_date: datetime = _abs.entry_date
|
||||||
@ -213,7 +270,7 @@ def _from_abs_to_assiduite(
|
|||||||
if _abs.etudid not in _glob.CURRENT_ETU:
|
if _abs.etudid not in _glob.CURRENT_ETU:
|
||||||
etud: Identite = Identite.query.filter_by(id=_abs.etudid).first()
|
etud: Identite = Identite.query.filter_by(id=_abs.etudid).first()
|
||||||
if etud is None:
|
if etud is None:
|
||||||
return "No Etud"
|
raise Exception("Etudiant inexistant")
|
||||||
_glob.CURRENT_ETU.append(_abs.etudid)
|
_glob.CURRENT_ETU.append(_abs.etudid)
|
||||||
|
|
||||||
moduleimpl_id: int = _abs.moduleimpl_id
|
moduleimpl_id: int = _abs.moduleimpl_id
|
||||||
@ -272,7 +329,7 @@ def _from_abs_to_justificatif(
|
|||||||
if _abs.etudid not in _glob.CURRENT_ETU:
|
if _abs.etudid not in _glob.CURRENT_ETU:
|
||||||
etud: Identite = Identite.query.filter_by(id=_abs.etudid).first()
|
etud: Identite = Identite.query.filter_by(id=_abs.etudid).first()
|
||||||
if etud is None:
|
if etud is None:
|
||||||
return "No Etud"
|
raise Exception("Etudiant inexistant")
|
||||||
_glob.CURRENT_ETU.append(_abs.etudid)
|
_glob.CURRENT_ETU.append(_abs.etudid)
|
||||||
|
|
||||||
retour = Justificatif.fast_create_justificatif(
|
retour = Justificatif.fast_create_justificatif(
|
||||||
|
Loading…
Reference in New Issue
Block a user