diff options
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 |
commit | 3c6d4cca5fdb40850359c5a4cdf1f17fd5bd7473 (patch) | |
tree | af310bc80c9a4980d345071ef93a08217280e7c3 /docs/generate_values_doc.py | |
parent | 342ea7e679a1609a810f216549e403d2563d27a1 (diff) | |
download | Ishtar-3c6d4cca5fdb40850359c5a4cdf1f17fd5bd7473.tar.bz2 Ishtar-3c6d4cca5fdb40850359c5a4cdf1f17fd5bd7473.zip |
Docs: autogen value documentation
Diffstat (limited to 'docs/generate_values_doc.py')
-rw-r--r-- | docs/generate_values_doc.py | 86 |
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)) |