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
|
CATEGORY
|
||||||
--------
|
--------
|
||||||
evaluations
|
Évaluations
|
||||||
"""
|
"""
|
||||||
# Récupération de l'évaluation
|
# Récupération de l'évaluation
|
||||||
try:
|
try:
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
13
scodoc.py
13
scodoc.py
@ -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",
|
||||||
|
@ -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"
|
||||||
|
Loading…
Reference in New Issue
Block a user