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
« 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
11def compress_cst(data, length=70, as_text=False):
12 """
13 Transforms a huge constant into a sequence of compressed binary strings.
15 :param data: data
16 :param length: line length
17 :param as_text: returns the results as text
18 :return: results
20 .. runpython::
21 :showcode:
23 from pyquickhelper.pycode.unittest_cst import compress_cst
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
46def decompress_cst(data):
47 """
48 Transforms a huge constant produced by function @see fn compress_cst
49 into the original value.
51 :param data: data
52 :param length: line length
53 :param as_text: returns the results as text
54 :return: results
56 .. runpython::
57 :showcode:
59 from pyquickhelper.pycode.unittest_cst import compress_cst, decompress_cst
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)