docusign_esign.client.api_response

DocuSign REST API

The DocuSign REST API provides you with a powerful, convenient, and simple Web services API for interacting with DocuSign.

OpenAPI spec version: v2 Contact: devcenter@docusign.com Generated by: https://github.com/swagger-api/swagger-codegen.git

  1# coding: utf-8
  2
  3"""
  4    DocuSign REST API
  5
  6    The DocuSign REST API provides you with a powerful, convenient, and simple Web services API for interacting with DocuSign.
  7
  8    OpenAPI spec version: v2
  9    Contact: devcenter@docusign.com
 10    Generated by: https://github.com/swagger-api/swagger-codegen.git
 11"""
 12
 13import io
 14import certifi
 15import ssl
 16import re
 17import json
 18import logging
 19
 20from six import PY3
 21from six.moves.urllib.parse import urlencode
 22from .configuration import Configuration
 23from .api_exception import ApiException
 24
 25try:
 26    import urllib3
 27except ImportError:
 28    raise ImportError('Swagger python client requires urllib3.')
 29
 30logger = logging.getLogger(__name__)
 31
 32
 33class RESTResponse(io.IOBase):
 34
 35    def __init__(self, resp):
 36        self.urllib3_response = resp
 37        self.status = resp.status
 38        self.reason = resp.reason
 39        self.data = resp.data
 40
 41    def getheaders(self):
 42        """
 43        Returns a dictionary of the response headers.
 44        """
 45        return self.urllib3_response.getheaders()
 46
 47    def getheader(self, name, default=None):
 48        """
 49        Returns a given response header.
 50        """
 51        return self.urllib3_response.getheader(name, default)
 52
 53
 54class RESTClientObject(object):
 55
 56    def __init__(self, pools_size=4, maxsize=4):
 57        # urllib3.PoolManager will pass all kw parameters to connectionpool
 58        # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75
 59        # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680
 60        # maxsize is the number of requests to host that are allowed in parallel
 61        # ca_certs vs cert_file vs key_file
 62        # http://stackoverflow.com/a/23957365/2985775
 63
 64        # cert_reqs
 65        if Configuration().verify_ssl:
 66            cert_reqs = ssl.CERT_REQUIRED
 67        else:
 68            cert_reqs = ssl.CERT_NONE
 69
 70        # ca_certs
 71        if Configuration().ssl_ca_cert:
 72            ca_certs = Configuration().ssl_ca_cert
 73        else:
 74            # if not set certificate file, use Mozilla's root certificates.
 75            ca_certs = certifi.where()
 76
 77        # cert_file
 78        cert_file = Configuration().cert_file
 79
 80        # key file
 81        key_file = Configuration().key_file
 82
 83        # https pool manager
 84        self.pool_manager = urllib3.PoolManager(
 85            num_pools=pools_size,
 86            maxsize=maxsize,
 87            cert_reqs=cert_reqs,
 88            ca_certs=ca_certs,
 89            cert_file=cert_file,
 90            key_file=key_file
 91        )
 92
 93    def request(self, method, url, query_params=None, headers=None,
 94                body=None, post_params=None, _preload_content=True, _request_timeout=None):
 95        """
 96        :param method: http request method
 97        :param url: http request url
 98        :param query_params: query parameters in the url
 99        :param headers: http request headers
100        :param body: request json body, for `application/json`
101        :param post_params: request post parameters,
102                            `application/x-www-form-urlencoded`
103                            and `multipart/form-data`
104        :param _preload_content: if False, the urllib3.HTTPResponse object will be returned without
105                                 reading/decoding response data. Default is True.
106        :param _request_timeout: timeout setting for this request. If one number provided, it will be total request
107                                 timeout. It can also be a pair (tuple) of (connection, read) timeouts.
108        """
109        method = method.upper()
110        assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT', 'PATCH', 'OPTIONS']
111
112        if post_params and body:
113            raise ValueError(
114                "body parameter cannot be used with post_params parameter."
115            )
116
117        post_params = post_params or {}
118        headers = headers or {}
119
120        timeout = None
121        if _request_timeout:
122            if isinstance(_request_timeout, (int, ) if PY3 else (int, long)):
123                timeout = urllib3.Timeout(total=_request_timeout)
124            elif isinstance(_request_timeout, tuple) and len(_request_timeout) == 2:
125                timeout = urllib3.Timeout(connect=_request_timeout[0], read=_request_timeout[1])
126
127        if 'Content-Type' not in headers:
128            headers['Content-Type'] = 'application/json'
129
130        try:
131            # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`
132            if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']:
133                if query_params:
134                    url += '?' + urlencode(query_params)
135                if re.search('json', headers['Content-Type'], re.IGNORECASE):
136                    request_body = None
137                    if body:
138                        request_body = json.dumps(body)
139                    r = self.pool_manager.request(method, url,
140                                                  body=request_body,
141                                                  preload_content=_preload_content,
142                                                  timeout=timeout,
143                                                  headers=headers)
144                elif headers['Content-Type'] == 'application/x-www-form-urlencoded':
145                    r = self.pool_manager.request(method, url,
146                                                  fields=post_params,
147                                                  encode_multipart=False,
148                                                  preload_content=_preload_content,
149                                                  timeout=timeout,
150                                                  headers=headers)
151                elif headers['Content-Type'] == 'multipart/form-data':
152                    # must del headers['Content-Type'], or the correct Content-Type
153                    # which generated by urllib3 will be overwritten.
154                    del headers['Content-Type']
155                    is_content_disposition_type = False
156
157                    if len(post_params):
158                        [k, v] = post_params[0]
159                        [file_name, file_data, mime_type] = v
160                        if isinstance(file_data, bytes):
161                            headers['Content-Type'] = mime_type
162                            headers['Content-Disposition'] = 'form-data; name="' + k + '"; filename="' + file_name + '"'
163                            is_content_disposition_type = True
164
165                    if is_content_disposition_type:
166                        r = self.pool_manager.request(method, url,
167                                                      body=file_data,
168                                                      preload_content=_preload_content,
169                                                      timeout=timeout,
170                                                      headers=headers)
171                    else:
172                        r = self.pool_manager.request(method, url,
173                                                      fields=post_params,
174                                                      encode_multipart=True,
175                                                      preload_content=_preload_content,
176                                                      timeout=timeout,
177                                                      headers=headers)
178                # Pass a `string` parameter directly in the body to support
179                # other content types than Json when `body` argument is provided
180                # in serialized form
181                elif isinstance(body, str):
182                    request_body = body
183                    r = self.pool_manager.request(method, url,
184                                                  body=request_body,
185                                                  preload_content=_preload_content,
186                                                  timeout=timeout,
187                                                  headers=headers)
188                else:
189                    # Cannot generate the request from given parameters
190                    msg = """Cannot prepare a request message for provided arguments.
191                             Please check that your arguments match declared content type."""
192                    raise ApiException(status=0, reason=msg)
193            # For `GET`, `HEAD`
194            else:
195                r = self.pool_manager.request(method, url,
196                                              fields=query_params,
197                                              preload_content=_preload_content,
198                                              timeout=timeout,
199                                              headers=headers)
200        except urllib3.exceptions.SSLError as e:
201            msg = "{0}\n{1}".format(type(e).__name__, str(e))
202            raise ApiException(status=0, reason=msg)
203
204            # log response body
205            logger.debug("response body: %s", r.data)
206
207        if r.status not in range(200, 206):
208            raise ApiException(http_resp=r)
209
210        return r
211
212    def GET(self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None):
213        return self.request("GET", url,
214                            headers=headers,
215                            _preload_content=_preload_content,
216                            _request_timeout=_request_timeout,
217                            query_params=query_params)
218
219    def HEAD(self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None):
220        return self.request("HEAD", url,
221                            headers=headers,
222                            _preload_content=_preload_content,
223                            _request_timeout=_request_timeout,
224                            query_params=query_params)
225
226    def OPTIONS(self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True,
227                _request_timeout=None):
228        return self.request("OPTIONS", url,
229                            headers=headers,
230                            query_params=query_params,
231                            post_params=post_params,
232                            _preload_content=_preload_content,
233                            _request_timeout=_request_timeout,
234                            body=body)
235
236    def DELETE(self, url, headers=None, query_params=None, body=None, _preload_content=True, _request_timeout=None):
237        return self.request("DELETE", url,
238                            headers=headers,
239                            query_params=query_params,
240                            _preload_content=_preload_content,
241                            _request_timeout=_request_timeout,
242                            body=body)
243
244    def POST(self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True,
245             _request_timeout=None):
246        return self.request("POST", url,
247                            headers=headers,
248                            query_params=query_params,
249                            post_params=post_params,
250                            _preload_content=_preload_content,
251                            _request_timeout=_request_timeout,
252                            body=body)
253
254    def PUT(self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True,
255            _request_timeout=None):
256        return self.request("PUT", url,
257                            headers=headers,
258                            query_params=query_params,
259                            post_params=post_params,
260                            _preload_content=_preload_content,
261                            _request_timeout=_request_timeout,
262                            body=body)
263
264    def PATCH(self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True,
265              _request_timeout=None):
266        return self.request("PATCH", url,
267                            headers=headers,
268                            query_params=query_params,
269                            post_params=post_params,
270                            _preload_content=_preload_content,
271                            _request_timeout=_request_timeout,
272                            body=body)
class RESTResponse(io.IOBase):
34class RESTResponse(io.IOBase):
35
36    def __init__(self, resp):
37        self.urllib3_response = resp
38        self.status = resp.status
39        self.reason = resp.reason
40        self.data = resp.data
41
42    def getheaders(self):
43        """
44        Returns a dictionary of the response headers.
45        """
46        return self.urllib3_response.getheaders()
47
48    def getheader(self, name, default=None):
49        """
50        Returns a given response header.
51        """
52        return self.urllib3_response.getheader(name, default)

