Example #1
0
def _get(url, ttl, codes, headers):
    """Mockable version of the user agent get.
    """
    # Pylint gets confused by the fake HTTP client
    # pylint: disable=E1103
    codes = codes or [200]
    headers = headers or dict(Accept='application/json')
    url_fragment = _use_fake(url)
    if url_fragment:
        file_spec, query = _parse_qs(url_fragment)
        headers.update(_sign_request('GET', file_spec, query))
        response = FakeClient().get(file_spec,
                                    query,
                                    HTTP_HOST='localhost:8000',
                                    **_fake_http_headers(headers))
        if response.status_code in [301, 302] and \
                response.status_code not in codes:
            return get(response['location'], ttl, codes)
        assert response.status_code in codes, \
            (url_fragment, response, response.content)
        content = response.content
    else:
        cache_key = 'slumber.connector.ua.get.%s' % url
        cached = cache.get(cache_key)
        if not cached:
            logging.debug("Cache miss for url %s with cache key %s", url,
                          cache_key)
            _, _, path, _, query, _ = urlparse(url)
            for _ in range(0, 3):
                headers.update(_sign_request('GET', path, query or ''))
                response, content = _real().request(url, headers=headers)
                if response.status in codes:
                    break
            assert response.status in codes, \
                (url, response, content)
            if ttl:
                cache.set(cache_key, (response, content), ttl)
        else:
            logging.debug("Fetched %s from cache key %s", url, cache_key)
            response, content = cached
            response.from_cache = True
    try:
        return response, loads(content)
    except JSONDecodeError:
        return response, {}
Example #2
0
def _get(url, ttl, codes, headers):
    """Mockable version of the user agent get.
    """
    # Pylint gets confused by the fake HTTP client
    # pylint: disable=E1103
    codes = codes or [200]
    headers = headers or dict(Accept='application/json')
    url_fragment = _use_fake(url)
    if url_fragment:
        file_spec, query = _parse_qs(url_fragment)
        headers.update(_sign_request('GET', file_spec, query))
        response = FakeClient().get(file_spec, query,
            HTTP_HOST='localhost:8000', **_fake_http_headers(headers))
        if response.status_code in [301, 302] and \
                response.status_code not in codes:
            return get(response['location'], ttl, codes)
        assert response.status_code in codes, \
            (url_fragment, response, response.content)
        content = response.content
    else:
        cache_key = 'slumber.connector.ua.get.%s' % url
        cached = cache.get(cache_key)
        if not cached:
            logging.debug("Cache miss for url %s with cache key %s",
                url, cache_key)
            _, _, path, _, query, _ = urlparse(url)
            for _ in range(0, 3):
                headers.update(_sign_request('GET', path, query or ''))
                response, content = _real().request(
                    url, headers=headers)
                if response.status in codes:
                    break
            assert response.status in codes, \
                (url, response, content)
            if ttl:
                cache.set(cache_key, (response, content), ttl)
        else:
            logging.debug("Fetched %s from cache key %s", url, cache_key)
            response, content = cached
            response.from_cache = True
    try:
        return response, loads(content)
    except JSONDecodeError:
        return response, {}