X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c691e44f9183176581dd8da6417af16772baf510..78387b4fb0abf03bbc6523acec7babf1e6ef321b:/sdk/python/arvados/api.py diff --git a/sdk/python/arvados/api.py b/sdk/python/arvados/api.py index a227e436a3..949ead3644 100644 --- a/sdk/python/arvados/api.py +++ b/sdk/python/arvados/api.py @@ -21,6 +21,12 @@ class CredentialsFromToken(object): @staticmethod def http_request(self, uri, **kwargs): from httplib import BadStatusLine + + if (self.max_request_size and + kwargs.get('body') and + self.max_request_size < len(kwargs['body'])): + raise apiclient_errors.MediaUploadSizeError("Request size %i bytes exceeds published limit of %i bytes" % (len(kwargs['body']), self.max_request_size)) + if 'headers' not in kwargs: kwargs['headers'] = {} @@ -38,10 +44,12 @@ class CredentialsFromToken(object): # previous call did not succeed, so this is slightly # risky. return self.orig_http_request(uri, **kwargs) + def authorize(self, http): http.arvados_api_token = self.api_token http.orig_http_request = http.request http.request = types.MethodType(self.http_request, http) + http.max_request_size = 0 return http # Monkey patch discovery._cast() so objects and arrays get serialized @@ -147,6 +155,7 @@ def api(version=None, cache=True, host=None, token=None, insecure=False, **kwarg svc = apiclient_discovery.build('arvados', version, **kwargs) svc.api_token = token + kwargs['http'].max_request_size = svc._rootDesc.get('maxRequestSize', 0) kwargs['http'].cache = None return svc