Assiduites : API - changement retour batch

This commit is contained in:
iziram 2023-07-27 18:00:40 +02:00
parent 3aa5629d1b
commit f3ceaff307
4 changed files with 60 additions and 51 deletions

View File

@ -442,14 +442,14 @@ def assiduite_create(etudid: int = None, nip=None, ine=None):
if not isinstance(create_list, list): if not isinstance(create_list, list):
return json_error(404, "Le contenu envoyé n'est pas une liste") return json_error(404, "Le contenu envoyé n'est pas une liste")
errors: dict[int, str] = {} errors: list = []
success: dict[int, object] = {} success: list = []
for i, data in enumerate(create_list): for i, data in enumerate(create_list):
code, obj = _create_singular(data, etud) code, obj = _create_singular(data, etud)
if code == 404: if code == 404:
errors[i] = obj errors.append({"indice": i, "message": obj})
else: else:
success[i] = obj success.append({"indice": i, "message": obj})
scass.simple_invalidate_cache(data, etud.id) scass.simple_invalidate_cache(data, etud.id)
db.session.commit() db.session.commit()
@ -493,19 +493,19 @@ def assiduites_create():
if not isinstance(create_list, list): if not isinstance(create_list, list):
return json_error(404, "Le contenu envoyé n'est pas une liste") return json_error(404, "Le contenu envoyé n'est pas une liste")
errors: dict[int, str] = {} errors: list = []
success: dict[int, object] = {} success: list = []
for i, data in enumerate(create_list): for i, data in enumerate(create_list):
etud: Identite = Identite.query.filter_by(id=data["etudid"]).first() etud: Identite = Identite.query.filter_by(id=data["etudid"]).first()
if etud is None: if etud is None:
errors[i] = "Cet étudiant n'existe pas." errors.append({"indice": i, "message": "Cet étudiant n'existe pas."})
continue continue
code, obj = _create_singular(data, etud) code, obj = _create_singular(data, etud)
if code == 404: if code == 404:
errors[i] = obj errors.append({"indice": i, "message": obj})
else: else:
success[i] = obj success.append({"indice": i, "message": obj})
scass.simple_invalidate_cache(data) scass.simple_invalidate_cache(data)
return {"errors": errors, "success": success} return {"errors": errors, "success": success}
@ -607,14 +607,14 @@ def assiduite_delete():
if not isinstance(assiduites_list, list): if not isinstance(assiduites_list, list):
return json_error(404, "Le contenu envoyé n'est pas une liste") return json_error(404, "Le contenu envoyé n'est pas une liste")
output = {"errors": {}, "success": {}} output = {"errors": [], "success": []}
for i, ass in enumerate(assiduites_list): for i, ass in enumerate(assiduites_list):
code, msg = _delete_singular(ass, db) code, msg = _delete_singular(ass, db)
if code == 404: if code == 404:
output["errors"][f"{i}"] = msg output["errors"].append({"indice": i, "message": msg})
else: else:
output["success"][f"{i}"] = {"OK": True} output["success"].append({"indice": i, "message": "OK"})
db.session.commit() db.session.commit()
return output return output
@ -743,19 +743,28 @@ def assiduites_edit():
if not isinstance(edit_list, list): if not isinstance(edit_list, list):
return json_error(404, "Le contenu envoyé n'est pas une liste") return json_error(404, "Le contenu envoyé n'est pas une liste")
errors: dict[int, str] = {} errors: list[dict] = []
success: dict[int, object] = {} success: list[dict] = []
for i, data in enumerate(edit_list): for i, data in enumerate(edit_list):
assi: Identite = Assiduite.query.filter_by(id=data["assiduite_id"]).first() assi: Identite = Assiduite.query.filter_by(id=data["assiduite_id"]).first()
if assi is None: if assi is None:
errors[i] = f"assiduité {data['assiduite_id']} n'existe pas." errors.append(
{
"indice": i,
"message": f"assiduité {data['assiduite_id']} n'existe pas.",
}
)
continue continue
code, obj = _edit_singular(assi, data) code, obj = _edit_singular(assi, data)
obj_retour = {
"indice": i,
"message": obj,
}
if code == 404: if code == 404:
errors[i] = obj errors.append(obj_retour)
else: else:
success[i] = obj success.append(obj_retour)
db.session.commit() db.session.commit()

View File

