'Return a cached response if it exists in the cache, otherwise
return False.'

def cached_request(self, request):

    cache_url = self.cache_url(request.url)
    logger.debug('Looking    up    "%s"    in    the    cache', cache_url)
    cc = self.parse_cache_control(request.headers)
    if ('no-cache' in cc):
        logger.debug('Request    header    has    "no-cache",    cache    bypassed')
        return False
    if (('max-age' in cc) and (cc['max-age'] == 0)):
        logger.debug('Request    header    has    "max_age"    as    0,    cache    bypassed')
        return False
    cache_data = self.cache.get(cache_url)
    if (cache_data is None):
        logger.debug('No    cache    entry    available')
        return False
    resp = self.serializer.loads(request, cache_data)
    if (not resp):
        logger.warning('Cache    entry    deserialization    failed,    entry    ignored')
        return False
    if (resp.status == 301):
        msg = 'Returning    cached    "301    Moved    Permanently"    response    (ignoring    date    and    etag    information)'
        logger.debug(msg)
        return resp
    headers = CaseInsensitiveDict(resp.headers)
    if ((not headers) or ('date' not in headers)):
        if ('etag' not in headers):
            logger.debug('Purging    cached    response:    no    date    or    etag')
            self.cache.delete(cache_url)
        logger.debug('Ignoring    cached    response:    no    date')
        return False
    now = time.time()
    date = calendar.timegm(parsedate_tz(headers['date']))
    current_age = max(0, (now - date))
    logger.debug('Current    age    based    on    date:    %i', current_age)
    resp_cc = self.parse_cache_control(headers)
    freshness_lifetime = 0
    if (('max-age' in resp_cc) and resp_cc['max-age'].isdigit()):
        freshness_lifetime = int(resp_cc['max-age'])
        logger.debug('Freshness    lifetime    from    max-age:    %i', freshness_lifetime)
    elif ('expires' in headers):
        expires = parsedate_tz(headers['expires'])
        if (expires is not None):
            expire_time = (calendar.timegm(expires) - date)
            freshness_lifetime = max(0, expire_time)
            logger.debug('Freshness    lifetime    from    expires:    %i', freshness_lifetime)
    if ('max-age' in cc):
        try:
            freshness_lifetime = int(cc['max-age'])
            logger.debug('Freshness    lifetime    from    request    max-age:    %i', freshness_lifetime)
        except ValueError:
            freshness_lifetime = 0
    if ('min-fresh' in cc):
        try:
            min_fresh = int(cc['min-fresh'])
        except ValueError:
            min_fresh = 0
        current_age += min_fresh
        logger.debug('Adjusted    current    age    from    min-fresh:    %i', current_age)
    if (freshness_lifetime > current_age):
        logger.debug('The    response    is    "fresh",    returning    cached    response')
        logger.debug('%i    >    %i', freshness_lifetime, current_age)
        return resp
    if ('etag' not in headers):
        logger.debug('The    cached    response    is    "stale"    with    no    etag,    purging')
        self.cache.delete(cache_url)
    return False
