mirror of
https://github.com/kennethreitz/tablib.git
synced 2026-06-05 23:10:17 +00:00
59 lines
1.4 KiB
Python
59 lines
1.4 KiB
Python
""" Tablib - JSON Support
|
|
"""
|
|
import decimal
|
|
import json
|
|
from uuid import UUID
|
|
|
|
import tablib
|
|
|
|
|
|
def serialize_objects_handler(obj):
|
|
if isinstance(obj, (decimal.Decimal, UUID)):
|
|
return str(obj)
|
|
elif hasattr(obj, 'isoformat'):
|
|
return obj.isoformat()
|
|
else:
|
|
return obj
|
|
|
|
|
|
class JSONFormat:
|
|
title = 'json'
|
|
extensions = ('json', 'jsn')
|
|
|
|
@classmethod
|
|
def export_set(cls, dataset):
|
|
"""Returns JSON representation of Dataset."""
|
|
return json.dumps(dataset.dict, default=serialize_objects_handler)
|
|
|
|
@classmethod
|
|
def export_book(cls, databook):
|
|
"""Returns JSON representation of Databook."""
|
|
return json.dumps(databook._package(), default=serialize_objects_handler)
|
|
|
|
@classmethod
|
|
def import_set(cls, dset, in_stream):
|
|
"""Returns dataset from JSON stream."""
|
|
|
|
dset.wipe()
|
|
dset.dict = json.load(in_stream)
|
|
|
|
@classmethod
|
|
def import_book(cls, dbook, in_stream):
|
|
"""Returns databook from JSON stream."""
|
|
|
|
dbook.wipe()
|
|
for sheet in json.load(in_stream):
|
|
data = tablib.Dataset()
|
|
data.title = sheet['title']
|
|
data.dict = sheet['data']
|
|
dbook.add_sheet(data)
|
|
|
|
@classmethod
|
|
def detect(cls, stream):
|
|
"""Returns True if given stream is valid JSON."""
|
|
try:
|
|
json.load(stream)
|
|
return True
|
|
except (TypeError, ValueError):
|
|
return False
|