31 lines
1021 B
Python
31 lines
1021 B
Python
|
import datetime
|
||
|
from .utils import format_rfc3339
|
||
|
|
||
|
try:
|
||
|
_string_types = (str, unicode)
|
||
|
_int_types = (int, long)
|
||
|
except NameError:
|
||
|
_string_types = str
|
||
|
_int_types = int
|
||
|
|
||
|
def translate_to_test(v):
|
||
|
if isinstance(v, dict):
|
||
|
return { k: translate_to_test(v) for k, v in v.items() }
|
||
|
if isinstance(v, list):
|
||
|
a = [translate_to_test(x) for x in v]
|
||
|
if v and isinstance(v[0], dict):
|
||
|
return a
|
||
|
else:
|
||
|
return {'type': 'array', 'value': a}
|
||
|
if isinstance(v, datetime.datetime):
|
||
|
return {'type': 'datetime', 'value': format_rfc3339(v)}
|
||
|
if isinstance(v, bool):
|
||
|
return {'type': 'bool', 'value': 'true' if v else 'false'}
|
||
|
if isinstance(v, _int_types):
|
||
|
return {'type': 'integer', 'value': str(v)}
|
||
|
if isinstance(v, float):
|
||
|
return {'type': 'float', 'value': '{:.17}'.format(v)}
|
||
|
if isinstance(v, _string_types):
|
||
|
return {'type': 'string', 'value': v}
|
||
|
raise RuntimeError('unexpected value: {!r}'.format(v))
|