lanto03 / couchdb-python

Automatically exported from code.google.com/p/couchdb-python
Other
0 stars 0 forks source link

Database.save() with a Python datetime.datetime value raises the wrong exception #210

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
What steps will reproduce the problem?

>> import datetime
>> import couchdb
>> couch = couchdb.Server()
>> db = couch.create('datetime_error')
>> data = {'the_time': datetime.datetime.now() }
>> db.save(data)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\dev\python27\lib\site-packages\couchdb\client.py", line 407, in save
    _, _, data = func(body=doc, **options)
  File "C:\dev\python27\lib\site-packages\couchdb\http.py", line 399, in post_json
    status, headers, data = self.post(*a, **k)
  File "C:\dev\python27\lib\site-packages\couchdb\http.py", line 381, in post
    **params)
  File "C:\dev\python27\lib\site-packages\couchdb\http.py", line 419, in _request
    credentials=self.credentials)
  File "C:\dev\python27\lib\site-packages\couchdb\http.py", line 239, in request
    resp = _try_request_with_retries(iter(self.retry_delays))
  File "C:\dev\python27\lib\site-packages\couchdb\http.py", line 196, in _try_request_with_retries
    return _try_request()
  File "C:\dev\python27\lib\site-packages\couchdb\http.py", line 222, in _try_request
    chunk = body.read(CHUNK_SIZE)
AttributeError: 'dict' object has no attribute 'read'

What is the expected output? What do you see instead?

Expect the real error to be raised:

>>> import json
>>> json.dumps(data)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\dev\python27\lib\json\__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "C:\dev\python27\lib\json\encoder.py", line 201, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\dev\python27\lib\json\encoder.py", line 264, in iterencode
    return _iterencode(o, 0)
  File "C:\dev\python27\lib\json\encoder.py", line 178, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: datetime.datetime(2012, 4, 12, 21, 18, 42, 696000) is not JSON 
serializable

Exception is swallowed in http.py request method which has the following:

                try:
                    body = json.encode(body).encode('utf-8')
                except TypeError, e:
                    pass

What version of the product are you using? On what operating system?
* Windows 7 Enterprise
* CouchDB 1.2.0
* couchdb-python 0.8

Please provide any additional information below.

Not sure if it affects other JSON implementation. I'm using the standard python 
library version.

Original issue reported on code.google.com by lee.wins...@gmail.com on 12 Apr 2012 at 11:24

GoogleCodeExporter commented 8 years ago
It looks like this should be fixed by revision 2908fd72e112.

Original comment by djc.ochtman on 21 Sep 2012 at 8:05