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 CATEGORY
-------- --------
evaluations Évaluations
""" """
# Récupération de l'évaluation # Récupération de l'évaluation
try: try:

View File

@ -244,13 +244,13 @@ permet de rechercher une entrée à partir du résultat attendu.
</div> </div>
</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 ### Tableau récapitulatif des entrées de l'API
{{table_api|safe}} {{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 #### Note sur les exemples d'utilisation

View File

@ -740,19 +740,6 @@ def generate_ens_calendars(): # generate-ens-calendars
edt_ens.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() @app.cli.command()
@click.option( @click.option(
"-e", "-e",

View File

@ -7,6 +7,7 @@ Script permettant de générer une carte SVG de l'API de ScoDoc
import sys import sys
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
import re import re
import unicodedata
from app.auth.models import Permission from app.auth.models import Permission
from flask import render_template from flask import render_template
@ -270,6 +271,13 @@ class Token:
return group 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)"): def _create_svg_element(text, color="rgb(230,156,190)"):
""" """
Fonction générale pour créer un élément SVG simple 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` # 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 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
puis génère un fichier SVG à partir de cet arbre 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 # On génère le SVG à partir de l'arbre de Token
generate_svg(api_map.to_svg_group(), "/tmp/api_map.svg") generate_svg(api_map.to_svg_group(), "/tmp/api_map.svg")
print( print(
@ -879,32 +885,34 @@ 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) api_map, doctable_lines = analyze_api_routes(app, endpoint_start)
mddoc: str = "" mddoc: str = ""
categories: dict = {} categories: dict = {}
for value in doctable_lines.values(): for value in doctable_lines.values():
category = value["category"] category = value["category"].capitalize()
if category not in categories: if category not in categories:
categories[category] = [] categories[category] = []
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].capitalize())) categories: dict = dict(
sorted(categories.items(), key=lambda x: strip_accents(x[0]))
)
category: str category: str
routes: list[dict] routes: list[dict]
for category, routes in categories.items(): for category, routes in categories.items():
# sort routes by name # 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" mddoc += f"### API {category.capitalize()}\n\n"
for route in routes: for route in routes:
mddoc += doc_route(route) mddoc += doc_route(route)
mddoc += "\n\n" 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) mdpage = render_template("doc/ScoDoc9API.j2", doc_api=mddoc, table_api=table_api)
fname = "/tmp/ScoDoc9API.md" fname = "/tmp/ScoDoc9API.md"