API Doc : meilleur tri + optimisations simples

This commit is contained in:
Iziram 2024-07-25 12:00:40 +02:00
parent f7a8c1d2db
commit b542e7dab5
4 changed files with 19 additions and 24 deletions

View File

@ -344,7 +344,7 @@ def evaluation_assiduites(evaluation_id):
CATEGORY
--------
evaluations
Évaluations
"""
# Récupération de l'évaluation
try:

View File

@ -244,13 +244,13 @@ permet de rechercher une entrée à partir du résultat attendu.
</div>
</div>
(carte générée avec `flask gen-api-map -e "api."`)
(carte générée avec `flask gen-api-doc`)
### Tableau récapitulatif des entrées de l'API
{{table_api|safe}}
(table générée avec `flask gen-api-map -e "api."`)
(table générée avec `flask gen-api-doc`)
#### Note sur les exemples d'utilisation

View File

@ -740,19 +740,6 @@ def generate_ens_calendars(): # generate-ens-calendars
edt_ens.generate_ens_calendars()
@app.cli.command()
@click.option(
"-e",
"--endpoint",
default="api",
help="Endpoint à partir duquel générer la carte des routes",
)
@with_appcontext
def gen_api_map(endpoint): # gen-api-map
"""Génère la carte des routes de l'API."""
tools.gen_api_map(app, endpoint_start=endpoint)
@app.cli.command()
@click.option(
"-e",

View File

@ -7,6 +7,7 @@ Script permettant de générer une carte SVG de l'API de ScoDoc
import sys
import xml.etree.ElementTree as ET
import re
import unicodedata
from app.auth.models import Permission
from flask import render_template
@ -270,6 +271,13 @@ class Token:
return group
def strip_accents(s):
"""Retourne la chaîne s séparant les accents et les caractères de base."""
return "".join(
c for c in unicodedata.normalize("NFD", s) if unicodedata.category(c) != "Mn"
)
def _create_svg_element(text, color="rgb(230,156,190)"):
"""
Fonction générale pour créer un élément SVG simple
@ -545,15 +553,13 @@ def analyze_api_routes(app, endpoint_start: str) -> tuple:
# point d'entrée de la commande `flask gen-api-map`
def gen_api_map(app, endpoint_start="api.") -> str:
def gen_api_map(api_map: Token, doctable_lines: dict[str, dict]) -> str:
"""
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
puis génère un fichier SVG à partir de cet arbre
"""
api_map, doctable_lines = analyze_api_routes(app, endpoint_start)
# On génère le SVG à partir de l'arbre de Token
generate_svg(api_map.to_svg_group(), "/tmp/api_map.svg")
print(
@ -879,32 +885,34 @@ def doc_route(doctable: dict) -> str:
def gen_api_doc(app, endpoint_start="api."):
"commande gen-api-doc"
_, doctable_lines = analyze_api_routes(app, endpoint_start)
api_map, doctable_lines = analyze_api_routes(app, endpoint_start)
mddoc: str = ""
categories: dict = {}
for value in doctable_lines.values():
category = value["category"]
category = value["category"].capitalize()
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].capitalize()))
categories: dict = dict(
sorted(categories.items(), key=lambda x: strip_accents(x[0]))
)
category: str
routes: list[dict]
for category, routes in categories.items():
# sort routes by name
routes.sort(key=lambda x: x["nom"])
routes.sort(key=lambda x: strip_accents(x["nom"]))
mddoc += f"### API {category.capitalize()}\n\n"
for route in routes:
mddoc += doc_route(route)
mddoc += "\n\n"
table_api = gen_api_map(app, endpoint_start=endpoint_start)
table_api = gen_api_map(api_map, doctable_lines)
mdpage = render_template("doc/ScoDoc9API.j2", doc_api=mddoc, table_api=table_api)
fname = "/tmp/ScoDoc9API.md"