I am working on a simple app engine application that utilize the geo-searching proximity_fetch.
I perform the search and some extra filtering on the data, and all goes well (I checked the number of returned results, and it was just as expected ) However, when I tried to dump it into a json using simple json, I got the following error:
TypeError: < backend.models.Listing object at 0x0570CC90 >is not JSON serializable
This is the way I define the object in my code:
class Listing(GeoModel):
currency=db.IntegerProperty( default = CURRENCY["EURO"] )
title=db.StringProperty(required = True )
admins = db.ReferenceProperty( User )
.
. Some uninteresting properties goes here, Only Integer and String Properties
.
active = db.BooleanProperty()
@staticmethod
def get_listing_from_point( lat , lon ,
max_dist=MAX_SEARCH_RADIUS,
max_result=MAX_SEARCH_RESULT,
start_date=None,end_date=None):
rich_query = Listing.all()
result = Listing.proximity_fetch( rich_query ,
geo.geotypes.Point( lat , lon ),
max_results = max_result,
max_distance = max_dist )
result = list( rich_query )
valid_list =
[i for i in list( result ) if i.check_availability( start_date ,
end_date )]
return valid_list
And this is the method from which I call the proximity search:
lon = self.request.args.get("lon" , None)
lat = self.request.args.get("lat" , None)
check_in = self.request.args.get("check_in" , None)
check_out = self.request.args.get("check_out" , None)
if not lon or not lat:
return Response( json.dumps( "{ 'error' : 'desription..." ) )
result = Listing.get_listing_from_point(
lat = float(lat),
lon = float(lon),
start_date = check_in,
end_date = check_out)
return json.dumps( result )
While attempting to find the reason for the problem, I tried to return the dict of the first result in the search, and when I did so, I got the following error:
TypeError: datastore_types.GeoPt(23.0, 42.2) is not JSON serializable Which leads me to believe there is something wrong in the way I handle my geo points...
I tried searching for both errors with no result, any clues?
P.S, this is the complete stacktrace:
File "C:\Program >Files\Google\google_appengine\google\appengine\ext\appstats\recording.py", line 897, in >appstats_wsgi_wrapper result = app(environ, appstats_start_response)
File "C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\app.py", line 245, in >dispatch rv = self.handle_exception(request, e)
File "C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\app.py", line 241, in >dispatch rv = self.router.dispatch(request)
File "C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\routing.py", line 105, in >dispatch rv = rv()
File "C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\handler.py", line 297, in >call response = self.dispatch()
File "C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\handler.py", line 88, in >dispatch return self.handle_exception(exception=e)
File "C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\handler.py", line 86, in >dispatch return self.make_response(method(**request.rule_args))
File "C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\backend\handlers.py", line 47, >in get return json.dumps( result )
File "C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson__init__.py", line >182, in dumps **kw).encode(obj)
File "C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py", line >312, in encode chunks = list(self.iterencode(o))
File "C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py", line >262, in _iterencode for chunk in self._iterencode_list(o, markers):
File "C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py", line >170, in _iterencode_list for chunk in self._iterencode(value, markers):
File "C:\Program Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py", line 273, in _iterencode for chunk in self._iterencode_default(o, markers):
File "C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py", line 279, in _iterencode_default newobj = self.default(o)
File "C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py", line >300, in default raise TypeError("%r is not JSON serializable" % (o,))