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

1""" 

2@file 

3@brief Machine Learning Post request 

4""" 

5import io 

6import zipfile 

7 

8 

9def unzip_bytes(buffer): 

10 """ 

11 Unzips everything from a buffer. 

12 

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 

26 

27 

28def zip_dict(data, **kwargs): 

29 """ 

30 Zips a dictionary ``{ str: bytes }``. 

31 

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()