Coverage for revjo/revjo.py: 96%

28 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-05 14:25 +0000

1import shlex 

2 

3 

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 "" 

10 

11 

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)}")