def validate(map_name, route, delay_between_requests = 0):
    '''Validate route with official web validator.
    Nonzero delay_between_requests imposes a minimum time between uses.
    
    Return tuple (score, world).
    '''
    key = 'online_validator.cached("%s", "%s")' % (map_name, route)
    
    cached = get_cached_response(key) or settings.get_value(key, '')
    if cached:
        return literal_eval(cached)
    
    if delay_between_requests:
        wait_until_enough_time_elapsed(delay_between_requests)
    
    params = urllib.urlencode({'mapfile': map_name, 'route': route})
    conn = httplib.HTTPConnection(server)
    conn.request("POST", path, params, headers)
    response = conn.getresponse()
    if response.status != 200:
        raise Exception('Server returned "%d %s"' % (response.status, response.reason))
    result = parse_response(response.read())
    conn.close()
    
    settings[key] = repr(result)
    
    return result
def wait_until_enough_time_elapsed(min_time_between_accesses):
    import time
    LAST_ACCESS_TIME_KEY = 'online_validator.last_access_time'
    last_access_time = float(settings.get_value(LAST_ACCESS_TIME_KEY, 0.0))
    wait_interval = min_time_between_accesses - (time.time() - last_access_time) 
    if wait_interval > 0:
        print 'Waiting %f seconds before before submitting request' % wait_interval
        time.sleep(wait_interval)
    settings[LAST_ACCESS_TIME_KEY] = time.time()