The abstract base class for all I/O classes, acting on streams of bytes. There is no public constructor.

This class provides dummy implementations for many methods that derived classes can override selectively; the default implementations represent a file that cannot be read, written or seeked.

Even though IOBase does not declare read, readinto, or write because their signatures will vary, implementations and clients should consider those methods part of the interface. Also, implementations may raise UnsupportedOperation when operations they do not support are called.

The basic type used for binary data read from or written to a file is bytes. Other bytes-like objects are accepted as method arguments too. In some cases (such as readinto), a writable object is required. Text I/O classes work with str data.

Note that calling any method (except additional calls to close(), which are ignored) on a closed stream should raise a ValueError.

IOBase (and its subclasses) support the iterator protocol, meaning that an IOBase object can be iterated over yielding the lines in a stream.

IOBase also supports the :keyword:with statement. In this example, fp is closed after the suite of the with statement is complete:

with open('spam.txt', 'r') as fp: fp.write('Spam and eggs!')

RESTResponse(resp)
36    def __init__(self, resp):
37        self.urllib3_response = resp
38        self.status = resp.status
39        self.reason = resp.reason
40        self.data = resp.data
def getheaders(self)
42    def getheaders(self):
43        """
44        Returns a dictionary of the response headers.
45        """
46        return self.urllib3_response.getheaders()

