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, {}
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, {}