Coverage for gws-app/gws/base/metadata/inspire_generate.py: 0%

43 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-05 13:35 +0200

1"""Script that regenerates the INSPIRE theme part of ``inspire.py`` from the INSPIRE theme register.""" 

2 

3import requests 

4import json 

5import os 

6 

7target = os.path.join(os.path.dirname(__file__), 'inspire.py') 

8mark = '## generated with inspire_generate.py' 

9 

10langs = 'en', 'de' 

11es = {} 

12tab = ' ' * 4 

13qq = '"""' 

14 

15for lang in langs: 

16 # js = json.load(open(f'/Users/gus/theme.en.json')) 

17 

18 js = requests.get(f'http://inspire.ec.europa.eu/theme/theme.{lang}.json').json() 

19 for p in js['register']['containeditems']: 

20 p = p['theme'] 

21 uid = p['id'].split('/')[-1] 

22 uid = uid.replace('-', '_') 

23 es.setdefault(uid, {}) 

24 w = p['label'] 

25 es[uid].setdefault('name', {})[w['lang']] = w['text'] 

26 w = p['definition'] 

27 es[uid].setdefault('definition', {})[w['lang']] = w['text'] 

28 

29 

30code = [] 

31_ = code.append 

32 

33_(mark) 

34_('') 

35_('') 

36_('class IM_Theme(Enum):') 

37_(tab + qq + 'INSPIRE data themes.' + qq) 

38_('') 

39for uid, e in es.items(): 

40 u = uid.replace('-', '_') 

41 _(tab + f'{u} = {u!r}') 

42 doc = e['name'].get('de') or e['name'].get('en') 

43 _(tab + qq + f'{doc}.' + qq) 

44 

45_('') 

46_('') 

47_('# fmt: off') 

48 

49_('_THEMES = ' + json.dumps(es, indent=4, ensure_ascii=False)) 

50_('') 

51 

52 

53with open(target, 'r') as fp: 

54 text = fp.read() 

55 

56 

57text = text.split(mark)[0] + '\n'.join(code) 

58 

59with open(os.path.join(os.path.dirname(__file__), 'inspire.py'), 'w') as fp: 

60 fp.write(text) 

61