Returns a dictionary of the response headers.

def getheader(self, name, default=None)
48    def getheader(self, name, default=None):
49        """
50        Returns a given response header.
51        """
52        return self.urllib3_response.getheader(name, default)

Returns a given response header.

Inherited Members
_io._IOBase
seek
tell
truncate
flush
close
seekable
readable
writable
fileno
isatty
readline
readlines
writelines
closed
class RESTClientObject:
 55class RESTClientObject(object):
 56
 57    def __init__(self, pools_size=4, maxsize=4):
 58        # urllib3.PoolManager will pass all kw parameters to connectionpool
 59        # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75
 60        # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680
 61        # maxsize is the number of requests to host that are allowed in parallel
 62        # ca_certs vs cert_file vs key_file
 63        # http://stackoverflow.com/a/23957365/2985775
 64
 65        # cert_reqs
 66        if Configuration().verify_ssl:
 67            cert_reqs = ssl.CERT_REQUIRED
 68        else:
 69            cert_reqs = ssl.CERT_NONE
 70
 71        # ca_certs
 72        if Configuration().ssl_ca_cert:
 73            ca_certs = Configuration().ssl_ca_cert
 74        else:
 75            # if not set certificate file, use Mozilla's root certificates.
 76            ca_certs = certifi.where()
 77
 78        # cert_file
 79        cert_file = Configuration().cert_file
 80
 81        # key file
 82        key_file = Configuration().key_file
 83
 84        # https pool manager
 85        self.pool_manager = urllib3.PoolManager(
 86            num_pools=pools_size,
 87            maxsize=maxsize,
 88            cert_reqs=cert_reqs,
 89            ca_certs=ca_certs,
 90            cert_file=cert_file,
 91            key_file=key_file
 92        )
 93
 94    def request(self, method, url, query_params=None, headers=None,
 95                body=None, post_params=None, _preload_content=True, _request_timeout=None):
 96        """
 97        :param method: http request method
 98        :param url: http request url
 99        :param query_params: query parameters in the url
100        :param headers: http request headers
101        :param body: request json body, for `application/json`
102        :param post_params: request post parameters,
103                            `application/x-www-form-urlencoded`
104                            and `multipart/form-data`
105        :param _preload_content: if False, the urllib3.HTTPResponse object will be returned without
106                                 reading/decoding response data. Default is True.
107        :param _request_timeout: timeout setting for this request. If one number provided, it will be total request
108                                 timeout. It can also be a pair (tuple) of (connection, read) timeouts.
109        """
110        method = method.upper()
111        assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT', 'PATCH', 'OPTIONS']
112
113        if post_params and body:
114            raise ValueError(
115                "body parameter cannot be used with post_params parameter."
116            )
117
118        post_params = post_params or {}
119        headers = headers or {}
120
121        timeout = None
122        if _request_timeout:
123            if isinstance(_request_timeout, (int, ) if PY3 else (int, long)):
124                timeout = urllib3.Timeout(total=_request_timeout)
125            elif isinstance(_request_timeout, tuple) and len(_request_timeout) == 2:
126                timeout = urllib3.Timeout(connect=_request_timeout[0], read=_request_timeout[1])
127
128        if 'Content-Type' not in headers:
129            headers['Content-Type'] = 'application/json'
130
131        try:
132            # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`
133            if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']:
134                if query_params:
135                    url += '?' + urlencode(query_params)
136                if re.search('json', headers['Content-Type'], re.IGNORECASE):
137                    request_body = None
138                    if body:
139                        request_body = json.dumps(body)
140                    r = self.pool_manager.request(method, url,
141                                                  body=request_body,
142                                                  preload_content=_preload_content,
143                                                  timeout=timeout,
144                                                  headers=headers)
145                elif headers['Content-Type'] == 'application/x-www-form-urlencoded':
146                    r = self.pool_manager.request(method, url,
147                                                  fields=post_params,
148                                                  encode_multipart=False,
149                                                  preload_content=_preload_content,
150                                                  timeout=timeout,
151                                                  headers=headers)
152                elif headers['Content-Type'] == 'multipart/form-data':
153                    # must del headers['Content-Type'], or the correct Content-Type
154                    # which generated by urllib3 will be overwritten.
155                    del headers['Content-Type']
156                    is_content_disposition_type = False
157
158                    if len(post_params):
159                        [k, v] = post_params[0]
160                        [file_name, file_data, mime_type] = v
161                        if isinstance(file_data, bytes):
162                            headers['Content-Type'] = mime_type
163                            headers['Content-Disposition'] = 'form-data; name="' + k + '"; filename="' + file_name + '"'
164                            is_content_disposition_type = True
165
166                    if is_content_disposition_type:
167                        r = self.pool_manager.request(method, url,
168                                                      body=file_data,
169                                                      preload_content=_preload_content,
170                                                      timeout=timeout,
171                                                      headers=headers)
172                    else:
173                        r = self.pool_manager.request(method, url,
174                                                      fields=post_params,
175                                                      encode_multipart=True,
176                                                      preload_content=_preload_content,
177                                                      timeout=timeout,
178                                                      headers=headers)
179                # Pass a `string` parameter directly in the body to support
180                # other content types than Json when `body` argument is provided
181                # in serialized form
182                elif isinstance(body, str):
183                    request_body = body
184                    r = self.pool_manager.request(method, url,
185                                                  body=request_body,
186                                                  preload_content=_preload_content,
187                                                  timeout=timeout,
188                                                  headers=headers)
189                else:
190                    # Cannot generate the request from given parameters
191                    msg = """Cannot prepare a request message for provided arguments.
192                             Please check that your arguments match declared content type."""
193                    raise ApiException(status=0, reason=msg)
194            # For `GET`, `HEAD`
195            else:
196                r = self.pool_manager.request(method, url,
197                                              fields=query_params,
198                                              preload_content=_preload_content,
199                                              timeout=timeout,
200                                              headers=headers)
201        except urllib3.exceptions.SSLError as e:
202            msg = "{0}\n{1}".format(type(e).__name__, str(e))
203            raise ApiException(status=0, reason=msg)
204
205            # log response body
206            logger.debug("response body: %s", r.data)
207
208        if r.status not in range(200, 206):
209            raise ApiException(http_resp=r)
210
211        return r
212
213    def GET(self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None):
214        return self.request("GET", url,
215                            headers=headers,
216                            _preload_content=_preload_content,
217                            _request_timeout=_request_timeout,
218                            query_params=query_params)
219
220    def HEAD(self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None):
221        return self.request("HEAD", url,
222                            headers=headers,
223                            _preload_content=_preload_content,
224                            _request_timeout=_request_timeout,
225                            query_params=query_params)
226
227    def OPTIONS(self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True,
228                _request_timeout=None):
229        return self.request("OPTIONS", url,
230                            headers=headers,
231                            query_params=query_params,
232                            post_params=post_params,
233                            _preload_content=_preload_content,
234                            _request_timeout=_request_timeout,
235                            body=body)
236
237    def DELETE(self, url, headers=None, query_params=None, body=None, _preload_content=True, _request_timeout=None):
238        return self.request("DELETE", url,
239                            headers=headers,
240                            query_params=query_params,
241                            _preload_content=_preload_content,
242                            _request_timeout=_request_timeout,
243                            body=body)
244
245    def POST(self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True,
246             _request_timeout=None):
247        return self.request("POST", url,
248                            headers=headers,
249                            query_params=query_params,
250                            post_params=post_params,
251                            _preload_content=_preload_content,
252                            _request_timeout=_request_timeout,
253                            body=body)
254
255    def PUT(self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True,
256            _request_timeout=None):
257        return self.request("PUT", url,
258                            headers=headers,
259                            query_params=query_params,
260                            post_params=post_params,
261                            _preload_content=_preload_content,
262                            _request_timeout=_request_timeout,
263                            body=body)
264
265    def PATCH(self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True,
266              _request_timeout=None):
267        return self.request("PATCH", url,
268                            headers=headers,
269                            query_params=query_params,
270                            post_params=post_params,
271                            _preload_content=_preload_content,
272                            _request_timeout=_request_timeout,
273                            body=body)
RESTClientObject(pools_size=4, maxsize=4)
57    def __init__(self, pools_size=4, maxsize=4):
58        # urllib3.PoolManager will pass all kw parameters to connectionpool
59        # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75
60        # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680
61        # maxsize is the number of requests to host that are allowed in parallel
62        # ca_certs vs cert_file vs key_file
63        # http://stackoverflow.com/a/23957365/2985775
64
65        # cert_reqs
66        if Configuration().verify_ssl:
67            cert_reqs = ssl.CERT_REQUIRED
68        else:
69            cert_reqs = ssl.CERT_NONE
70
71        # ca_certs
72        if Configuration().ssl_ca_cert:
73            ca_certs = Configuration().ssl_ca_cert
74        else:
75            # if not set certificate file, use Mozilla's root certificates.
76            ca_certs = certifi.where()
77
78        # cert_file
79        cert_file = Configuration().cert_file
80
81        # key file
82        key_file = Configuration().key_file
83
84        # https pool manager
85        self.pool_manager = urllib3.PoolManager(
86            num_pools=pools_size,
87            maxsize=maxsize,
88            cert_reqs=cert_reqs,
89            ca_certs=ca_certs,
90            cert_file=cert_file,
91            key_file=key_file
92        )
def request( self, method, url, query_params=None, headers=None, body=None, post_params=None, _preload_content=True, _request_timeout=None)
 94    def request(self, method, url, query_params=None, headers=None,
 95                body=None, post_params=None, _preload_content=True, _request_timeout=None):
 96        """
 97        :param method: http request method
 98        :param url: http request url
 99        :param query_params: query parameters in the url
100        :param headers: http request headers
101        :param body: request json body, for `application/json`
102        :param post_params: request post parameters,
103                            `application/x-www-form-urlencoded`
104                            and `multipart/form-data`
105        :param _preload_content: if False, the urllib3.HTTPResponse object will be returned without
106                                 reading/decoding response data. Default is True.
107        :param _request_timeout: timeout setting for this request. If one number provided, it will be total request
108                                 timeout. It can also be a pair (tuple) of (connection, read) timeouts.
109        """
110        method = method.upper()
111        assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT', 'PATCH', 'OPTIONS']
112
113        if post_params and body:
114            raise ValueError(
115                "body parameter cannot be used with post_params parameter."
116            )
117
118        post_params = post_params or {}
119        headers = headers or {}
120
121        timeout = None
122        if _request_timeout:
123            if isinstance(_request_timeout, (int, ) if PY3 else (int, long)):
124                timeout = urllib3.Timeout(total=_request_timeout)
125            elif isinstance(_request_timeout, tuple) and len(_request_timeout) == 2:
126                timeout = urllib3.Timeout(connect=_request_timeout[0], read=_request_timeout[1])
127
128        if 'Content-Type' not in headers:
129            headers['Content-Type'] = 'application/json'
130
131        try:
132            # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`
133            if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']:
134                if query_params:
135                    url += '?' + urlencode(query_params)
136                if re.search('json', headers['Content-Type'], re.IGNORECASE):
137                    request_body = None
138                    if body:
139                        request_body = json.dumps(body)
140                    r = self.pool_manager.request(method, url,
141                                                  body=request_body,
142                                                  preload_content=_preload_content,
143                                                  timeout=timeout,
144                                                  headers=headers)
145                elif headers['Content-Type'] == 'application/x-www-form-urlencoded':
146                    r = self.pool_manager.request(method, url,
147                                                  fields=post_params,
148                                                  encode_multipart=False,
149                                                  preload_content=_preload_content,
150                                                  timeout=timeout,
151                                                  headers=headers)
152                elif headers['Content-Type'] == 'multipart/form-data':
153                    # must del headers['Content-Type'], or the correct Content-Type
154                    # which generated by urllib3 will be overwritten.
155                    del headers['Content-Type']
156                    is_content_disposition_type = False
157
158                    if len(post_params):
159                        [k, v] = post_params[0]
160                        [file_name, file_data, mime_type] = v
161                        if isinstance(file_data, bytes):
162                            headers['Content-Type'] = mime_type
163                            headers['Content-Disposition'] = 'form-data; name="' + k + '"; filename="' + file_name + '"'
164                            is_content_disposition_type = True
165
166                    if is_content_disposition_type:
167                        r = self.pool_manager.request(method, url,
168                                                      body=file_data,
169                                                      preload_content=_preload_content,
170                                                      timeout=timeout,
171                                                      headers=headers)
172                    else:
173                        r = self.pool_manager.request(method, url,
174                                                      fields=post_params,
175                                                      encode_multipart=True,
176                                                      preload_content=_preload_content,
177                                                      timeout=timeout,
178                                                      headers=headers)
179                # Pass a `string` parameter directly in the body to support
180                # other content types than Json when `body` argument is provided
181                # in serialized form
182                elif isinstance(body, str):
183                    request_body = body
184                    r = self.pool_manager.request(method, url,
185                                                  body=request_body,
186                                                  preload_content=_preload_content,
187                                                  timeout=timeout,
188                                                  headers=headers)
189                else:
190                    # Cannot generate the request from given parameters
191                    msg = """Cannot prepare a request message for provided arguments.
192                             Please check that your arguments match declared content type."""
193                    raise ApiException(status=0, reason=msg)
194            # For `GET`, `HEAD`
195            else:
196                r = self.pool_manager.request(method, url,
197                                              fields=query_params,
198                                              preload_content=_preload_content,
199                                              timeout=timeout,
200                                              headers=headers)
201        except urllib3.exceptions.SSLError as e:
202            msg = "{0}\n{1}".format(type(e).__name__, str(e))
203            raise ApiException(status=0, reason=msg)
204
205            # log response body
206            logger.debug("response body: %s", r.data)
207
208        if r.status not in range(200, 206):
209            raise ApiException(http_resp=r)
210
211        return r
Parameters
  • method: http request method
  • url: http request url
  • query_params: query parameters in the url
  • headers: http request headers
  • body: request json body, for application/json
  • post_params: request post parameters, application/x-www-form-urlencoded and multipart/form-data
  • _preload_content: if False, the urllib3.HTTPResponse object will be returned without reading/decoding response data. Default is True.
  • _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of (connection, read) timeouts.
