bson.json_util appears to only support a subset of the possible interpretations of the ISO-8601 format for $date.
Here is a "valid" ISO-8601 formatted string as returned by the mongo shell:
MongoDB shell version: 3.0.0
connecting to: test
> bah = new Date()
ISODate("2015-03-18T20:30:50.508Z")
> bah.toISOString()
2015-03-18T20:30:50.508Z
>
But this same string cannot be parsed by bson.json_util.loads:
Python 2.7.6 (default, Sep 9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymongo
>>> pymongo.version
'2.8'
>>> import bson.json_util
>>> bson.json_util.loads('{"$date":"2015-03-18T20:30:50.508Z"}')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/bson/json_util.py", line 158, in loads
return json.loads(s, *args, **kwargs)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 351, in loads
return cls(encoding=encoding, **kw).decode(s)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 365, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 381, in raw_decode
obj, end = self.scan_once(s, idx)
File "/Library/Python/2.7/site-packages/bson/json_util.py", line 157, in <lambda>
kwargs['object_hook'] = lambda dct: object_hook(dct, compile_re)
File "/Library/Python/2.7/site-packages/bson/json_util.py", line 204, in object_hook
raise ValueError("invalid format for offset")
ValueError: invalid format for offset
>>>
I get around this locally by replacing https://github.com/mongodb/mongo-python-driver/blob/master/bson/json_util.py#L151 with:
if not offset or offset == "Z":
However, there are other interpretations of ISO-8601 that should be parseable as well. For example, the following should all be parsed the same:
- 2015-03-18T20:30:50.508Z
- 2015-03-18T20:30:50.508+0000
- 2015-03-18T20:30:50.508+00:00