def make_api_request(http, http_request, retries=7, redirections=_REDIRECTIONS): """Send an HTTP request via the given http, performing error/retry handling. :type http: :class:`httplib2.Http` :param http: an instance which implements the `Http` API. :type http_request: :class:`Request` :param http_request: the request to send. :type retries: integer :param retries: Number of retries to attempt on retryable responses (such as 429 or 5XX). :type redirections: integer :param redirections: Number of redirects to follow. :rtype: :class:`Response` :returns: an object representing the server's response. :raises: :exc:`google.cloud.streaming.exceptions.RequestError` if no response could be parsed. """ retry = 0 while True: try: return _make_api_request_no_retry(http, http_request, redirections=redirections) except _RETRYABLE_EXCEPTIONS as exc: retry += 1 if retry >= retries: raise retry_after = getattr(exc, 'retry_after', None) if retry_after is None: retry_after = calculate_wait_for_retry(retry) _reset_http_connections(http) logging.debug('Retrying request to url %s after exception %s', http_request.url, type(exc).__name__) time.sleep(retry_after)
def _call_fut(self, *args, **kw): from google.cloud.streaming.util import calculate_wait_for_retry return calculate_wait_for_retry(*args, **kw)