Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/tablib/formats/_json.py: 43%

38 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2023-07-17 14:22 -0600

1""" Tablib - JSON Support 

2""" 

3import decimal 

4import json 

5from uuid import UUID 

6 

7import tablib 

8 

9 

10def serialize_objects_handler(obj): 

11 if isinstance(obj, (decimal.Decimal, UUID)): 

12 return str(obj) 

13 elif hasattr(obj, 'isoformat'): 

14 return obj.isoformat() 

15 else: 

16 return obj 

17 

18 

19class JSONFormat: 

20 title = 'json' 

21 extensions = ('json', 'jsn') 

22 

23 @classmethod 

24 def export_set(cls, dataset): 

25 """Returns JSON representation of Dataset.""" 

26 return json.dumps( 

27 dataset.dict, default=serialize_objects_handler, ensure_ascii=False 

28 ) 

29 

30 @classmethod 

31 def export_book(cls, databook): 

32 """Returns JSON representation of Databook.""" 

33 return json.dumps( 

34 databook._package(), default=serialize_objects_handler, ensure_ascii=False 

35 ) 

36 

37 @classmethod 

38 def import_set(cls, dset, in_stream): 

39 """Returns dataset from JSON stream.""" 

40 

41 dset.wipe() 

42 dset.dict = json.load(in_stream) 

43 

44 @classmethod 

45 def import_book(cls, dbook, in_stream): 

46 """Returns databook from JSON stream.""" 

47 

48 dbook.wipe() 

49 for sheet in json.load(in_stream): 

50 data = tablib.Dataset() 

51 data.title = sheet['title'] 

52 data.dict = sheet['data'] 

53 dbook.add_sheet(data) 

54 

55 @classmethod 

56 def detect(cls, stream): 

57 """Returns True if given stream is valid JSON.""" 

58 try: 

59 json.load(stream) 

60 return True 

61 except (TypeError, ValueError): 

62 return False