Point README to v0.3.1 spec Write toml test script for python3 Make sure toml passes the new version of the test suite which has 75 tests. Fix issues with backslashes.
57 lines
1.4 KiB
Python
Executable File
57 lines
1.4 KiB
Python
Executable File
#!/usr/bin/env python2
|
|
|
|
import datetime
|
|
import json
|
|
import sys
|
|
import toml
|
|
|
|
try:
|
|
_range = xrange
|
|
iteritems = dict.iteritems
|
|
except NameError:
|
|
unicode = str
|
|
_range = range
|
|
basestring = str
|
|
unichr = chr
|
|
iteritems = dict.items
|
|
long = int
|
|
|
|
def tag(value):
|
|
if isinstance(value, dict):
|
|
d = { }
|
|
for k, v in iteritems(value):
|
|
d[k] = tag(v)
|
|
return d
|
|
elif isinstance(value, list):
|
|
a = []
|
|
for v in value:
|
|
a.append(tag(v))
|
|
try:
|
|
a[0]["value"]
|
|
except KeyError:
|
|
return a
|
|
except IndexError:
|
|
pass
|
|
return {'type': 'array', 'value': a}
|
|
elif isinstance(value, basestring):
|
|
return {'type': 'string', 'value': value}
|
|
elif isinstance(value, bool):
|
|
return {'type': 'bool', 'value': str(value).lower()}
|
|
elif isinstance(value, int):
|
|
return {'type': 'integer', 'value': str(value)}
|
|
elif isinstance(value, long):
|
|
return {'type': 'integer', 'value': str(value)}
|
|
elif isinstance(value, float):
|
|
return {'type': 'float', 'value': repr(value)}
|
|
elif isinstance(value, datetime.datetime):
|
|
sdate = value.strftime('%Y-%m-%dT%H:%M:%SZ')
|
|
return {'type': 'datetime', 'value': sdate}
|
|
assert False, 'Unknown type: %s' % type(value)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
tdata = toml.loads(sys.stdin.read())
|
|
tagged = tag(tdata)
|
|
print(json.dumps(tagged))
|
|
|