def get(self): # validate the request parameters devStoreKey = validateRequest(self.request, api_utils.GETROUTES) if devStoreKey is None: logging.debug("unable to validate the request parameters") self.response.headers['Content-Type'] = 'application/javascript' self.response.out.write( json.dumps( api_utils.buildErrorResponse( '-1', 'Illegal request parameters'))) return logging.debug('getroutes request... ') if self.request.get('force') is not '': refresh = True else: refresh = False if api_utils.afterHours() is True: # don't run these jobs during "off" hours json_response = api_utils.buildErrorResponse( '-1', 'The Metro service is not currently running') else: if refresh is True: json_response = getRoutes(refresh) # drop it into the memcache again memcache.set(api_utils.GETROUTES, json_response) logging.debug('---> storing in memcache') else: logging.debug('---> memcache hit') json_response = memcache.get(api_utils.GETROUTES) if json_response is None: json_response = getRoutes(refresh) # drop it into the memcache again memcache.set(api_utils.GETROUTES, json_response) logging.debug('---> storing in memcache') # record the API call for this devkey api_utils.recordDeveloperRequest(devStoreKey, api_utils.GETROUTES, self.request.query_string, self.request.remote_addr) #logging.debug('API: json response %s' % json_response); callback = self.request.get('callback') if callback is not '': self.response.headers['Content-Type'] = 'application/javascript' self.response.headers['Access-Control-Allow-Origin'] = '*' self.response.headers['Access-Control-Allow-Methods'] = 'GET' response = callback + '(' + json.dumps(json_response) + ');' else: self.response.headers['Content-Type'] = 'application/json' response = json_response self.response.out.write(response) stathat.apiStatCount()
def get(self): # validate the request parameters devStoreKey = validateRequest(self.request, api_utils.GETSTOPLOCATION) if devStoreKey is None: logging.debug("unable to validate the request parameters") self.response.headers['Content-Type'] = 'application/javascript' self.response.out.write( json.dumps( api_utils.buildErrorResponse( '-1', 'Illegal request parameters'))) return # snare the inputs stopID = api_utils.conformStopID(self.request.get('stopID')) logging.debug('getstoplocation request parameters... stopID %s' % stopID) if api_utils.afterHours() is True: # don't run these jobs during "off" hours json_response = api_utils.buildErrorResponse( '-1', 'The Metro service is not currently running') elif stopID is not '': json_response = stopLocationRequest(stopID) api_utils.recordDeveloperRequest(devStoreKey, api_utils.GETSTOPS, self.request.query_string, self.request.remote_addr) else: logging.error("API: invalid request") json_response = api_utils.buildErrorResponse( '-1', 'Invalid Request parameters. Did you forget to include a stpID?' ) api_utils.recordDeveloperRequest( devStoreKey, api_utils.GETSTOPS, self.request.query_string, self.request.remote_addr, 'illegal query string combination') #logging.debug('API: json response %s' % json_response); # encapsulate response in json callback = self.request.get('callback') if callback is not '': self.response.headers['Content-Type'] = 'application/javascript' self.response.headers['Access-Control-Allow-Origin'] = '*' self.response.headers['Access-Control-Allow-Methods'] = 'GET' response = callback + '(' + json.dumps(json_response) + ');' else: self.response.headers['Content-Type'] = 'application/json' response = json.dumps(json_response) self.response.out.write(response) stathat.apiStatCount() # push event out to anyone watching the live board task = Task(url='/map/task', params={'stopID': stopID}) task.add('eventlogger')
def get(self): # validate the request parameters devStoreKey = validateRequest(self.request,api_utils.GETROUTES) if devStoreKey is None: logging.debug("unable to validate the request parameters") self.response.headers['Content-Type'] = 'application/javascript' self.response.out.write(json.dumps(api_utils.buildErrorResponse('-1','Illegal request parameters'))) return logging.debug('getroutes request... ') if self.request.get('force') is not '': refresh = True else: refresh = False if api_utils.afterHours() is True: # don't run these jobs during "off" hours json_response = api_utils.buildErrorResponse('-1','The Metro service is not currently running') else: if refresh is True: json_response = getRoutes(refresh) # drop it into the memcache again memcache.set(api_utils.GETROUTES, json_response) logging.debug('---> storing in memcache'); else: logging.debug('---> memcache hit'); json_response = memcache.get(api_utils.GETROUTES) if json_response is None: json_response = getRoutes(refresh) # drop it into the memcache again memcache.set(api_utils.GETROUTES, json_response) logging.debug('---> storing in memcache'); # record the API call for this devkey api_utils.recordDeveloperRequest(devStoreKey,api_utils.GETROUTES,self.request.query_string,self.request.remote_addr); #logging.debug('API: json response %s' % json_response); callback = self.request.get('callback') if callback is not '': self.response.headers['Content-Type'] = 'application/javascript' self.response.headers['Access-Control-Allow-Origin'] = '*' self.response.headers['Access-Control-Allow-Methods'] = 'GET' response = callback + '(' + json.dumps(json_response) + ');' else: self.response.headers['Content-Type'] = 'application/json' response = json_response self.response.out.write(response) stathat.apiStatCount()
def get(self): # validate the request parameters devStoreKey = validateRequest(self.request) if devStoreKey is None: logging.debug("unable to validate the request parameters") self.response.headers['Content-Type'] = 'application/javascript' self.response.out.write( json.dumps( api_utils.buildErrorResponse( '-1', 'Illegal request parameters'))) return # snare the inputs routeID = self.request.get('routeID') logging.debug('getvehicles request parameters... routeID %s' % routeID) if api_utils.afterHours() is True: # don't run these jobs during "off" hours json_response = api_utils.buildErrorResponse( '-1', 'The Metro service is not currently running') elif routeID is not '': json_response = routeRequest(routeID) api_utils.recordDeveloperRequest(devStoreKey, api_utils.GETVEHICLES, self.request.query_string, self.request.remote_addr) else: logging.error("API: invalid request") json_response = api_utils.buildErrorResponse( '-1', 'Invalid Request parameters. Did you forget to include a routeID?' ) api_utils.recordDeveloperRequest( devStoreKey, api_utils.GETVEHICLES, self.request.query_string, self.request.remote_addr, 'illegal query string combination') #logging.debug('API: json response %s' % json_response); # encapsulate response in json callback = self.request.get('callback') if callback is not '': self.response.headers['Content-Type'] = 'application/javascript' self.response.headers['Access-Control-Allow-Origin'] = '*' self.response.headers['Access-Control-Allow-Methods'] = 'GET' response = callback + '(' + json.dumps(json_response) + ');' else: self.response.headers['Content-Type'] = 'application/json' response = json.dumps(json_response) self.response.out.write(response) stathat.apiStatCount()
def get(self): # validate the request parameters devStoreKey = validateRequest(self.request,api_utils.GETSTOPS) if devStoreKey is None: if( not (self.request.get('key') == 'kiosk' and self.request.get('stopID') == '') ): logging.error("failed to validate the request parameters") self.response.headers['Content-Type'] = 'application/javascript' self.response.out.write(json.dumps(api_utils.buildErrorResponse('-1','Illegal request parameters'))) return # snare the inputs stopID = api_utils.conformStopID(self.request.get('stopID')) routeID = self.request.get('routeID') destination = self.request.get('destination').upper() logging.debug('getstops request parameters... routeID %s destination %s' % (routeID,destination)) if api_utils.afterHours() is True: # don't run these jobs during "off" hours json_response = api_utils.buildErrorResponse('-1','The Metro service is not currently running') elif routeID is not '' and destination is '': json_response = routeRequest(routeID, None) api_utils.recordDeveloperRequest(devStoreKey,api_utils.GETSTOPS,self.request.query_string,self.request.remote_addr); elif routeID is not '' and destination is not '': json_response = routeRequest(routeID, destination) api_utils.recordDeveloperRequest(devStoreKey,api_utils.GETSTOPS,self.request.query_string,self.request.remote_addr); else: logging.error("API: invalid request") json_response = api_utils.buildErrorResponse('-1','Invalid Request parameters. Did you forget to include a routeID?') api_utils.recordDeveloperRequest(devStoreKey,api_utils.GETSTOPS,self.request.query_string,self.request.remote_addr,'illegal query string combination'); #logging.debug('API: json response %s' % json_response); # encapsulate response in json callback = self.request.get('callback') if callback is not '': self.response.headers['Content-Type'] = 'application/javascript' self.response.headers['Access-Control-Allow-Origin'] = '*' self.response.headers['Access-Control-Allow-Methods'] = 'GET' response = callback + '(' + json.dumps(json_response) + ');' else: self.response.headers['Content-Type'] = 'application/json' response = json.dumps(json_response) self.response.out.write(response) stathat.apiStatCount() # push event out to anyone watching the live board task = Task(url='/map/task', params={'stopID':stopID}) task.add('eventlogger')
def get(self): # validate the request parameters devStoreKey = validateRequest(self.request) if devStoreKey is None: logging.debug("unable to validate the request parameters") self.response.headers['Content-Type'] = 'application/javascript' self.response.out.write(json.dumps(api_utils.buildErrorResponse('-1','Illegal request parameters'))) return # snare the inputs routeID = self.request.get('routeID') if len(routeID) == 1: routeID = "0" + routeID logging.debug('getvehicles request parameters... routeID %s' % routeID) if api_utils.afterHours() is True: # don't run these jobs during "off" hours json_response = api_utils.buildErrorResponse('-1', 'The Metro service is not currently running') elif routeID is not '': json_response = routeRequest(routeID) api_utils.recordDeveloperRequest(devStoreKey, api_utils.GETVEHICLES, self.request.query_string, self.request.remote_addr); else: logging.error("API: invalid request") json_response = api_utils.buildErrorResponse('-1','Invalid Request parameters. Did you forget to include a routeID?') api_utils.recordDeveloperRequest(devStoreKey, api_utils.GETVEHICLES, self.request.query_string, self.request.remote_addr,'illegal query string combination'); #logging.debug('API: json response %s' % json_response); # encapsulate response in json callback = self.request.get('callback') if callback is not '': self.response.headers['Content-Type'] = 'application/javascript' self.response.headers['Access-Control-Allow-Origin'] = '*' self.response.headers['Access-Control-Allow-Methods'] = 'GET' response = callback + '(' + json.dumps(json_response) + ');' else: self.response.headers['Content-Type'] = 'application/json' response = json.dumps(json_response) self.response.out.write(response) stathat.apiStatCount()
def get(self): start = time.time() # snare the inputs dev_key = self.request.get('key') stopID = api_utils.conformStopID(self.request.get('stopID')) routeID = self.request.get('routeID') vehicleID = self.request.get('vehicleID') #logging.debug('getarrivals request parameters... stopID %s routeID %s vehicleID %s' % (stopID,routeID,vehicleID)) self.request.registry['aggregated_results'] = [] try: if api_utils.afterHours() is False: # and dev_key != 'uwkiosk9': # validate the request parameters devStoreKey = validateRequest(self.request) if devStoreKey is None: # filter out the kiosk errors from the log if (not (dev_key == 'kiosk' and self.request.get('stopID') == '')): logging.error( "failed to validate the request parameters") self.response.headers[ 'Content-Type'] = 'application/javascript' self.response.out.write( json.dumps( api_utils.buildErrorResponse( '-1', 'Unable to validate the request. There may be an illegal developer key.' ))) return if stopID is not '' and routeID is '': json_response = stopRequest(stopID, dev_key) api_utils.recordDeveloperRequest(devStoreKey, api_utils.GETARRIVALS, self.request.query_string, self.request.remote_addr) elif stopID is not '' and routeID is not '': json_response = stopRouteRequest(stopID, routeID, devStoreKey) api_utils.recordDeveloperRequest(devStoreKey, api_utils.GETARRIVALS, self.request.query_string, self.request.remote_addr) elif routeID is not '' and vehicleID is not '': json_response = routeVehicleRequest( routeID, vehicleID, devStoreKey) api_utils.recordDeveloperRequest(devStoreKey, api_utils.GETVEHICLE, self.request.query_string, self.request.remote_addr) else: logging.debug("API: invalid request") api_utils.recordDeveloperRequest( devStoreKey, api_utils.GETARRIVALS, self.request.query_string, self.request.remote_addr, 'illegal query string combination') json_response = api_utils.buildErrorResponse( '-1', 'Invalid Request parameters') # push event out to anyone watching the live board channels = memcache.get('channels') if channels is not None: task = Task(url='/map/task', params={'stopID': stopID}) task.add('eventlogger') # stop statistics - DISABLED # if( "kiosk" not in dev_key ): # task = Task(url='/stats/stop', params={'apikey':dev_key,'stop':stopID}) # task.add('stats') else: # don't run these jobs during "off" hours #logging.debug('shunted... off hour request') #if dev_key.find('kiosk') >= 0: # json_response = api_utils.buildErrorResponse('-1','Kiosk requests no longer supported') #else: json_response = api_utils.buildErrorResponse( '-1', 'The Metro service is not currently running') # encapsulate response in json or jsonp callback = self.request.get('callback') if callback is not '': self.response.headers[ 'Content-Type'] = 'application/javascript' self.response.headers['Access-Control-Allow-Origin'] = '*' self.response.headers['Access-Control-Allow-Methods'] = 'GET' response = callback + '(' + json.dumps(json_response) + ');' else: self.response.headers['Content-Type'] = 'application/json' response = json.dumps(json_response) self.response.out.write(response) except DeadlineExceededError: self.response.clear() self.response.set_status(500) self.response.out.write( "This operation could not be completed in time...") # persist some statistics # stathat: if api_utils.afterHours() is False and dev_key != 'uwkiosk9': stathat.apiTimeStat(config.STATHAT_API_GETARRIVALS_TIME_KEY, ((time.time() - start) * 1000)) stathat.apiStatCount()
def get(self): start = time.time() # snare the inputs dev_key = self.request.get('key') stopID = api_utils.conformStopID(self.request.get('stopID')) routeID = self.request.get('routeID') vehicleID = self.request.get('vehicleID') #logging.debug('getarrivals request parameters... stopID %s routeID %s vehicleID %s' % (stopID,routeID,vehicleID)) self.request.registry['aggregated_results'] = [] try: if api_utils.afterHours() is False: # and dev_key != 'uwkiosk9': # validate the request parameters devStoreKey = validateRequest(self.request) if devStoreKey is None: # filter out the kiosk errors from the log if( not (dev_key == 'kiosk' and self.request.get('stopID') == '') ): logging.error("failed to validate the request parameters") self.response.headers['Content-Type'] = 'application/javascript' self.response.out.write(json.dumps(api_utils.buildErrorResponse('-1','Unable to validate the request. There may be an illegal developer key.'))) return if stopID is not '' and routeID is '': json_response = stopRequest(stopID, dev_key) api_utils.recordDeveloperRequest(devStoreKey,api_utils.GETARRIVALS,self.request.query_string,self.request.remote_addr); elif stopID is not '' and routeID is not '': json_response = stopRouteRequest(stopID, routeID, devStoreKey) api_utils.recordDeveloperRequest(devStoreKey,api_utils.GETARRIVALS,self.request.query_string,self.request.remote_addr); elif routeID is not '' and vehicleID is not '': json_response = routeVehicleRequest(routeID, vehicleID, devStoreKey) api_utils.recordDeveloperRequest(devStoreKey,api_utils.GETVEHICLE,self.request.query_string,self.request.remote_addr); else: logging.debug("API: invalid request") api_utils.recordDeveloperRequest(devStoreKey,api_utils.GETARRIVALS,self.request.query_string,self.request.remote_addr,'illegal query string combination'); json_response = api_utils.buildErrorResponse('-1','Invalid Request parameters') # push event out to anyone watching the live board channels = memcache.get('channels') if channels is not None: task = Task(url='/map/task', params={'stopID':stopID}) task.add('eventlogger') # stop statistics - DISABLED # if( "kiosk" not in dev_key ): # task = Task(url='/stats/stop', params={'apikey':dev_key,'stop':stopID}) # task.add('stats') else: # don't run these jobs during "off" hours #logging.debug('shunted... off hour request') #if dev_key.find('kiosk') >= 0: # json_response = api_utils.buildErrorResponse('-1','Kiosk requests no longer supported') #else: json_response = api_utils.buildErrorResponse('-1','The Metro service is not currently running') # encapsulate response in json or jsonp callback = self.request.get('callback') if callback is not '': self.response.headers['Content-Type'] = 'application/javascript' self.response.headers['Access-Control-Allow-Origin'] = '*' self.response.headers['Access-Control-Allow-Methods'] = 'GET' response = callback + '(' + json.dumps(json_response) + ');' else: self.response.headers['Content-Type'] = 'application/json' response = json.dumps(json_response) self.response.out.write(response) except DeadlineExceededError: self.response.clear() self.response.set_status(500) self.response.out.write("This operation could not be completed in time...") # persist some statistics # stathat: if api_utils.afterHours() is False and dev_key != 'uwkiosk9': stathat.apiTimeStat(config.STATHAT_API_GETARRIVALS_TIME_KEY,((time.time()-start)*1000)) stathat.apiStatCount()