1
0
forked from ScoDoc/ScoDoc

API Doc : lien query OK

This commit is contained in:
Iziram 2024-07-25 11:45:26 +02:00
parent 5cefe1a337
commit f7a8c1d2db

View File

@ -503,8 +503,6 @@ def analyze_api_routes(app, endpoint_start: str) -> tuple:
child.method = method
current_token.add_child(child)
# Gestion de doctable
doctable = parse_doctable_doc(func.__doc__ or "")
href = func_name
if child.query and not href.endswith("-query"):
href += "-query"
@ -527,10 +525,10 @@ def analyze_api_routes(app, endpoint_start: str) -> tuple:
if func_name not in doctable_lines:
doctable_lines[func_name] = {
"doctable": doctable,
"method": method,
"nom": func_name,
"href": href,
"query": doc_dict.get("QUERY", "") != "",
"permission": permissions,
"description": doc_dict.get("", ""),
"params": doc_dict.get("PARAMS", ""),
@ -745,23 +743,6 @@ def _get_doc_lines(keyword, doc_string: str) -> list[str]:
return kw_lines
def parse_doc_name(doc_string: str) -> str:
"""
renvoie le nom de la route à partir de la docstring
La doc doit contenir des lignes de la forme:
DOC_ANCHOR
----------
nom_de_la_route
Il ne peut y avoir qu'une seule ligne suivant -----
"""
name_lines: list[str] = _get_doc_lines("DOC_ANCHOR", doc_string)
return name_lines[0] if name_lines else None
def parse_query_doc(doc_string: str) -> dict[str, str]:
"""
renvoie un dictionnaire {param: <type:nom_param>} (ex: {assiduite_id : <int:assiduite_id>})
@ -795,45 +776,28 @@ def parse_query_doc(doc_string: str) -> dict[str, str]:
return query
def parse_doctable_doc(doc_string: str) -> dict[str, str]:
"""
Retourne un dictionnaire représentant les informations du tableau d'api
à partir de la doc (DOC-TABLE)
éléments optionnels:
- `permissions` permissions nécessaires pour accéder à la route (ScoView, AbsChange, ...)
- `href` nom (sans #) de l'ancre dans la page ScoDoc9API
DOC-TABLE
---------
permissions: ScoView
href: une-fonction
"""
doc_lines: list[str] = _get_doc_lines("DOC-TABLE", doc_string)
table = {}
# on parcourt les lignes de la doc
for line in doc_lines:
# On sépare le paramètre et sa valeur
param, value = line.split(":")
# On met à jour le dictionnaire
table[param.strip()] = value.strip()
return table
def _gen_table_line(
nom="", href="", method="", permission="", doctable: dict = None, **kwargs
):
def _gen_table_line(doctable: dict = None):
"""
Génère une ligne de tableau markdown
| nom de la route| methode HTTP| Permission |
"""
lien: str = href
if "href" in doctable:
lien: str = doctable.get("href")
nom, method, permission = (
doctable.get("nom", ""),
doctable.get("method", ""),
doctable.get("permission", ""),
)
if doctable is None:
doctable = {}
lien: str = doctable.get("href", nom)
doctable["query"]: bool
if doctable.get("query") and not lien.endswith("-query"):
lien += "-query"
nav: str = f"[{nom}]({'#'+lien})"
table: str = "|"
@ -867,7 +831,7 @@ def _gen_table(lines: list[dict]) -> str:
"""
table = _gen_table_head()
table += "\n".join([_gen_table_line(**line) for line in lines])
table += "\n".join([_gen_table_line(line) for line in lines])
return table
@ -886,6 +850,10 @@ def doc_route(doctable: dict) -> str:
jinja_obj.update(doctable)
jinja_obj["nom"] = doctable["nom"].strip() # on retire les caractères blancs
jinja_obj["query"]: bool
if jinja_obj["query"]:
jinja_obj["nom"] += "(-query)"
if doctable.get("params"):
jinja_obj["params"] = []
for param in doctable["params"]:
@ -903,7 +871,7 @@ def doc_route(doctable: dict) -> str:
jinja_obj["sample"] = {
"nom": f"{jinja_obj['nom']}.json",
"href": f"{jinja_obj['nom'].replace('_', '-')}.json.md",
"href": f"{jinja_obj['nom']}.json.md",
}
return render_template("doc/apidoc.j2", doc=jinja_obj)