Coverage for gws-app/gws/spec/generator/util.py: 23%

35 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-04-17 01:37 +0200

1import os 

2import re 

3import json 

4 

5from gws.lib.cli import ( 

6 find_files, 

7 find_dirs, 

8 read_file, 

9 write_file, 

10) 

11 

12 

13def _json(x): 

14 if isinstance(x, bytes): 

15 return x.hex() 

16 try: 

17 return vars(x) 

18 except: 

19 return repr(x) 

20 

21 

22def write_json(path, obj): 

23 write_file(path, json.dumps(obj, default=_json, indent=4, sort_keys=True)) 

24 

25 

26def parse_ini(dct, text): 

27 section = '' 

28 

29 for ln in text.strip().splitlines(): 

30 ln = ln.strip() 

31 if not ln or ln.startswith((';', '#', '//')): 

32 continue 

33 if ln[0] == '[': 

34 section = ln[1:-1].strip() 

35 continue 

36 if '=' not in ln: 

37 raise ValueError(f'invalid ini string {ln!r}') 

38 key, _, val = ln.partition('=') 

39 dct.setdefault(section, {})[key.strip()] = val.strip().replace('\\n', '\n') 

40 

41 return dct 

42 

43 

44def make_ini(dct): 

45 buf = [] 

46 

47 for sec, rows in dct.items(): 

48 buf.append('[' + sec + ']') 

49 for k, v in sorted(rows.items()): 

50 buf.append(k + '=' + v.replace('\n', '\\n')) 

51 buf.append('') 

52 

53 return '\n'.join(buf)