summaryrefslogtreecommitdiff
path: root/docs/generate_values_doc.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2020-12-01 18:17:04 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2021-02-28 12:15:21 +0100
commit224a569f97e5454d28e0340e28526601f191efa7 (patch)
treeaf310bc80c9a4980d345071ef93a08217280e7c3 /docs/generate_values_doc.py
parent898711cbba90f11997e1ef6480999bef5c870e2d (diff)
downloadIshtar-224a569f97e5454d28e0340e28526601f191efa7.tar.bz2
Ishtar-224a569f97e5454d28e0340e28526601f191efa7.zip
Docs: autogen value documentation
Diffstat (limited to 'docs/generate_values_doc.py')
-rw-r--r--docs/generate_values_doc.py86
1 files changed, 86 insertions, 0 deletions
diff --git a/docs/generate_values_doc.py b/docs/generate_values_doc.py
new file mode 100644
index 000000000..ce1406663
--- /dev/null
+++ b/docs/generate_values_doc.py
@@ -0,0 +1,86 @@
+from django.apps import apps
+from django.conf import settings
+from django.utils.translation import activate
+
+from jinja2 import Template
+import os
+
+
+from ishtar_common.models_common import Address, GeoItem
+
+TEMPLATES = (
+ ("fr/source/_templates/annexe-tech-3-variables-gen.jinja",
+ "fr/source/annexe-tech-3-variables-gen.rst",
+ "fr-fr"),
+)
+
+TPL_MODEL = {
+ "fr-fr": """{% for field_name, desc in fields %}
+- `{{field_name}}` : {{desc}}{% endfor %}"""
+}
+
+EXCLUDED = ["id", "data", "history_creator", "history_m2m", "history_modifier",
+ "imports", "last_modified", "lock_user", "locked", "search_vector",
+ "uuid"]
+EXCLUDED_MODELS = {}
+ONLY_MODELS = {
+ "ishtar_common": ["person", "organization", "author", "document"]
+}
+
+APP_LIST = ["ishtar_common"]
+
+
+def get_values(tpl_model, model, excluded):
+ fields = {}
+ related_fields = {}
+ for field in model._meta.get_fields():
+ if field.name in excluded:
+ continue
+ if getattr(field, "related_model", None):
+ related_fields[field.name] = \
+ "-> " + str(field.related_model._meta.verbose_name)
+ elif hasattr(field, "verbose_name"):
+ fields[field.name] = str(field.verbose_name)
+ fields = sorted(list(fields.items()) + list(related_fields.items()))
+ dct = {
+ "fields": [k for k, __ in fields],
+ "render": tpl_model.render({"fields": fields})
+ }
+ return dct
+
+
+for template_name, template_name_dest, language in TEMPLATES:
+ tpl_model = Template(TPL_MODEL[language])
+ activate(language)
+ render_dct = {'ishtar_common': {}}
+ excluded = EXCLUDED[:]
+
+ address_values = get_values(tpl_model, Address, excluded=excluded)
+ render_dct["ishtar_common"]["address"] = address_values
+ excluded += address_values["fields"]
+
+ geo_values = get_values(tpl_model, GeoItem, excluded=excluded)
+ render_dct["ishtar_common"]["geoitem"] = geo_values
+ excluded += geo_values["fields"]
+
+ for app_name in APP_LIST:
+ app_models = apps.get_app_config(app_name).get_models()
+ for model in list(app_models):
+ model_name = model._meta.model_name
+ if app_name in EXCLUDED_MODELS and \
+ model_name in EXCLUDED_MODELS[app_name]:
+ continue
+ if app_name in ONLY_MODELS and \
+ model_name not in ONLY_MODELS[app_name]:
+ continue
+ render_dct[app_name][model._meta.model_name] = get_values(
+ tpl_model, model, excluded)
+
+ template_name = os.path.abspath(
+ settings.ROOT_PATH + "../docs/" + template_name)
+ template_name_dest = os.path.abspath(
+ settings.ROOT_PATH + "../docs/" + template_name_dest)
+ with open(template_name, "r") as tpl:
+ rendered = Template(tpl.read())
+ with open(template_name_dest, "w") as tpl_dest:
+ tpl_dest.write(rendered.render(render_dct))