# Path: data_model.py
# class StopLocation(GeoModel):
#     stopID       = db.StringProperty()
#     intersection = db.StringProperty()
#     direction    = db.StringProperty()
#     description  = db.StringProperty(multiline=True)
# 
# Path: api/v1/api_utils.py
# def validateDevKey(devKey):
# def conformStopID(stopID):
# def conformRouteID(routeID):
# def inthepast(time):
# def getLocalDatetime():
# def getLocalTimestamp():
# def computeCountdownMinutes(arrivalTime):
# def afterHours():
# def buildErrorResponse(error,description):
# def getDirectionLabel(directionID):
# def handle_500(request, response, exception):
# def recordDeveloperRequest(devKey,type,terms,ipaddr,error='success'):
# def serialize_entities(models):
# def deserialize_entities(data):
# def get_time_from_text(text_with_time, findPos=0):
# GETARRIVALS = "get arrivals"
# GETVEHICLES = "get vehicles"
# GETSTOPS = "get stops"
# GETROUTES = "get routes"
# GETNEARBYSTOPS = "get nearby stops"
# GETSTOPLOCATION = "get stop location"
# 
# Path: stats_and_maps/stats/stathat.py
# STATHAT_MEMCACHE_ERROR_COUNT = 'stathat_error_count'
# STATHAT_MEMCACHE_REQ_COUNT = 'stathat_req_count'
#         URL_BASE = 'https://api.stathat.com'
# class StatHat:
# class StatValueTaskHandler(webapp.RequestHandler):
# class StatFlushHandler(webapp.RequestHandler):
# class StatStopsCollectHandler(webapp.RequestHandler):
#         def http_post_async(self, path, data):
#         def http_post(self, path, data):
#         def post_value(self, user_key, stat_key, value, callback=None):
#         def post_count(self, user_key, stat_key, count, callback=None):
#         def ez_post_value(self, ezkey, stat_name, value):
#         def ez_post_count(self, ezkey, stat_name, count):
# def apiStatCount():
# def apiErrorCount():
# def apiTimeStat(stat_key,value):
# def noop():
#   def post(self):
#     def get(self):
#     def post(self):
# def main():


import os
import wsgiref.handlers
import logging
import webapp2 as webapp
import json
from data_model import StopLocation
from utils.geo import geotypes
from api.v1 import api_utils
from stats_and_maps.stats import stathat
from google.appengine.api import memcache
from google.appengine.ext import db
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api.labs.taskqueue import Task
    # we have to translate the direction input into a code used
    # for the metro lookup
    destination_code_key = '%s:codekey' % destination
    destination_code = memcache.get(destination_code_key)
    if( destination_code is None ):

        logging.warn('cache miss on destination code %s' % destination)
        destination_listing = db.GqlQuery('select * from DestinationListing where label = :1', destination).get()
        if destination_listing is None:
            logging.error('routeRequest :: unable to locate destination %s in the datastore!?' % destination)
            destination_code = -1
        else:
            destination_code = destination_listing.id

        # shove the result into memcache
        memcache.set(destination_code_key,destination_code)

    return destination_code

def nearbyStops(lat,lon,radius,routeID,destination):
    route_stops = None

    # limit results to 200
    max_results = 200
    # limit the radius value to 500
    if radius > 1000:
        radius = 1000

    logging.debug('nearbyStops (%s,%s,%s,%s,%s)' % (lat,lon,radius,routeID,destination))
    if routeID is None or routeID == "":

# Path: data_model.py
# class StopLocation(GeoModel):
#     stopID       = db.StringProperty()
#     intersection = db.StringProperty()
#     direction    = db.StringProperty()
#     description  = db.StringProperty(multiline=True)
# 
# Path: api/v1/api_utils.py
# def validateDevKey(devKey):
# def conformStopID(stopID):
# def conformRouteID(routeID):
# def inthepast(time):
# def getLocalDatetime():
# def getLocalTimestamp():
# def computeCountdownMinutes(arrivalTime):
# def afterHours():
# def buildErrorResponse(error,description):
# def getDirectionLabel(directionID):
# def handle_500(request, response, exception):
# def recordDeveloperRequest(devKey,type,terms,ipaddr,error='success'):
# def serialize_entities(models):
# def deserialize_entities(data):
# def get_time_from_text(text_with_time, findPos=0):
# GETARRIVALS = "get arrivals"
# GETVEHICLES = "get vehicles"
# GETSTOPS = "get stops"
# GETROUTES = "get routes"
# GETNEARBYSTOPS = "get nearby stops"
# GETSTOPLOCATION = "get stop location"
# 
# Path: stats_and_maps/stats/stathat.py
# STATHAT_MEMCACHE_ERROR_COUNT = 'stathat_error_count'
# STATHAT_MEMCACHE_REQ_COUNT = 'stathat_req_count'
#         URL_BASE = 'https://api.stathat.com'
# class StatHat:
# class StatValueTaskHandler(webapp.RequestHandler):
# class StatFlushHandler(webapp.RequestHandler):
# class StatStopsCollectHandler(webapp.RequestHandler):
#         def http_post_async(self, path, data):
#         def http_post(self, path, data):
#         def post_value(self, user_key, stat_key, value, callback=None):
#         def post_count(self, user_key, stat_key, count, callback=None):
#         def ez_post_value(self, ezkey, stat_name, value):
#         def ez_post_count(self, ezkey, stat_name, count):
# def apiStatCount():
# def apiErrorCount():
# def apiTimeStat(stat_key,value):
# def noop():
#   def post(self):
#     def get(self):
#     def post(self):
# def main():


# Path: api/v1/getstops.py
import os
import wsgiref.handlers
import logging
import webapp2 as webapp
import json
from data_model import StopLocation
from utils.geo import geotypes
from api.v1 import api_utils
from stats_and_maps.stats import stathat
from google.appengine.api import memcache
from google.appengine.ext import db
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api.labs.taskqueue import Task

    # we have to translate the direction input into a code used
    # for the metro lookup
    destination_code_key = '%s:codekey' % destination
    destination_code = memcache.get(destination_code_key)
    if( destination_code is None ):

        logging.warn('cache miss on destination code %s' % destination)
        destination_listing = db.GqlQuery('select * from DestinationListing where label = :1', destination).get()
        if destination_listing is None:
            logging.error('routeRequest :: unable to locate destination %s in the datastore!?' % destination)
            destination_code = -1
        else:
            destination_code = destination_listing.id

        # shove the result into memcache
        memcache.set(destination_code_key,destination_code)

    return destination_code

def nearbyStops(lat,lon,radius,routeID,destination):
    route_stops = None

    # limit results to 200
    max_results = 200
    # limit the radius value to 500
    if radius > 1000:
        radius = 1000

    logging.debug('nearbyStops (%s,%s,%s,%s,%s)' % (lat,lon,radius,routeID,destination))
    if routeID is None or routeID == "":

        results = StopLocation.proximity_fetch(