From b542e7dab5ee3b1f1bf3e513d78440cda3d1289d Mon Sep 17 00:00:00 2001 From: Iziram Date: Thu, 25 Jul 2024 12:00:40 +0200 Subject: [PATCH] API Doc : meilleur tri + optimisations simples --- app/api/assiduites.py | 2 +- app/templates/doc/ScoDoc9API.j2 | 4 ++-- scodoc.py | 13 ------------- tools/create_api_map.py | 24 ++++++++++++++++-------- 4 files changed, 19 insertions(+), 24 deletions(-) diff --git a/app/api/assiduites.py b/app/api/assiduites.py index e31cb0f7..54dd4515 100644 --- a/app/api/assiduites.py +++ b/app/api/assiduites.py @@ -344,7 +344,7 @@ def evaluation_assiduites(evaluation_id): CATEGORY -------- - evaluations + Évaluations """ # Récupération de l'évaluation try: diff --git a/app/templates/doc/ScoDoc9API.j2 b/app/templates/doc/ScoDoc9API.j2 index 102c00e4..032c2280 100644 --- a/app/templates/doc/ScoDoc9API.j2 +++ b/app/templates/doc/ScoDoc9API.j2 @@ -244,13 +244,13 @@ permet de rechercher une entrée à partir du résultat attendu. -(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 diff --git a/scodoc.py b/scodoc.py index 8c198e23..95511399 100755 --- a/scodoc.py +++ b/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", diff --git a/tools/create_api_map.py b/tools/create_api_map.py index a1489e69..2f4531e0 100644 --- a/tools/create_api_map.py +++ b/tools/create_api_map.py @@ -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"