@ -154,7 +154,7 @@ def justificatifs_dept(dept_id: int = None, with_query: bool = False):
@login_required @login_required
@as_json @as_json
@permission_required(Permission.ScoAbsChange) @permission_required(Permission.ScoAbsChange)
def justif_create(etudid: int = None, nip = None, ine = None): def justif_create(etudid: int = None, nip=None, ine=None):
""" """
Création d'un justificatif pour l'étudiant (etudid) Création d'un justificatif pour l'étudiant (etudid)
La requête doit avoir un content type "application/json": La requête doit avoir un content type "application/json":
@ -187,14 +187,14 @@ def justif_create(etudid: int = None, nip = None, ine = None):
if not isinstance(create_list, list): if not isinstance(create_list, list):
return json_error(404, "Le contenu envoyé n'est pas une liste") return json_error(404, "Le contenu envoyé n'est pas une liste")
errors: dict[int, str] = {} errors: list = []
success: dict[int, object] = {} success: list = []
for i, data in enumerate(create_list): for i, data in enumerate(create_list):
code, obj = _create_singular(data, etud) code, obj = _create_singular(data, etud)
if code == 404: if code == 404:
errors[i] = obj errors.append({"indice": i, "message": obj})
else: else:
success[i] = obj success.append({"indice": i, "message": obj})
scass.simple_invalidate_cache(data, etud.id) scass.simple_invalidate_cache(data, etud.id)
compute_assiduites_justified(Justificatif.query.filter_by(etudid=etudid), True) compute_assiduites_justified(Justificatif.query.filter_by(etudid=etudid), True)
return {"errors": errors, "success": success} return {"errors": errors, "success": success}
@ -383,14 +383,14 @@ def justif_delete():
if not isinstance(justificatifs_list, list): if not isinstance(justificatifs_list, list):
return json_error(404, "Le contenu envoyé n'est pas une liste") return json_error(404, "Le contenu envoyé n'est pas une liste")
output = {"errors": {}, "success": {}} output = {"errors": [], "success": []}
for i, ass in enumerate(justificatifs_list): for i, ass in enumerate(justificatifs_list):
code, msg = _delete_singular(ass, db) code, msg = _delete_singular(ass, db)
if code == 404: if code == 404:
output["errors"][f"{i}"] = msg output["errors"].append({"indice": i, "message": msg})
else: else:
output["success"][f"{i}"] = {"OK": True} output["success"].append({"indice": i, "message": "OK"})
db.session.commit() db.session.commit()

View File

