Coverage for gws-app/gws/plugin/alkis/data/geo_info_dok/extract_props.py: 0%
40 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-16 23:09 +0200
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-16 23:09 +0200
1"""Extract PROPS for types.py"""
3import gid6 as gid
5type_map = {
6 'CharacterString': 'str',
7 'Boolean': 'bool',
8 'Integer': 'int',
9 'Length': 'int',
10 'Area': 'float',
11 'Volume': 'float',
12 'DateTime': 'str',
13 'Date': 'str',
14}
16md = gid.METADATA
18all_titles = {}
20def get_props(topics):
21 ptypes = {}
22 titles = {}
24 for v in md.values():
25 if v['kind'] == 'object' and any(t in v['key'] for t in topics):
26 for a in v['attributes']:
27 n = a['name']
28 t = a['type']
30 if t in md and md[t].get('kind') == 'enum':
31 t = 'EnumPair'
32 elif t in type_map:
33 t = type_map[t]
34 else:
35 # ignore object types for now
36 # print('ignored type', n, t)
37 t = ''
39 if t and a['list'] == 1:
40 t = 'list[' + t + ']'
42 ptypes.setdefault(n, []).append(t)
43 titles.setdefault(n, []).append(a['title'])
45 decls = []
47 for n in ptypes:
48 ptype = set(ptypes[n])
49 title = set(titles[n])
51 if len(ptype) > 1 or len(title) > 1 or '' in ptype or '' in title:
52 # print('mixed key', k, ptype, title)
53 continue
55 all_titles[n] = title.pop()
56 decls.append(f' {n}: {ptype.pop()}')
58 return sorted(decls)
61py = get_props([
62 'gebaeude/angaben_zum_gebaeude',
63])
65print('\n\nclass GebaeudeProps(Object):')
66print('\n'.join(py))
68py = get_props([
69 'tatsaechliche_nutzung',
70 'gesetzliche_festlegungen_gebietseinheiten_kataloge/bodenschaetzung_bewertung',
71 'gesetzliche_festlegungen_gebietseinheiten_kataloge/oeffentlich_rechtliche_und_sonstige_festlegungen',
72])
74print('\n\nclass PartProps(Object):')
75print('\n'.join(py))
77print('\n\nPROPS = {')
78for k in sorted(all_titles):
79 print(f' {k!r}: {all_titles[k]!r},')
80print('}')