From 3c6d4cca5fdb40850359c5a4cdf1f17fd5bd7473 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Tue, 1 Dec 2020 18:17:04 +0100 Subject: Docs: autogen value documentation --- docs/generate_values_doc.py | 86 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 docs/generate_values_doc.py (limited to 'docs/generate_values_doc.py') 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)) -- cgit v1.2.3