@ -35,7 +35,7 @@ ASSIDUITES_FIELDS = {
} }
CREATE_FIELD = {"assiduite_id": int} CREATE_FIELD = {"assiduite_id": int}
BATCH_FIELD = {"errors": dict, "success": dict} BATCH_FIELD = {"errors": list, "success": list}
COUNT_FIELDS = {"compte": int, "journee": int, "demi": int, "heure": float} COUNT_FIELDS = {"compte": int, "journee": int, "demi": int, "heure": float}
@ -262,14 +262,14 @@ def test_route_create(api_admin_headers):
check_fields(res, BATCH_FIELD) check_fields(res, BATCH_FIELD)
assert len(res["success"]) == 1 assert len(res["success"]) == 1
TO_REMOVE.append(res["success"]["0"]["assiduite_id"]) TO_REMOVE.append(res["success"][0]["message"]["assiduite_id"])
data2 = create_data("absent", "02", MODULE, "desc") data2 = create_data("absent", "02", MODULE, "desc")
res = POST_JSON(f"/assiduite/{ETUDID}/create", [data2], api_admin_headers) res = POST_JSON(f"/assiduite/{ETUDID}/create", [data2], api_admin_headers)
check_fields(res, BATCH_FIELD) check_fields(res, BATCH_FIELD)
assert len(res["success"]) == 1 assert len(res["success"]) == 1
TO_REMOVE.append(res["success"]["0"]["assiduite_id"]) TO_REMOVE.append(res["success"][0]["message"]["assiduite_id"])
# Mauvais fonctionnement # Mauvais fonctionnement
check_failure_post(f"/assiduite/{FAUX}/create", api_admin_headers, [data]) check_failure_post(f"/assiduite/{FAUX}/create", api_admin_headers, [data])
@ -278,7 +278,7 @@ def test_route_create(api_admin_headers):
check_fields(res, BATCH_FIELD) check_fields(res, BATCH_FIELD)
assert len(res["errors"]) == 1 assert len(res["errors"]) == 1
assert ( assert (
res["errors"]["0"] res["errors"][0]["message"]
== "Duplication des assiduités (la période rentrée rentre en conflit avec une assiduité enregistrée)" == "Duplication des assiduités (la période rentrée rentre en conflit avec une assiduité enregistrée)"
) )
@ -289,7 +289,7 @@ def test_route_create(api_admin_headers):
) )
check_fields(res, BATCH_FIELD) check_fields(res, BATCH_FIELD)
assert len(res["errors"]) == 1 assert len(res["errors"]) == 1
assert res["errors"]["0"] == "param 'moduleimpl_id': invalide" assert res["errors"][0]["message"] == "param 'moduleimpl_id': invalide"
# -== Multiple ==- # -== Multiple ==-
@ -304,8 +304,8 @@ def test_route_create(api_admin_headers):
res = POST_JSON(f"/assiduite/{ETUDID}/create", data, api_admin_headers) res = POST_JSON(f"/assiduite/{ETUDID}/create", data, api_admin_headers)
check_fields(res, BATCH_FIELD) check_fields(res, BATCH_FIELD)
for dat in res["success"]: for dat in res["success"]:
check_fields(res["success"][dat], CREATE_FIELD) check_fields(dat["message"], CREATE_FIELD)
TO_REMOVE.append(res["success"][dat]["assiduite_id"]) TO_REMOVE.append(dat["message"]["assiduite_id"])
# Mauvais Fonctionnement # Mauvais Fonctionnement
@ -321,13 +321,13 @@ def test_route_create(api_admin_headers):
assert len(res["errors"]) == 4 assert len(res["errors"]) == 4
assert ( assert (
res["errors"]["0"] res["errors"][0]["message"]
== "Duplication des assiduités (la période rentrée rentre en conflit avec une assiduité enregistrée)" == "Duplication des assiduités (la période rentrée rentre en conflit avec une assiduité enregistrée)"
) )
assert res["errors"]["1"] == "param 'moduleimpl_id': invalide" assert res["errors"][1]["message"] == "param 'moduleimpl_id': invalide"
assert res["errors"]["2"] == "param 'etat': invalide" assert res["errors"][2]["message"] == "param 'etat': invalide"
assert ( assert (
res["errors"]["3"] res["errors"][3]["message"]
== "param 'date_debut': format invalide, param 'date_fin': format invalide" == "param 'date_debut': format invalide, param 'date_fin': format invalide"
) )
@ -367,7 +367,7 @@ def test_route_delete(api_admin_headers):
res = POST_JSON("/assiduite/delete", [data], api_admin_headers) res = POST_JSON("/assiduite/delete", [data], api_admin_headers)
check_fields(res, BATCH_FIELD) check_fields(res, BATCH_FIELD)
for dat in res["success"]: for dat in res["success"]:
assert res["success"][dat] == {"OK": True} assert dat["message"] == "OK"
# Mauvais fonctionnement # Mauvais fonctionnement
res = POST_JSON("/assiduite/delete", [data], api_admin_headers) res = POST_JSON("/assiduite/delete", [data], api_admin_headers)
@ -383,7 +383,7 @@ def test_route_delete(api_admin_headers):
res = POST_JSON("/assiduite/delete", data, api_admin_headers) res = POST_JSON("/assiduite/delete", data, api_admin_headers)
check_fields(res, BATCH_FIELD) check_fields(res, BATCH_FIELD)
for dat in res["success"]: for dat in res["success"]:
assert res["success"][dat] == {"OK": True} assert dat["message"] == "OK"
# Mauvais Fonctionnement # Mauvais Fonctionnement
@ -397,4 +397,4 @@ def test_route_delete(api_admin_headers):
check_fields(res, BATCH_FIELD) check_fields(res, BATCH_FIELD)
assert len(res["errors"]) == 3 assert len(res["errors"]) == 3
assert all([res["errors"][i] == "Assiduite non existante" for i in res["errors"]]) assert all(i["message"] == "Assiduite non existante" for i in res["errors"])

View File

