summaryrefslogtreecommitdiff
path: root/docs/generate_values_doc.py
blob: ce14066634fa9b884a9cbe068f0df8e354cd5b2a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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))