Coverage for src/pytest_xray/evidence.py: 100.0%

28 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-16 14:00 +0000

1import base64 

2from typing import AnyStr 

3 

4from pytest_xray.exceptions import XrayError 

5 

6# Content Types 

7IMAGE_JPEG: str = 'image/jpeg' 

8IMAGE_PNG: str = 'image/png' 

9PLAIN_TEXT: str = 'text/plain' 

10TEXT_HTML: str = 'text/html' 

11APP_JSON: str = 'application/json' 

12APP_ZIP: str = 'application/zip' 

13 

14 

15def evidence(data: AnyStr, filename: str, content_type: str) -> dict[str, str]: 

16 if isinstance(data, bytes): 

17 data_base64: str = base64.b64encode(data).decode('utf-8') 

18 elif isinstance(data, str): 

19 data_base64 = base64.b64encode(data.encode('utf-8')).decode('utf-8') 

20 else: 

21 raise XrayError('data must be string or bytes') 

22 

23 return {'data': data_base64, 'filename': filename, 'contentType': content_type} 

24 

25 

26def jpeg(data: AnyStr, filename: str) -> dict[str, str]: 

27 return evidence(data, filename, IMAGE_JPEG) 

28 

29 

30def png(data: AnyStr, filename: str) -> dict[str, str]: 

31 return evidence(data, filename, IMAGE_PNG) 

32 

33 

34def text(data: AnyStr, filename: str) -> dict[str, str]: 

35 return evidence(data, filename, PLAIN_TEXT) 

36 

37 

38def html(data: AnyStr, filename: str) -> dict[str, str]: 

39 return evidence(data, filename, TEXT_HTML) 

40 

41 

42def json(data: AnyStr, filename: str) -> dict[str, str]: 

43 return evidence(data, filename, APP_JSON) 

44 

45 

46def zip(data: AnyStr, filename: str) -> dict[str, str]: 

47 return evidence(data, filename, APP_ZIP)