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))
|