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
« 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
7import tablib
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
19class JSONFormat:
20 title = 'json'
21 extensions = ('json', 'jsn')
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 )
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 )
37 @classmethod
38 def import_set(cls, dset, in_stream):
39 """Returns dataset from JSON stream."""
41 dset.wipe()
42 dset.dict = json.load(in_stream)
44 @classmethod
45 def import_book(cls, dbook, in_stream):
46 """Returns databook from JSON stream."""
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)
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