Index: appengine/findit/common/retry_http_client.py |
diff --git a/appengine/findit/common/retry_http_client.py b/appengine/findit/common/retry_http_client.py |
deleted file mode 100644 |
index 3672817dcfa4cdf0569d6620a18c82f643dd1579..0000000000000000000000000000000000000000 |
--- a/appengine/findit/common/retry_http_client.py |
+++ /dev/null |
@@ -1,152 +0,0 @@ |
-# Copyright 2014 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-import time |
-import urllib |
- |
- |
-_NO_RETRY_CODE = [200, 302, 401, 403, 404, 501] |
- |
- |
-class RetryHttpClient(object): |
- """Represents a http client to send http/https request to a remote server. |
- |
- Subclasses should implement abstract functions below. |
- """ |
- def __init__(self, no_error_logging_statuses=None): |
- # If an http request results in the given statuses, the subclasses should |
- # not log an error. |
- self.no_error_logging_statuses = no_error_logging_statuses |
- |
- def _Get(self, url, timeout_seconds, headers): # pylint: disable=W0613, R0201 |
- """Sends the actual HTTP GET request. |
- |
- Returns: |
- (status_code, content) |
- status_code: the HTTP status code of the response. |
- content: the content of the response. |
- """ |
- raise NotImplementedError( |
- '_Get() should be implemented in the child class') # pragma: no cover |
- |
- def _Post(self, url, data, timeout_seconds, |
- headers): # pylint: disable=W0613, R0201 |
- """Sends the actual HTTP POST request. |
- |
- Returns: |
- (status_code, content) |
- """ |
- raise NotImplementedError( |
- '_Post() should be implemented in the child class') # pragma: no cover |
- |
- def _Put(self, url, data, timeout_seconds, |
- headers): # pylint: disable=W0613, R0201 |
- """Sends the actual HTTP PUT request. |
- |
- Returns: |
- (status_code, content) |
- """ |
- raise NotImplementedError( |
- '_Put() should be implemented in the child class') # pragma: no cover |
- |
- def GetBackoff(self, retry_backoff, tries): |
- """Returns how many seconds to wait before next retry. |
- |
- When ``retry_backoff`` is more than 1, return an exponential backoff; |
- otherwise we keep it the same. |
- |
- Params: |
- retry_backoff (float): The base backoff in seconds. |
- tries (int): Indicates how many tries have been done. |
- """ |
- if retry_backoff > 1: |
- return retry_backoff * (2 ** (tries - 1)) |
- else: |
- return retry_backoff |
- |
- def _Retry(self, url, method, data=None, params=None, timeout_seconds=60, |
- max_retries=5, retry_backoff=1.5, headers=None): |
- if params and method == 'GET': |
- url = '%s?%s' % (url, urllib.urlencode(params)) |
- |
- tries = 0 |
- while tries < max_retries: |
- tries += 1 |
- |
- if method == 'POST': |
- status_code, content = self._Post(url, data, timeout_seconds, headers) |
- elif method == 'PUT': |
- status_code, content = self._Put(url, data, timeout_seconds, headers) |
- else: |
- status_code, content = self._Get(url, timeout_seconds, headers) |
- |
- if status_code in _NO_RETRY_CODE: |
- break |
- else: |
- time.sleep(self.GetBackoff(retry_backoff, tries)) |
- |
- return status_code, content |
- |
- def Get(self, url, params=None, timeout_seconds=60, |
- max_retries=5, retry_backoff=1.5, headers=None): |
- """Sends a GET request to the url with the given parameters and headers. |
- |
- Params: |
- url (str): The raw url to send request to. If ``params`` is specified, the |
- url should not include any parameter in it. |
- params (dict): A key-value dict of parameters to send in the request. |
- timeout_seconds (int): The timeout for read/write of the http request. |
- max_retries (int): The maxmium times of retries for the request when the |
- returning http status code is not in 200, 302, 401, 403, 404, or 501. |
- retry_backoff (float): The base backoff in seconds for retry. |
- |
- Returns: |
- (status_code, content) |
- """ |
- return self._Retry( |
- url, method='GET', data=None, params=params, |
- timeout_seconds=timeout_seconds, max_retries=max_retries, |
- retry_backoff=retry_backoff, headers=headers) |
- |
- def Post(self, url, data, timeout_seconds=60, |
- max_retries=5, retry_backoff=1.5, headers=None): |
- """Sends a POST request to the url with the given parameters and headers. |
- |
- Params: |
- url (str): The raw url to send request to. If ``params`` is specified, the |
- url should not include any parameter in it. |
- data (dict): The data to send for post request. |
- timeout_seconds (int): The timeout for read/write of the http request. |
- max_retries (int): The maximum times of retries for the request when the |
- returning http status code is not in 200, 302, 401, 403, 404, or 501. |
- retry_backoff (float): The base backoff in seconds for retry. |
- |
- Returns: |
- (status_code, content) |
- """ |
- return self._Retry( |
- url, method='POST', data=data, params=None, |
- timeout_seconds=timeout_seconds, max_retries=max_retries, |
- retry_backoff=retry_backoff, headers=headers) |
- |
- def Put(self, url, data, timeout_seconds=60, |
- max_retries=5, retry_backoff=1.5, headers=None): |
- """Sends a PUT request to the url with the given parameters and headers. |
- |
- Params: |
- url (str): The raw url to send request to. If ``params`` is specified, the |
- url should not include any parameter in it. |
- data (dict): The data to send for post request. |
- timeout_seconds (int): The timeout for read/write of the http request. |
- max_retries (int): The maximum times of retries for the request when the |
- returning http status code is not in 200, 302, 401, 403, 404, or 501. |
- retry_backoff (float): The base backoff in seconds for retry. |
- |
- Returns: |
- (status_code, content) |
- """ |
- return self._Retry( |
- url, method='PUT', data=data, params=None, |
- timeout_seconds=timeout_seconds, max_retries=max_retries, |
- retry_backoff=retry_backoff, headers=headers) |