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 22:59 +0200

1"""Extract PROPS for types.py""" 

2 

3import gid6 as gid 

4 

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} 

15 

16md = gid.METADATA 

17 

18all_titles = {} 

19 

20def get_props(topics): 

21 ptypes = {} 

22 titles = {} 

23 

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'] 

29 

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 = '' 

38 

39 if t and a['list'] == 1: 

40 t = 'list[' + t + ']' 

41 

42 ptypes.setdefault(n, []).append(t) 

43 titles.setdefault(n, []).append(a['title']) 

44 

45 decls = [] 

46 

47 for n in ptypes: 

48 ptype = set(ptypes[n]) 

49 title = set(titles[n]) 

50 

51 if len(ptype) > 1 or len(title) > 1 or '' in ptype or '' in title: 

52 # print('mixed key', k, ptype, title) 

53 continue 

54 

55 all_titles[n] = title.pop() 

56 decls.append(f' {n}: {ptype.pop()}') 

57 

58 return sorted(decls) 

59 

60 

61py = get_props([ 

62 'gebaeude/angaben_zum_gebaeude', 

63]) 

64 

65print('\n\nclass GebaeudeProps(Object):') 

66print('\n'.join(py)) 

67 

68py = get_props([ 

69 'tatsaechliche_nutzung', 

70 'gesetzliche_festlegungen_gebietseinheiten_kataloge/bodenschaetzung_bewertung', 

71 'gesetzliche_festlegungen_gebietseinheiten_kataloge/oeffentlich_rechtliche_und_sonstige_festlegungen', 

72]) 

73 

74print('\n\nclass PartProps(Object):') 

75print('\n'.join(py)) 

76 

77print('\n\nPROPS = {') 

78for k in sorted(all_titles): 

79 print(f' {k!r}: {all_titles[k]!r},') 

80print('}')