Coverage for src/lightmlrestapi/args/zip_helper.py: 84%
25 statements
« prev ^ index » next coverage.py v6.4.1, created at 2022-06-06 07:16 +0200
« prev ^ index » next coverage.py v6.4.1, created at 2022-06-06 07:16 +0200
1"""
2@file
3@brief Machine Learning Post request
4"""
5import io
6import zipfile
9def unzip_bytes(buffer):
10 """
11 Unzips everything from a buffer.
13 @param buffer bytes
14 @return dictionary ``{ filename : bytes }``
15 """
16 if not isinstance(buffer, bytes):
17 raise TypeError("buffer must be bytes.")
18 res = {}
19 st = io.BytesIO(buffer)
20 with zipfile.ZipFile(st, "r") as fz:
21 names = fz.namelist()
22 for name in names:
23 with fz.open(name, 'r') as f:
24 res[name] = f.read()
25 return res
28def zip_dict(data, **kwargs):
29 """
30 Zips a dictionary ``{ str: bytes }``.
32 @param data dictionary
33 @param kwargs see :epkg:`*py:zipfile:ZipFile`
34 @return bytes
35 """
36 if not isinstance(data, dict):
37 raise TypeError("data must be a dictionary")
38 buffer = io.BytesIO()
39 with zipfile.ZipFile(buffer, "w", **kwargs) as fz:
40 for k, v in sorted(data.items()):
41 if not isinstance(k, str):
42 raise TypeError("Keys must be a string.")
43 if not isinstance(v, bytes):
44 raise TypeError("Values must be bytes.")
45 fz.writestr(k, v)
46 return buffer.getvalue()