diff --git a/app/templates/apidoc.j2 b/app/templates/apidoc.j2
new file mode 100644
index 0000000000000000000000000000000000000000..36d923c94662fdccd65eb94740baaf1874b35e27
--- /dev/null
+++ b/app/templates/apidoc.j2
@@ -0,0 +1,31 @@
+#### **`{{doc.nom}}`**
+
+{% if doc.routes %}
+{% if doc.routes|length == 1 %}
+* **Route:** `{{doc.routes[0]|safe}}`
+{% else %}
+* **Routes:**
+ {% for route in doc.routes %}
+ * `{{route|safe}}`
+ {% endfor %}
+{% endif %}
+{% endif %}
+* **Méthode:** `{{doc.method}}`
+* **Permission:** `{{doc.permission}}`
+{% if doc.params %}
+* **Paramètres:**
+ {% for param in doc.params %}
+ * `{{param.nom|safe}}` : {{param.description|safe}}
+ {% endfor %}
+{% endif %}
+{% if doc.description %}
+* **Description:** {{doc.description|safe}}
+{% endif %}
+{% if doc.data %}
+* **Data:** {{doc.data|safe}}
+{% endif %}
+
+{% if doc.sample %}
+* **Exemple de résultat:** [{{doc.sample.nom}}](./samples/sample_{{doc.sample.href}})
+{% else %}
+{% endif %}
\ No newline at end of file
diff --git a/tools/create_api_map.py b/tools/create_api_map.py
index 771f34f19f4ec329423aea26b93923c2d18fe3cb..56f9dd238f4a8ca2ca3f18723a0123dbc6901ee5 100644
--- a/tools/create_api_map.py
+++ b/tools/create_api_map.py
@@ -8,6 +8,7 @@ import xml.etree.ElementTree as ET
import re
from app.auth.models import Permission
+from flask import render_template
class COLORS:
@@ -870,79 +871,33 @@ def _write_gen_table(table: str, filename: str = "/tmp/api_table.md"):
)
-if __name__ == "__main__":
- # Exemple d'utilisation de la classe Token
- # Exemple simple de création d'un arbre de Token
-
- # root = Token("api")
- # child1 = Token("assiduites", leaf=True)
- # child1.func_name = "assiduites_get"
- # child2 = Token("count")
- # child22 = Token("all")
- # child23 = Token(
- # "query",
- # query={
- # "etat": "<string:etat>",
- # "moduleimpl_id": "<int:moduleimpl_id>",
- # "count": "<int:count>",
- # "formsemestre_id": "<int:formsemestre_id>",
- # },
- # )
- # child3 = Token("justificatifs", "POST")
- # child3.func_name = "justificatifs_post"
-
- # root.add_child(child1)
- # child1.add_child(child2)
- # child2.add_child(child22)
- # child2.add_child(child23)
- # root.add_child(child3)
-
- # group_element = root.to_svg_group()
-
- # generate_svg(group_element, "/tmp/api_map.svg")
- dt: dict = parse_doctable_doc(parse_doctable_doc.__doc__)
- md: str = "POST"
- hf: str = "assiduites-query"
-
- doc: dict = {
- "doctable": dt,
- "method": md,
- "href": hf,
- }
- print(_gen_table([doc]))
-
-
def doc_route(doctable: dict) -> str:
"""Generate markdown doc for a route"""
- doc = f"""
-#### **`{doctable['nom']}`**
+ jinja_obj: dict = {}
+ jinja_obj.update(doctable)
+ jinja_obj["nom"] = doctable["nom"].strip() # on retire les caractères blancs
-"""
- if doctable.get("routes"):
- if len(doctable["routes"]) == 1:
- doc += f"""* ** Route :** `{doctable["routes"][0]}`\n"""
- else:
- doc += "* ** Routes :**\n"
- for route in doctable["routes"]:
- doc += f""" * `{route}`\n"""
- doc += f"""* **Méthode: {doctable['method']}**
-* **Permission: `{doctable.get('permission', '')}`**
-"""
if doctable.get("params"):
+ jinja_obj["params"] = []
for param in doctable["params"]:
frags = param.split(":", maxsplit=1)
if len(frags) == 2:
name, descr = frags
+ jinja_obj["params"].append(
+ {"nom": name.strip(), "description": descr.strip()}
+ )
else:
print(f"Warning: {doctable['nom']} : invalid PARAMS {param}")
- name, descr = param, ""
- doc += f""" * `{name}`: {descr}\n"""
- if doctable.get("data"):
- doc += f"""* **Data:** {doctable['data']}\n"""
if doctable.get("description"):
descr = "\n".join(s for s in doctable["description"])
- doc += f"""* **Description:** {descr}\n"""
- return doc
+ jinja_obj["description"] = descr.strip()
+
+ jinja_obj["sample"] = {
+ "nom": f"{jinja_obj['nom']}.json",
+ "href": f"{jinja_obj['nom'].replace('_', '-')}.json.md",
+ }
+
+ return render_template("apidoc.j2", doc=jinja_obj)
def gen_api_doc(app, endpoint_start="api."):