@route('/locations', method='GET')
def get_location():
entity = db['locations'].find({'coordinate2d': {'$near': [37.871593, -122.272747]}}).limit(3)
if not entity:
abort(404, 'No nearby locations')
return entity
The response for the above portion of code is:
Error 500: Internal Server Error
Sorry, the requested URL 'http://localhost:8080/locations' caused an error:
Unsupported response type: <type 'dict'>
How can I grab that information from mongo as a type Bottle can return as JSON?
I got this error when I was trying to return a python list. I assumed it would translate into JSON, but it didn't. It made it to the line in bottle.py where it would handle iterables and found the first dict in the list and threw the error above.
To get around this, I simply embedded my list inside a dict.
return {'response': []}
The complete solution was a combination of transforming the db cursor to a list, manually setting the response type + custom encoding the return value
@route('/locations/:lat/:lng', method='GET')
def get_location(lat,lng):
response.content_type = 'application/json'
objdb = db.locations.find({'coordinate2d': {'$near': [lat,lng]}}, {'coordinate2d':bool(1)}).skip(0).limit(3)
entries = [entry for entry in objdb]
return MongoEncoder().encode(entries)
In my case, produces this:
[
{
"_id": "4f4201bb7e720d1dca000005",
"coordinate2d": [
33.02032100000006,
-117.19483074631853
]
},
{
"_id": "4f4201587e720d1dca000002",
"coordinate2d": [
33.158092999999994,
-117.350594
]
},
{
"_id": "4f42018b7e720d1dca000003",
"coordinate2d": [
33.195870000000006,
-117.379483
]
}
]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With