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
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
1import os
2import re
3import json
5from gws.lib.cli import (
6 find_files,
7 find_dirs,
8 read_file,
9 write_file,
10)
13def _json(x):
14 if isinstance(x, bytes):
15 return x.hex()
16 try:
17 return vars(x)
18 except:
19 return repr(x)
22def write_json(path, obj):
23 write_file(path, json.dumps(obj, default=_json, indent=4, sort_keys=True))
26def parse_ini(dct, text):
27 section = ''
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')
41 return dct
44def make_ini(dct):
45 buf = []
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('')
53 return '\n'.join(buf)