def get(self): # Can't provide an ordering here in case inequality filters are used. base_query = Game.all() count = base_query.count() results = base_query.fetch(count) #db.delete(results) # for game in results: # resultsobj = resultsobj + simplejson.dumps({"latitude":game.location.lat,"longitude":game.location.lon,"name":game.name,"type":game.game_type}) # objs = simplejson.dumps(resultsobj) public_attrs = Game.public_attributes() results_obj = [ _merge_dicts({ 'lat': result.location.lat, 'lng': result.location.lon, }, dict([(attr, getattr(result, attr)) for attr in public_attrs])) for result in results] #for song in results: #print song.type # for result in query: # resultsobj.push( "Title: " + result.address self.response.out.write(simplejson.dumps({ 'status': 'success', 'count': count, 'results': results_obj }))
def get(self): def _simple_error(message, code=400): self.error(code) self.response.out.write(simplejson.dumps({ 'status': 'error', 'error': { 'message': message }, 'results': [] })) return None self.response.headers['Content-Type'] = 'application/json' query_type = self.request.get('type') if not query_type in ['proximity', 'bounds']: return _simple_error('type parameter must be ' 'one of "proximity", "bounds".', code=400) if query_type == 'proximity': try: center = geotypes.Point(float(self.request.get('lat')), float(self.request.get('lon'))) except ValueError: return _simple_error('lat and lon parameters must be valid latitude ' 'and longitude values.') elif query_type == 'bounds': try: bounds = geotypes.Box(float(self.request.get('north')), float(self.request.get('east')), float(self.request.get('south')), float(self.request.get('west'))) except ValueError: return _simple_error('north, south, east, and west parameters must be ' 'valid latitude/longitude values.') max_results = 100 if self.request.get('maxresults'): max_results = int(self.request.get('maxresults')) max_distance = 80000 # 80 km ~ 50 mi if self.request.get('maxdistance'): max_distance = float(self.request.get('maxdistance')) game_type = None if self.request.get('gametype'): try: school_type = int(self.request.get('type')) except ValueError: return _simple_error('If gametype is provided, ' 'it must be a valid number, as defined in ' 'http://nces.ed.gov/ccd/psadd.asp#type') grade_range = None if self.request.get('mingrade') or self.request.get('maxgrade'): try: grade_range = (int(self.request.get('mingrade')), int(self.request.get('maxgrade'))) if grade_range[0] > grade_range[1]: return _simple_error('mingrade cannot exceed maxgrade.') except ValueError: return _simple_error('If mingrade or maxgrade is provided, ' 'both must be valid integers.') try: # Can't provide an ordering here in case inequality filters are used. base_query = Game.all() if game_type: base_query.filter('game_type =', game_type) # Perform proximity or bounds fetch. if query_type == 'proximity': results = Game.proximity_fetch( base_query, center, max_results=max_results, max_distance=max_distance) elif query_type == 'bounds': results = Game.bounding_box_fetch( base_query, bounds, max_results=max_results) public_attrs = Game.public_attributes() results_obj = [ _merge_dicts({ 'lat': result.location.lat, 'lng': result.location.lon, }, dict([(attr, getattr(result, attr)) for attr in public_attrs])) for result in results] self.response.out.write(simplejson.dumps({ 'status': 'success', 'results': results_obj })) except: return _simple_error(str(sys.exc_info()[1]), code=500)