File: generate_data_types.py

package info (click to toggle)
python-xsdata 24.1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 2,936 kB
  • sloc: python: 29,257; xml: 404; makefile: 27; sh: 6
file content (49 lines) | stat: -rw-r--r-- 1,250 bytes parent folder | download | duplicates (2)
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
from pathlib import Path

from xsdata.models.enums import DataType
from xsdata.utils.collections import group_by

docs_root = Path(__file__).parent.parent

output = [
    ".. list-table::",
    "    :widths: auto",
    "    :header-rows: 1",
    "    :align: left",
    "",
    "    * - Python",
    "      - XML Type",
    "      -",
    "      -",
    "      -",
]

groups = group_by(list(DataType), key=lambda x: x.type.__name__.lower())
for key in sorted(groups):
    tp = groups[key][0].type
    if tp.__module__ != "builtins":
        output.append(f"    * - :class:`~{tp.__module__}.{tp.__name__}`")
    else:
        output.append(f"    * - :class:`{tp.__name__}`")

    count = 0
    for dt in groups[key]:
        output.append(f"      - {dt.code}")
        count += 1
        if count == 4:
            output.append("    * -")
            count = 0

    if count:
        output.extend(["      -" for _ in range(4 - count)])
    else:
        output.pop()

output.append("    * - :class:`enum.Enum`")
output.append("      - enumeration")
output.append("      -")
output.append("      -")
output.append("      -")
output.append("")
result = "\n".join(output)
docs_root.joinpath("data-types-table.rst").write_text(result, encoding="utf-8")