yunohost/doc/generate_resource_doc.py
2023-02-15 21:37:05 +00:00

72 lines
1.7 KiB
Python

import ast
import datetime
import subprocess
version = (open("../debian/changelog").readlines()[0].split()[1].strip("()"),)
today = datetime.datetime.now().strftime("%d/%m/%Y")
def get_current_commit():
p = subprocess.Popen(
"git rev-parse --verify HEAD",
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
stdout, stderr = p.communicate()
current_commit = stdout.strip().decode("utf-8")
return current_commit
current_commit = get_current_commit()
print(
f"""---
title: App resources
template: docs
taxonomy:
category: docs
routes:
default: '/packaging_apps_resources'
---
Doc auto-generated by [this script](https://github.com/YunoHost/yunohost/blob/{current_commit}/doc/generate_resource_doc.py) on {today} (YunoHost version {version})
"""
)
fname = "../src/utils/resources.py"
content = open(fname).read()
# NB: This magic is because we want to be able to run this script outside of a YunoHost context,
# in which we cant really 'import' the file because it will trigger a bunch of moulinette/yunohost imports...
tree = ast.parse(content)
ResourceClasses = [
c
for c in tree.body
if isinstance(c, ast.ClassDef) and c.bases and c.bases[0].id == "AppResource"
]
ResourceDocString = {}
for c in ResourceClasses:
assert c.body[1].targets[0].id == "type"
resource_id = c.body[1].value.value
docstring = ast.get_docstring(c)
ResourceDocString[resource_id] = docstring
for resource_id, doc in sorted(ResourceDocString.items()):
doc = doc.replace("\n ", "\n")
print("----------------")
print("")
print(f"## {resource_id.replace('_', ' ').title()}")
print("")
print(doc)
print("")