@ -35,7 +35,7 @@ JUSTIFICATIFS_FIELDS = {
} }
CREATE_FIELD = {"justif_id": int, "couverture": list} CREATE_FIELD = {"justif_id": int, "couverture": list}
BATCH_FIELD = {"errors": dict, "success": dict} BATCH_FIELD = {"errors": list, "success": list}
TO_REMOVE = [] TO_REMOVE = []
@ -172,14 +172,14 @@ def test_route_create(api_admin_headers):
check_fields(res, BATCH_FIELD) check_fields(res, BATCH_FIELD)
assert len(res["success"]) == 1 assert len(res["success"]) == 1
TO_REMOVE.append(res["success"]["0"]["justif_id"]) TO_REMOVE.append(res["success"][0]["message"]["justif_id"])
data2 = create_data("modifie", "02", "raison") data2 = create_data("modifie", "02", "raison")
res = POST_JSON(f"/justificatif/{ETUDID}/create", [data2], api_admin_headers) res = POST_JSON(f"/justificatif/{ETUDID}/create", [data2], api_admin_headers)
check_fields(res, BATCH_FIELD) check_fields(res, BATCH_FIELD)
assert len(res["success"]) == 1 assert len(res["success"]) == 1
TO_REMOVE.append(res["success"]["0"]["justif_id"]) TO_REMOVE.append(res["success"][0]["message"]["justif_id"])
# Mauvais fonctionnement # Mauvais fonctionnement
check_failure_post(f"/justificatif/{FAUX}/create", api_admin_headers, [data]) check_failure_post(f"/justificatif/{FAUX}/create", api_admin_headers, [data])
@ -191,7 +191,7 @@ def test_route_create(api_admin_headers):
) )
check_fields(res, BATCH_FIELD) check_fields(res, BATCH_FIELD)
assert len(res["errors"]) == 1 assert len(res["errors"]) == 1
assert res["errors"]["0"] == "param 'etat': invalide" assert res["errors"][0]["message"] == "param 'etat': invalide"
# -== Multiple ==- # -== Multiple ==-
@ -206,8 +206,8 @@ def test_route_create(api_admin_headers):
res = POST_JSON(f"/justificatif/{ETUDID}/create", data, api_admin_headers) res = POST_JSON(f"/justificatif/{ETUDID}/create", data, api_admin_headers)
check_fields(res, BATCH_FIELD) check_fields(res, BATCH_FIELD)
for dat in res["success"]: for dat in res["success"]:
check_fields(res["success"][dat], CREATE_FIELD) check_fields(dat["message"], CREATE_FIELD)
TO_REMOVE.append(res["success"][dat]["justif_id"]) TO_REMOVE.append(dat["message"]["justif_id"])
# Mauvais Fonctionnement # Mauvais Fonctionnement
@ -221,10 +221,10 @@ def test_route_create(api_admin_headers):
check_fields(res, BATCH_FIELD) check_fields(res, BATCH_FIELD)
assert len(res["errors"]) == 3 assert len(res["errors"]) == 3
assert res["errors"]["0"] == "param 'etat': manquant" assert res["errors"][0]["message"] == "param 'etat': manquant"
assert res["errors"]["1"] == "param 'etat': invalide" assert res["errors"][1]["message"] == "param 'etat': invalide"
assert ( assert (
res["errors"]["2"] res["errors"][2]["message"]
== "param 'date_debut': format invalide, param 'date_fin': format invalide" == "param 'date_debut': format invalide, param 'date_fin': format invalide"
) )
@ -263,7 +263,7 @@ def test_route_delete(api_admin_headers):
res = POST_JSON("/justificatif/delete", [data], api_admin_headers) res = POST_JSON("/justificatif/delete", [data], api_admin_headers)
check_fields(res, BATCH_FIELD) check_fields(res, BATCH_FIELD)
for dat in res["success"]: for dat in res["success"]:
assert res["success"][dat] == {"OK": True} assert dat["message"] == "OK"
# Mauvais fonctionnement # Mauvais fonctionnement
res = POST_JSON("/justificatif/delete", [data], api_admin_headers) res = POST_JSON("/justificatif/delete", [data], api_admin_headers)
@ -279,7 +279,7 @@ def test_route_delete(api_admin_headers):
res = POST_JSON("/justificatif/delete", data, api_admin_headers) res = POST_JSON("/justificatif/delete", data, api_admin_headers)
check_fields(res, BATCH_FIELD) check_fields(res, BATCH_FIELD)
for dat in res["success"]: for dat in res["success"]:
assert res["success"][dat] == {"OK": True} assert dat["message"] == "OK"
# Mauvais Fonctionnement # Mauvais Fonctionnement
@ -293,7 +293,7 @@ def test_route_delete(api_admin_headers):
check_fields(res, BATCH_FIELD) check_fields(res, BATCH_FIELD)
assert len(res["errors"]) == 3 assert len(res["errors"]) == 3
assert all([res["errors"][i] == "Justificatif non existant" for i in res["errors"]]) assert all(i["message"] == "Justificatif non existant" for i in res["errors"])
# Gestion de l'archivage # Gestion de l'archivage