gen api doc : catégories

This commit is contained in:
Iziram 2024-07-24 17:50:16 +02:00
parent c12bc778bb
commit 0b7be5d08a
2 changed files with 37 additions and 6 deletions

View File

@ -341,6 +341,10 @@ def evaluation_assiduites(evaluation_id):
] ]
} }
``` ```
CATEGORY
--------
evaluations
""" """
# Récupération de l'évaluation # Récupération de l'évaluation
try: try:

View File

@ -4,6 +4,7 @@ Script permettant de générer une carte SVG de l'API de ScoDoc
Écrit par Matthias HARTMANN Écrit par Matthias HARTMANN
""" """
import sys
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
import re import re
@ -508,6 +509,14 @@ def analyze_api_routes(app, endpoint_start: str) -> tuple:
if child.query and not href.endswith("-query"): if child.query and not href.endswith("-query"):
href += "-query" href += "-query"
# category
category: str = func.__module__.replace("app.api.", "")
mod_doc: str = sys.modules[func.__module__].__doc__ or ""
mod_doc_dict: dict = _parse_doc_string(mod_doc)
if mod_doc_dict.get("CATEGORY"):
category = mod_doc_dict["CATEGORY"][0].strip()
permissions: str permissions: str
try: try:
permissions: str = ", ".join( permissions: str = ", ".join(
@ -525,6 +534,7 @@ def analyze_api_routes(app, endpoint_start: str) -> tuple:
"permission": permissions, "permission": permissions,
"description": doc_dict.get("", ""), "description": doc_dict.get("", ""),
"params": doc_dict.get("PARAMS", ""), "params": doc_dict.get("PARAMS", ""),
"category": doc_dict.get("CATEGORY", [False])[0] or category,
} }
# On met à jour le token courant pour le prochain segment # On met à jour le token courant pour le prochain segment
@ -544,8 +554,6 @@ def gen_api_map(app, endpoint_start="api."):
puis génère un fichier SVG à partir de cet arbre puis génère un fichier SVG à partir de cet arbre
""" """
print("DEBUG", app.view_functions["apiweb.user_info"].scodoc_permission)
api_map, doctable_lines = analyze_api_routes(app, endpoint_start) api_map, doctable_lines = analyze_api_routes(app, endpoint_start)
# On génère le SVG à partir de l'arbre de Token # On génère le SVG à partir de l'arbre de Token
@ -903,10 +911,29 @@ def doc_route(doctable: dict) -> str:
def gen_api_doc(app, endpoint_start="api."): def gen_api_doc(app, endpoint_start="api."):
"commande gen-api-doc" "commande gen-api-doc"
_, doctable_lines = analyze_api_routes(app, endpoint_start) _, doctable_lines = analyze_api_routes(app, endpoint_start)
mddoc = "\n".join(
doc_route(doctable) mddoc: str = ""
for doctable in sorted(doctable_lines.values(), key=lambda x: x["nom"])
) categories: dict = {}
for value in doctable_lines.values():
category = value["category"]
if category not in categories:
categories[category] = []
categories[category].append(value)
# sort categories by name
categories: dict = dict(sorted(categories.items(), key=lambda x: x[0]))
category: str
routes: list[dict]
for category, routes in categories.items():
# sort routes by name
routes.sort(key=lambda x: x["nom"])
mddoc += f"### API {category.capitalize()}\n\n"
for route in routes:
mddoc += doc_route(route)
mddoc += "\n\n"
fname = "/tmp/apidoc.md" fname = "/tmp/apidoc.md"
with open(fname, "w", encoding="utf-8") as f: with open(fname, "w", encoding="utf-8") as f: