Coverage for revjo/revjo.py: 96%
28 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-05 14:25 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-05 14:25 +0000
1import shlex
4def prefix(data) -> str:
5 if isinstance(data, str) and (
6 data in ("true", "false", "") or data[0].isdigit() or data.startswith("-")
7 ):
8 return "-s "
9 return ""
12def convert(data, pre="", post="") -> str:
13 if data is None:
14 return "null"
15 elif isinstance(data, bool):
16 if data:
17 return "true"
18 else:
19 return "false"
20 elif isinstance(data, (int, float)):
21 return str(data)
22 elif isinstance(data, (list, tuple)):
23 return (
24 pre
25 + "-a -- "
26 + " ".join(
27 [
28 "{}{}".format(prefix(x), convert(x, pre='"$(jo ', post=')"'))
29 for x in data
30 ]
31 )
32 + post
33 )
34 elif isinstance(data, str):
35 if data.startswith("@"):
36 data = "\\" + data
37 return shlex.quote(data)
38 elif isinstance(data, dict): 38 ↛ 57line 38 didn't jump to line 57 because the condition on line 38 was always true
39 if len(data) == 0:
40 return "{}"
41 res = (
42 pre
43 + " ".join(
44 [
45 "{}{}={}".format(
46 prefix(v), convert(k), convert(v, pre='"$(jo ', post=')"')
47 )
48 for k, v in data.items()
49 ]
50 )
51 + post
52 )
53 if res.startswith("-"):
54 return "-- " + res
55 return res
56 else:
57 raise ValueError(f"unsupported type: {type(data)}")