X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/9e5b98e8f5f4727856b53447191f9c06e3da2ba6..f2f8340b18430738a9527f05e707dd8f03508cc0:/sdk/python/arvados/api.py diff --git a/sdk/python/arvados/api.py b/sdk/python/arvados/api.py index f24b1ed814..543725b516 100644 --- a/sdk/python/arvados/api.py +++ b/sdk/python/arvados/api.py @@ -15,6 +15,7 @@ from apiclient import errors as apiclient_errors import config import errors import util +import cache _logger = logging.getLogger('arvados.api') @@ -43,7 +44,7 @@ class OrderedJsonModel(apiclient.model.JsonModel): return body -def _intercept_http_request(self, uri, **kwargs): +def _intercept_http_request(self, uri, method="GET", **kwargs): if (self.max_request_size and kwargs.get('body') and self.max_request_size < len(kwargs['body'])): @@ -57,7 +58,7 @@ def _intercept_http_request(self, uri, **kwargs): kwargs['headers']['Authorization'] = 'OAuth2 %s' % self.arvados_api_token - retryable = kwargs.get('method', 'GET') in [ + retryable = method in [ 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PUT'] retry_count = self._retry_count if retryable else 0 @@ -74,7 +75,7 @@ def _intercept_http_request(self, uri, **kwargs): for _ in range(retry_count): self._last_request_time = time.time() try: - return self.orig_http_request(uri, **kwargs) + return self.orig_http_request(uri, method, **kwargs) except httplib.HTTPException: _logger.debug("Retrying API request in %d s after HTTP error", delay, exc_info=True) @@ -92,7 +93,7 @@ def _intercept_http_request(self, uri, **kwargs): delay = delay * self._retry_delay_backoff self._last_request_time = time.time() - return self.orig_http_request(uri, **kwargs) + return self.orig_http_request(uri, method, **kwargs) def _patch_http_request(http, api_token): http.arvados_api_token = api_token @@ -135,8 +136,8 @@ def http_cache(data_type): try: util.mkdir_dash_p(path) except OSError: - path = None - return path + return None + return cache.SafeHTTPCache(path, max_age=60*60*24*2) def api(version=None, cache=True, host=None, token=None, insecure=False, **kwargs): """Return an apiclient Resources object for an Arvados instance. @@ -205,7 +206,7 @@ def api(version=None, cache=True, host=None, token=None, insecure=False, **kwarg kwargs['http'] = _patch_http_request(kwargs['http'], token) - svc = apiclient_discovery.build('arvados', version, **kwargs) + svc = apiclient_discovery.build('arvados', version, cache_discovery=False, **kwargs) svc.api_token = token svc.insecure = insecure kwargs['http'].max_request_size = svc._rootDesc.get('maxRequestSize', 0)