forked from ScoDoc/ScoDoc
API Doc : meilleur tri + optimisations simples
This commit is contained in:
parent
f7a8c1d2db
commit
b542e7dab5
@ -344,7 +344,7 @@ def evaluation_assiduites(evaluation_id):
|
||||
|
||||
CATEGORY
|
||||
--------
|
||||
evaluations
|
||||
Évaluations
|
||||
"""
|
||||
# Récupération de l'évaluation
|
||||
try:
|
||||
|
@ -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
|
||||
|
||||
|
13
scodoc.py
13
scodoc.py
@ -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",
|
||||
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user