Coverage for pyquickhelper/pycode/unittest_cst.py: 100%

26 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-06-03 02:21 +0200

1""" 

2@file 

3@brief Helpers to compress constant used in unit tests. 

4""" 

5import base64 

6import json 

7import lzma 

8import pprint 

9 

10 

11def compress_cst(data, length=70, as_text=False): 

12 """ 

13 Transforms a huge constant into a sequence of compressed binary strings. 

14 

15 :param data: data 

16 :param length: line length 

17 :param as_text: returns the results as text 

18 :return: results 

19 

20 .. runpython:: 

21 :showcode: 

22 

23 from pyquickhelper.pycode.unittest_cst import compress_cst 

24 

25 data = {'values': [0.5, 6.9]} 

26 print(compress_cst(data)) 

27 """ 

28 js = json.dumps(data) 

29 data_js = js.encode("utf-8") 

30 data_out = lzma.compress(data_js) 

31 data64 = base64.b64encode(data_out) 

32 bufs = [] 

33 pos = 0 

34 while pos < len(data64): 

35 if pos + length < len(data64): 

36 bufs.append(data64[pos:pos + length]) 

37 pos += length 

38 else: 

39 bufs.append(data64[pos:]) 

40 pos = len(data64) 

41 if as_text: 

42 return pprint.pformat(bufs) # pragma: no cover 

43 return bufs 

44 

45 

46def decompress_cst(data): 

47 """ 

48 Transforms a huge constant produced by function @see fn compress_cst 

49 into the original value. 

50 

51 :param data: data 

52 :param length: line length 

53 :param as_text: returns the results as text 

54 :return: results 

55 

56 .. runpython:: 

57 :showcode: 

58 

59 from pyquickhelper.pycode.unittest_cst import compress_cst, decompress_cst 

60 

61 data = {'values': [0.5, 6.9]} 

62 cp = compress_cst(data) 

63 back = decompress_cst(cp) 

64 print(back) 

65 """ 

66 if isinstance(data, list): 

67 data = b"".join(data) 

68 data64 = base64.b64decode(data) 

69 data_in = lzma.decompress(data64) 

70 dec = data_in.decode('utf-8') 

71 return json.loads(dec)