forked from ScoDoc/ScoDoc
Documentation API: correctifs + génération page complète
This commit is contained in:
parent
b3111769a1
commit
188534819b
@ -105,25 +105,29 @@ def evaluation_notes(evaluation_id: int):
|
|||||||
evaluation_id : l'id de l'évaluation
|
evaluation_id : l'id de l'évaluation
|
||||||
|
|
||||||
Exemple de résultat :
|
Exemple de résultat :
|
||||||
{
|
```json
|
||||||
"11": {
|
{
|
||||||
|
"11": {
|
||||||
"etudid": 11,
|
"etudid": 11,
|
||||||
"evaluation_id": 1,
|
"evaluation_id": 1,
|
||||||
"value": 15.0,
|
"value": 15.0,
|
||||||
|
"note_max" : 20.0,
|
||||||
"comment": "",
|
"comment": "",
|
||||||
"date": "Wed, 20 Apr 2022 06:49:05 GMT",
|
"date": "2024-07-19T19:08:44+02:00",
|
||||||
"uid": 2
|
"uid": 2
|
||||||
},
|
},
|
||||||
"12": {
|
"12": {
|
||||||
"etudid": 12,
|
"etudid": 12,
|
||||||
"evaluation_id": 1,
|
"evaluation_id": 1,
|
||||||
"value": 12.0,
|
"value": "ABS",
|
||||||
|
"note_max" : 20.0,
|
||||||
"comment": "",
|
"comment": "",
|
||||||
"date": "Wed, 20 Apr 2022 06:49:06 GMT",
|
"date": "2024-07-19T19:08:44+02:00",
|
||||||
"uid": 2
|
"uid": 2
|
||||||
},
|
},
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
|
```
|
||||||
"""
|
"""
|
||||||
query = Evaluation.query.filter_by(id=evaluation_id)
|
query = Evaluation.query.filter_by(id=evaluation_id)
|
||||||
if g.scodoc_dept:
|
if g.scodoc_dept:
|
||||||
|
@ -411,11 +411,11 @@ def ue_set_code_apogee(ue_id: int | None = None, code_apogee: str = ""):
|
|||||||
|
|
||||||
Ce changement peut être fait sur formation verrouillée.
|
Ce changement peut être fait sur formation verrouillée.
|
||||||
|
|
||||||
Si ue_id n'est pas spécifié, utilise l'argument oid du POST.
|
Si `ue_id` n'est pas spécifié, utilise l'argument oid du POST.
|
||||||
Si code_apogee n'est pas spécifié ou vide,
|
Si `code_apogee` n'est pas spécifié ou vide,
|
||||||
utilise l'argument value du POST.
|
utilise l'argument value du POST.
|
||||||
|
|
||||||
Le retour est une chaîne (le code enregistré), pas json.
|
Le retour est une chaîne (le code enregistré), pas du json.
|
||||||
"""
|
"""
|
||||||
if ue_id is None:
|
if ue_id is None:
|
||||||
ue_id = request.form.get("oid")
|
ue_id = request.form.get("oid")
|
||||||
@ -468,9 +468,9 @@ def ue_set_code_apogee_rcue(ue_id: int, code_apogee: str = ""):
|
|||||||
Ce changement peut être fait sur formation verrouillée.
|
Ce changement peut être fait sur formation verrouillée.
|
||||||
|
|
||||||
Si code_apogee n'est pas spécifié ou vide,
|
Si code_apogee n'est pas spécifié ou vide,
|
||||||
utilise l'argument value du POST (utilisé par jinplace.js)
|
utilise l'argument value du POST (utilisé par `jinplace.js`)
|
||||||
|
|
||||||
Le retour est une chaîne (le code enregistré), pas json.
|
Le retour est une chaîne (le code enregistré), pas du json.
|
||||||
"""
|
"""
|
||||||
if not code_apogee:
|
if not code_apogee:
|
||||||
code_apogee = request.form.get("value", "")
|
code_apogee = request.form.get("value", "")
|
||||||
@ -522,11 +522,11 @@ def formation_module_set_code_apogee(
|
|||||||
|
|
||||||
Ce changement peut être fait sur formation verrouillée.
|
Ce changement peut être fait sur formation verrouillée.
|
||||||
|
|
||||||
Si module_id n'est pas spécifié, utilise l'argument oid du POST.
|
Si `module_id` n'est pas spécifié, utilise l'argument `oid` du POST.
|
||||||
Si code_apogee n'est pas spécifié ou vide,
|
Si `code_apogee` n'est pas spécifié ou vide,
|
||||||
utilise l'argument value du POST (utilisé par jinplace.js)
|
utilise l'argument value du POST (utilisé par jinplace.js)
|
||||||
|
|
||||||
Le retour est une chaîne (le code enregistré), pas json.
|
Le retour est une chaîne (le code enregistré), pas du json.
|
||||||
"""
|
"""
|
||||||
if module_id is None:
|
if module_id is None:
|
||||||
module_id = request.form.get("oid")
|
module_id = request.form.get("oid")
|
||||||
|
@ -199,7 +199,6 @@ def validation_rcue_record(etudid: int):
|
|||||||
|
|
||||||
DATA
|
DATA
|
||||||
----
|
----
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"code" : str,
|
"code" : str,
|
||||||
|
@ -106,22 +106,26 @@ def moduleimpl_inscriptions(moduleimpl_id: int):
|
|||||||
@scodoc
|
@scodoc
|
||||||
@permission_required(Permission.ScoView)
|
@permission_required(Permission.ScoView)
|
||||||
def moduleimpl_notes(moduleimpl_id: int):
|
def moduleimpl_notes(moduleimpl_id: int):
|
||||||
"""Liste des notes dans ce moduleimpl
|
"""Liste des notes dans ce moduleimpl.
|
||||||
|
|
||||||
Exemple de résultat :
|
Exemple de résultat :
|
||||||
[
|
|
||||||
{
|
```json
|
||||||
"etudid": 17776, // code de l'étudiant
|
[
|
||||||
"nom": "DUPONT",
|
{
|
||||||
"prenom": "Luz",
|
"etudid": 17776, // code de l'étudiant
|
||||||
"38411": 16.0, // Note dans l'évaluation d'id 38411
|
"nom": "DUPONT",
|
||||||
"38410": 15.0,
|
"prenom": "Luz",
|
||||||
"moymod": 15.5, // Moyenne INDICATIVE module
|
"38411": 16.0, // Note dans l'évaluation d'id 38411
|
||||||
"moy_ue_2875": 15.5, // Moyenne vers l'UE 2875
|
"38410": 15.0,
|
||||||
"moy_ue_2876": 15.5, // Moyenne vers l'UE 2876
|
"moymod": 15.5, // Moyenne INDICATIVE module
|
||||||
"moy_ue_2877": 15.5 // Moyenne vers l'UE 2877
|
"moy_ue_2875": 15.5, // Moyenne vers l'UE 2875
|
||||||
},
|
"moy_ue_2876": 15.5, // Moyenne vers l'UE 2876
|
||||||
...
|
"moy_ue_2877": 15.5 // Moyenne vers l'UE 2877
|
||||||
]
|
},
|
||||||
|
...
|
||||||
|
]
|
||||||
|
```
|
||||||
"""
|
"""
|
||||||
modimpl = ModuleImpl.get_modimpl(moduleimpl_id)
|
modimpl = ModuleImpl.get_modimpl(moduleimpl_id)
|
||||||
app.set_sco_dept(modimpl.formsemestre.departement.acronym)
|
app.set_sco_dept(modimpl.formsemestre.departement.acronym)
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
ScoDoc 9 API : accès aux formsemestres
|
ScoDoc 9 API : accès aux formsemestres
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# from flask import g, jsonify, request
|
# from flask import g, jsonify, request
|
||||||
# from flask_login import login_required
|
# from flask_login import login_required
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
{# Template pour la doc mardown d'un point d'entrée de l'API #}
|
||||||
#### **`{{doc.nom}}`**
|
#### **`{{doc.nom}}`**
|
||||||
|
|
||||||
{% if doc.routes %}
|
{% if doc.routes %}
|
||||||
@ -6,7 +7,7 @@
|
|||||||
{% else %}
|
{% else %}
|
||||||
* **Routes:**
|
* **Routes:**
|
||||||
{% for route in doc.routes %}
|
{% for route in doc.routes %}
|
||||||
* `{{route|safe}}`
|
* `{{route|safe}}`
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -15,7 +16,7 @@
|
|||||||
{% if doc.params %}
|
{% if doc.params %}
|
||||||
* **Paramètres:**
|
* **Paramètres:**
|
||||||
{% for param in doc.params %}
|
{% for param in doc.params %}
|
||||||
* `{{param.nom|safe}}` : {{param.description|safe}}
|
* `{{param.nom|safe}}` : {{param.description|safe}}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if doc.description %}
|
{% if doc.description %}
|
@ -547,7 +547,7 @@ def analyze_api_routes(app, endpoint_start: str) -> tuple:
|
|||||||
|
|
||||||
|
|
||||||
# point d'entrée de la commande `flask gen-api-map`
|
# point d'entrée de la commande `flask gen-api-map`
|
||||||
def gen_api_map(app, endpoint_start="api."):
|
def gen_api_map(app, endpoint_start="api.") -> str:
|
||||||
"""
|
"""
|
||||||
Fonction permettant de générer une carte SVG de l'API de ScoDoc
|
Fonction permettant de générer une carte SVG de l'API de ScoDoc
|
||||||
Elle récupère les routes de l'API et les transforme en un arbre de Token
|
Elle récupère les routes de l'API et les transforme en un arbre de Token
|
||||||
@ -566,6 +566,7 @@ def gen_api_map(app, endpoint_start="api."):
|
|||||||
# On génère le tableau à partir de doctable_lines
|
# On génère le tableau à partir de doctable_lines
|
||||||
table = _gen_table(sorted(doctable_lines.values(), key=lambda x: x["nom"]))
|
table = _gen_table(sorted(doctable_lines.values(), key=lambda x: x["nom"]))
|
||||||
_write_gen_table(table)
|
_write_gen_table(table)
|
||||||
|
return table
|
||||||
|
|
||||||
|
|
||||||
def _get_bbox(element, x_offset=0, y_offset=0):
|
def _get_bbox(element, x_offset=0, y_offset=0):
|
||||||
@ -905,7 +906,7 @@ def doc_route(doctable: dict) -> str:
|
|||||||
"href": f"{jinja_obj['nom'].replace('_', '-')}.json.md",
|
"href": f"{jinja_obj['nom'].replace('_', '-')}.json.md",
|
||||||
}
|
}
|
||||||
|
|
||||||
return render_template("apidoc.j2", doc=jinja_obj)
|
return render_template("doc/apidoc.j2", doc=jinja_obj)
|
||||||
|
|
||||||
|
|
||||||
def gen_api_doc(app, endpoint_start="api."):
|
def gen_api_doc(app, endpoint_start="api."):
|
||||||
@ -922,7 +923,7 @@ def gen_api_doc(app, endpoint_start="api."):
|
|||||||
categories[category].append(value)
|
categories[category].append(value)
|
||||||
|
|
||||||
# sort categories by name
|
# sort categories by name
|
||||||
categories: dict = dict(sorted(categories.items(), key=lambda x: x[0]))
|
categories: dict = dict(sorted(categories.items(), key=lambda x: x[0].capitalize()))
|
||||||
|
|
||||||
category: str
|
category: str
|
||||||
routes: list[dict]
|
routes: list[dict]
|
||||||
@ -935,9 +936,12 @@ def gen_api_doc(app, endpoint_start="api."):
|
|||||||
mddoc += doc_route(route)
|
mddoc += doc_route(route)
|
||||||
mddoc += "\n\n"
|
mddoc += "\n\n"
|
||||||
|
|
||||||
fname = "/tmp/apidoc.md"
|
table_api = gen_api_map(app, endpoint_start=endpoint_start)
|
||||||
|
mdpage = render_template("doc/ScoDoc9API.j2", doc_api=mddoc, table_api=table_api)
|
||||||
|
|
||||||
|
fname = "/tmp/ScoDoc9API.md"
|
||||||
with open(fname, "w", encoding="utf-8") as f:
|
with open(fname, "w", encoding="utf-8") as f:
|
||||||
f.write(mddoc)
|
f.write(mdpage)
|
||||||
print(
|
print(
|
||||||
"La documentation API a été générée avec succès. "
|
"La documentation API a été générée avec succès. "
|
||||||
f"Vous pouvez la consulter à l'adresse suivante : {fname}"
|
f"Vous pouvez la consulter à l'adresse suivante : {fname}"
|
||||||
|
Loading…
Reference in New Issue
Block a user