def GET( self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None)
213    def GET(self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None):
214        return self.request("GET", url,
215                            headers=headers,
216                            _preload_content=_preload_content,
217                            _request_timeout=_request_timeout,
218                            query_params=query_params)
def HEAD( self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None)
220    def HEAD(self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None):
221        return self.request("HEAD", url,
222                            headers=headers,
223                            _preload_content=_preload_content,
224                            _request_timeout=_request_timeout,
225                            query_params=query_params)
def OPTIONS( self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True, _request_timeout=None)
227    def OPTIONS(self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True,
228                _request_timeout=None):
229        return self.request("OPTIONS", url,
230                            headers=headers,
231                            query_params=query_params,
232                            post_params=post_params,
233                            _preload_content=_preload_content,
234                            _request_timeout=_request_timeout,
235                            body=body)
def DELETE( self, url, headers=None, query_params=None, body=None, _preload_content=True, _request_timeout=None)
237    def DELETE(self, url, headers=None, query_params=None, body=None, _preload_content=True, _request_timeout=None):
238        return self.request("DELETE", url,
239                            headers=headers,
240                            query_params=query_params,
241                            _preload_content=_preload_content,
242                            _request_timeout=_request_timeout,
243                            body=body)
def POST( self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True, _request_timeout=None)
245    def POST(self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True,
246             _request_timeout=None):
247        return self.request("POST", url,
248                            headers=headers,
249                            query_params=query_params,
250                            post_params=post_params,
251                            _preload_content=_preload_content,
252                            _request_timeout=_request_timeout,
253                            body=body)
def PUT( self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True, _request_timeout=None)
255    def PUT(self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True,
256            _request_timeout=None):
257        return self.request("PUT", url,
258                            headers=headers,
259                            query_params=query_params,
260                            post_params=post_params,
261                            _preload_content=_preload_content,
262                            _request_timeout=_request_timeout,
263                            body=body)
def PATCH( self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True, _request_timeout=None)
265    def PATCH(self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True,
266              _request_timeout=None):
267        return self.request("PATCH", url,
268                            headers=headers,
269                            query_params=query_params,
270                            post_params=post_params,
271                            _preload_content=_preload_content,
272                            _request_timeout=_request_timeout,
273                            body=body)