pinecone.core.client.rest

Pinecone API

No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501

The version of the OpenAPI document: version not set Contact: support@pinecone.io Generated by: https://openapi-generator.tech

  1"""
  2    Pinecone API
  3
  4    No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)  # noqa: E501
  5
  6    The version of the OpenAPI document: version not set
  7    Contact: support@pinecone.io
  8    Generated by: https://openapi-generator.tech
  9"""
 10
 11
 12import io
 13import json
 14import logging
 15import re
 16import ssl
 17from urllib.parse import urlencode
 18
 19import urllib3
 20
 21from pinecone.core.client.exceptions import (
 22    ApiException,
 23    UnauthorizedException,
 24    ForbiddenException,
 25    NotFoundException,
 26    ServiceException,
 27    ApiValueError,
 28)
 29
 30
 31logger = logging.getLogger(__name__)
 32
 33
 34class RESTResponse(io.IOBase):
 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        """Returns a dictionary of the response headers."""
 43        return self.urllib3_response.headers
 44
 45    def getheader(self, name, default=None):
 46        """Returns a given response header."""
 47        return self.urllib3_response.headers.get(name, default)
 48
 49
 50class RESTClientObject(object):
 51    def __init__(self, configuration, pools_size=4, maxsize=None):
 52        # urllib3.PoolManager will pass all kw parameters to connectionpool
 53        # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75  # noqa: E501
 54        # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680  # noqa: E501
 55        # maxsize is the number of requests to host that are allowed in parallel  # noqa: E501
 56        # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html  # noqa: E501
 57
 58        # cert_reqs
 59        if configuration.verify_ssl:
 60            cert_reqs = ssl.CERT_REQUIRED
 61        else:
 62            cert_reqs = ssl.CERT_NONE
 63
 64        addition_pool_args = {}
 65        if configuration.assert_hostname is not None:
 66            addition_pool_args["assert_hostname"] = configuration.assert_hostname  # noqa: E501
 67
 68        if configuration.retries is not None:
 69            addition_pool_args["retries"] = configuration.retries
 70
 71        if configuration.socket_options is not None:
 72            addition_pool_args["socket_options"] = configuration.socket_options
 73
 74        if maxsize is None:
 75            if configuration.connection_pool_maxsize is not None:
 76                maxsize = configuration.connection_pool_maxsize
 77            else:
 78                maxsize = 4
 79
 80        # https pool manager
 81        if configuration.proxy:
 82            self.pool_manager = urllib3.ProxyManager(
 83                num_pools=pools_size,
 84                maxsize=maxsize,
 85                cert_reqs=cert_reqs,
 86                ca_certs=configuration.ssl_ca_cert,
 87                cert_file=configuration.cert_file,
 88                key_file=configuration.key_file,
 89                proxy_url=configuration.proxy,
 90                proxy_headers=configuration.proxy_headers,
 91                **addition_pool_args
 92            )
 93        else:
 94            self.pool_manager = urllib3.PoolManager(
 95                num_pools=pools_size,
 96                maxsize=maxsize,
 97                cert_reqs=cert_reqs,
 98                ca_certs=configuration.ssl_ca_cert,
 99                cert_file=configuration.cert_file,
100                key_file=configuration.key_file,
101                **addition_pool_args
102            )
103
104    def request(
105        self,
106        method,
107        url,
108        query_params=None,
109        headers=None,
110        body=None,
111        post_params=None,
112        _preload_content=True,
113        _request_timeout=None,
114    ):
115        """Perform requests.
116
117        :param method: http request method
118        :param url: http request url
119        :param query_params: query parameters in the url
120        :param headers: http request headers
121        :param body: request json body, for `application/json`
122        :param post_params: request post parameters,
123                            `application/x-www-form-urlencoded`
124                            and `multipart/form-data`
125        :param _preload_content: if False, the urllib3.HTTPResponse object will
126                                 be returned without reading/decoding response
127                                 data. Default is True.
128        :param _request_timeout: timeout setting for this request. If one
129                                 number provided, it will be total request
130                                 timeout. It can also be a pair (tuple) of
131                                 (connection, read) timeouts.
132        """
133        method = method.upper()
134        assert method in ["GET", "HEAD", "DELETE", "POST", "PUT", "PATCH", "OPTIONS"]
135
136        if post_params and body:
137            raise ApiValueError("body parameter cannot be used with post_params parameter.")
138
139        post_params = post_params or {}
140        headers = headers or {}
141
142        timeout = None
143        if _request_timeout:
144            if isinstance(_request_timeout, (int, float)):  # noqa: E501,F821
145                timeout = urllib3.Timeout(total=_request_timeout)
146            elif isinstance(_request_timeout, tuple) and len(_request_timeout) == 2:
147                timeout = urllib3.Timeout(connect=_request_timeout[0], read=_request_timeout[1])
148
149        try:
150            # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`
151            if method in ["POST", "PUT", "PATCH", "OPTIONS", "DELETE"]:
152                # Only set a default Content-Type for POST, PUT, PATCH and OPTIONS requests
153                if (method != "DELETE") and ("Content-Type" not in headers):
154                    headers["Content-Type"] = "application/json"
155                if query_params:
156                    url += "?" + urlencode(query_params)
157                if ("Content-Type" not in headers) or (re.search("json", headers["Content-Type"], re.IGNORECASE)):
158                    request_body = None
159                    if body is not None:
160                        request_body = json.dumps(body)
161                    r = self.pool_manager.request(
162                        method,
163                        url,
164                        body=request_body,
165                        preload_content=_preload_content,
166                        timeout=timeout,
167                        headers=headers,
168                    )
169                elif headers["Content-Type"] == "application/x-www-form-urlencoded":  # noqa: E501
170                    r = self.pool_manager.request(
171                        method,
172                        url,
173                        fields=post_params,
174                        encode_multipart=False,
175                        preload_content=_preload_content,
176                        timeout=timeout,
177                        headers=headers,
178                    )
179                elif headers["Content-Type"] == "multipart/form-data":
180                    # must del headers['Content-Type'], or the correct
181                    # Content-Type which generated by urllib3 will be
182                    # overwritten.
183                    del headers["Content-Type"]
184                    r = self.pool_manager.request(
185                        method,
186                        url,
187                        fields=post_params,
188                        encode_multipart=True,
189                        preload_content=_preload_content,
190                        timeout=timeout,
191                        headers=headers,
192                    )
193                # Pass a `string` parameter directly in the body to support
194                # other content types than Json when `body` argument is
195                # provided in serialized form
196                elif isinstance(body, str) or isinstance(body, bytes):
197                    request_body = body
198                    r = self.pool_manager.request(
199                        method,
200                        url,
201                        body=request_body,
202                        preload_content=_preload_content,
203                        timeout=timeout,
204                        headers=headers,
205                    )
206                else:
207                    # Cannot generate the request from given parameters
208                    msg = """Cannot prepare a request message for provided
209                             arguments. Please check that your arguments match
210                             declared content type."""
211                    raise ApiException(status=0, reason=msg)
212            # For `GET`, `HEAD`
213            else:
214                r = self.pool_manager.request(
215                    method, url, fields=query_params, preload_content=_preload_content, timeout=timeout, headers=headers
216                )
217        except urllib3.exceptions.SSLError as e:
218            msg = "{0}\n{1}".format(type(e).__name__, str(e))
219            raise ApiException(status=0, reason=msg)
220
221        if _preload_content:
222            r = RESTResponse(r)
223
224            # log response body
225            logger.debug("response body: %s", r.data)
226
227        if not 200 <= r.status <= 299:
228            if r.status == 401:
229                raise UnauthorizedException(http_resp=r)
230
231            if r.status == 403:
232                raise ForbiddenException(http_resp=r)
233
234            if r.status == 404:
235                raise NotFoundException(http_resp=r)
236
237            if 500 <= r.status <= 599:
238                raise ServiceException(http_resp=r)
239
240            raise ApiException(http_resp=r)
241
242        return r
243
244    def GET(self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None):
245        return self.request(
246            "GET",
247            url,
248            headers=headers,
249            _preload_content=_preload_content,
250            _request_timeout=_request_timeout,
251            query_params=query_params,
252        )
253
254    def HEAD(self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None):
255        return self.request(
256            "HEAD",
257            url,
258            headers=headers,
259            _preload_content=_preload_content,
260            _request_timeout=_request_timeout,
261            query_params=query_params,
262        )
263
264    def OPTIONS(
265        self,
266        url,
267        headers=None,
268        query_params=None,
269        post_params=None,
270        body=None,
271        _preload_content=True,
272        _request_timeout=None,
273    ):
274        return self.request(
275            "OPTIONS",
276            url,
277            headers=headers,
278            query_params=query_params,
279            post_params=post_params,
280            _preload_content=_preload_content,
281            _request_timeout=_request_timeout,
282            body=body,
283        )
284
285    def DELETE(self, url, headers=None, query_params=None, body=None, _preload_content=True, _request_timeout=None):
286        return self.request(
287            "DELETE",
288            url,
289            headers=headers,
290            query_params=query_params,
291            _preload_content=_preload_content,
292            _request_timeout=_request_timeout,
293            body=body,
294        )
295
296    def POST(
297        self,
298        url,
299        headers=None,
300        query_params=None,
301        post_params=None,
302        body=None,
303        _preload_content=True,
304        _request_timeout=None,
305    ):
306        return self.request(
307            "POST",
308            url,
309            headers=headers,
310            query_params=query_params,
311            post_params=post_params,
312            _preload_content=_preload_content,
313            _request_timeout=_request_timeout,
314            body=body,
315        )
316
317    def PUT(
318        self,
319        url,
320        headers=None,
321        query_params=None,
322        post_params=None,
323        body=None,
324        _preload_content=True,
325        _request_timeout=None,
326    ):
327        return self.request(
328            "PUT",
329            url,
330            headers=headers,
331            query_params=query_params,
332            post_params=post_params,
333            _preload_content=_preload_content,
334            _request_timeout=_request_timeout,
335            body=body,
336        )
337
338    def PATCH(
339        self,
340        url,
341        headers=None,
342        query_params=None,
343        post_params=None,
344        body=None,
345        _preload_content=True,
346        _request_timeout=None,
347    ):
348        return self.request(
349            "PATCH",
350            url,
351            headers=headers,
352            query_params=query_params,
353            post_params=post_params,
354            _preload_content=_preload_content,
355            _request_timeout=_request_timeout,
356            body=body,
357        )
logger = <Logger pinecone.core.client.rest (WARNING)>
class RESTResponse(io.IOBase):
35class RESTResponse(io.IOBase):
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        """Returns a dictionary of the response headers."""
44        return self.urllib3_response.headers
45
46    def getheader(self, name, default=None):
47        """Returns a given response header."""
48        return self.urllib3_response.headers.get(name, default)

The abstract base class for all I/O classes.

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
urllib3_response
status
reason
data
def getheaders(self):
42    def getheaders(self):
43        """Returns a dictionary of the response headers."""
44        return self.urllib3_response.headers

Returns a dictionary of the response headers.

def getheader(self, name, default=None):
46    def getheader(self, name, default=None):
47        """Returns a given response header."""
48        return self.urllib3_response.headers.get(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:
 51class RESTClientObject(object):
 52    def __init__(self, configuration, pools_size=4, maxsize=None):
 53        # urllib3.PoolManager will pass all kw parameters to connectionpool
 54        # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75  # noqa: E501
 55        # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680  # noqa: E501
 56        # maxsize is the number of requests to host that are allowed in parallel  # noqa: E501
 57        # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html  # noqa: E501
 58
 59        # cert_reqs
 60        if configuration.verify_ssl:
 61            cert_reqs = ssl.CERT_REQUIRED
 62        else:
 63            cert_reqs = ssl.CERT_NONE
 64
 65        addition_pool_args = {}
 66        if configuration.assert_hostname is not None:
 67            addition_pool_args["assert_hostname"] = configuration.assert_hostname  # noqa: E501
 68
 69        if configuration.retries is not None:
 70            addition_pool_args["retries"] = configuration.retries
 71
 72        if configuration.socket_options is not None:
 73            addition_pool_args["socket_options"] = configuration.socket_options
 74
 75        if maxsize is None:
 76            if configuration.connection_pool_maxsize is not None:
 77                maxsize = configuration.connection_pool_maxsize
 78            else:
 79                maxsize = 4
 80
 81        # https pool manager
 82        if configuration.proxy:
 83            self.pool_manager = urllib3.ProxyManager(
 84                num_pools=pools_size,
 85                maxsize=maxsize,
 86                cert_reqs=cert_reqs,
 87                ca_certs=configuration.ssl_ca_cert,
 88                cert_file=configuration.cert_file,
 89                key_file=configuration.key_file,
 90                proxy_url=configuration.proxy,
 91                proxy_headers=configuration.proxy_headers,
 92                **addition_pool_args
 93            )
 94        else:
 95            self.pool_manager = urllib3.PoolManager(
 96                num_pools=pools_size,
 97                maxsize=maxsize,
 98                cert_reqs=cert_reqs,
 99                ca_certs=configuration.ssl_ca_cert,
100                cert_file=configuration.cert_file,
101                key_file=configuration.key_file,
102                **addition_pool_args
103            )
104
105    def request(
106        self,
107        method,
108        url,
109        query_params=None,
110        headers=None,
111        body=None,
112        post_params=None,
113        _preload_content=True,
114        _request_timeout=None,
115    ):
116        """Perform requests.
117
118        :param method: http request method
119        :param url: http request url
120        :param query_params: query parameters in the url
121        :param headers: http request headers
122        :param body: request json body, for `application/json`
123        :param post_params: request post parameters,
124                            `application/x-www-form-urlencoded`
125                            and `multipart/form-data`
126        :param _preload_content: if False, the urllib3.HTTPResponse object will
127                                 be returned without reading/decoding response
128                                 data. Default is True.
129        :param _request_timeout: timeout setting for this request. If one
130                                 number provided, it will be total request
131                                 timeout. It can also be a pair (tuple) of
132                                 (connection, read) timeouts.
133        """
134        method = method.upper()
135        assert method in ["GET", "HEAD", "DELETE", "POST", "PUT", "PATCH", "OPTIONS"]
136
137        if post_params and body:
138            raise ApiValueError("body parameter cannot be used with post_params parameter.")
139
140        post_params = post_params or {}
141        headers = headers or {}
142
143        timeout = None
144        if _request_timeout:
145            if isinstance(_request_timeout, (int, float)):  # noqa: E501,F821
146                timeout = urllib3.Timeout(total=_request_timeout)
147            elif isinstance(_request_timeout, tuple) and len(_request_timeout) == 2:
148                timeout = urllib3.Timeout(connect=_request_timeout[0], read=_request_timeout[1])
149
150        try:
151            # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`
152            if method in ["POST", "PUT", "PATCH", "OPTIONS", "DELETE"]:
153                # Only set a default Content-Type for POST, PUT, PATCH and OPTIONS requests
154                if (method != "DELETE") and ("Content-Type" not in headers):
155                    headers["Content-Type"] = "application/json"
156                if query_params:
157                    url += "?" + urlencode(query_params)
158                if ("Content-Type" not in headers) or (re.search("json", headers["Content-Type"], re.IGNORECASE)):
159                    request_body = None
160                    if body is not None:
161                        request_body = json.dumps(body)
162                    r = self.pool_manager.request(
163                        method,
164                        url,
165                        body=request_body,
166                        preload_content=_preload_content,
167                        timeout=timeout,
168                        headers=headers,
169                    )
170                elif headers["Content-Type"] == "application/x-www-form-urlencoded":  # noqa: E501
171                    r = self.pool_manager.request(
172                        method,
173                        url,
174                        fields=post_params,
175                        encode_multipart=False,
176                        preload_content=_preload_content,
177                        timeout=timeout,
178                        headers=headers,
179                    )
180                elif headers["Content-Type"] == "multipart/form-data":
181                    # must del headers['Content-Type'], or the correct
182                    # Content-Type which generated by urllib3 will be
183                    # overwritten.
184                    del headers["Content-Type"]
185                    r = self.pool_manager.request(
186                        method,
187                        url,
188                        fields=post_params,
189                        encode_multipart=True,
190                        preload_content=_preload_content,
191                        timeout=timeout,
192                        headers=headers,
193                    )
194                # Pass a `string` parameter directly in the body to support
195                # other content types than Json when `body` argument is
196                # provided in serialized form
197                elif isinstance(body, str) or isinstance(body, bytes):
198                    request_body = body
199                    r = self.pool_manager.request(
200                        method,
201                        url,
202                        body=request_body,
203                        preload_content=_preload_content,
204                        timeout=timeout,
205                        headers=headers,
206                    )
207                else:
208                    # Cannot generate the request from given parameters
209                    msg = """Cannot prepare a request message for provided
210                             arguments. Please check that your arguments match
211                             declared content type."""
212                    raise ApiException(status=0, reason=msg)
213            # For `GET`, `HEAD`
214            else:
215                r = self.pool_manager.request(
216                    method, url, fields=query_params, preload_content=_preload_content, timeout=timeout, headers=headers
217                )
218        except urllib3.exceptions.SSLError as e:
219            msg = "{0}\n{1}".format(type(e).__name__, str(e))
220            raise ApiException(status=0, reason=msg)
221
222        if _preload_content:
223            r = RESTResponse(r)
224
225            # log response body
226            logger.debug("response body: %s", r.data)
227
228        if not 200 <= r.status <= 299:
229            if r.status == 401:
230                raise UnauthorizedException(http_resp=r)
231
232            if r.status == 403:
233                raise ForbiddenException(http_resp=r)
234
235            if r.status == 404:
236                raise NotFoundException(http_resp=r)
237
238            if 500 <= r.status <= 599:
239                raise ServiceException(http_resp=r)
240
241            raise ApiException(http_resp=r)
242
243        return r
244
245    def GET(self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None):
246        return self.request(
247            "GET",
248            url,
249            headers=headers,
250            _preload_content=_preload_content,
251            _request_timeout=_request_timeout,
252            query_params=query_params,
253        )
254
255    def HEAD(self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None):
256        return self.request(
257            "HEAD",
258            url,
259            headers=headers,
260            _preload_content=_preload_content,
261            _request_timeout=_request_timeout,
262            query_params=query_params,
263        )
264
265    def OPTIONS(
266        self,
267        url,
268        headers=None,
269        query_params=None,
270        post_params=None,
271        body=None,
272        _preload_content=True,
273        _request_timeout=None,
274    ):
275        return self.request(
276            "OPTIONS",
277            url,
278            headers=headers,
279            query_params=query_params,
280            post_params=post_params,
281            _preload_content=_preload_content,
282            _request_timeout=_request_timeout,
283            body=body,
284        )
285
286    def DELETE(self, url, headers=None, query_params=None, body=None, _preload_content=True, _request_timeout=None):
287        return self.request(
288            "DELETE",
289            url,
290            headers=headers,
291            query_params=query_params,
292            _preload_content=_preload_content,
293            _request_timeout=_request_timeout,
294            body=body,
295        )
296
297    def POST(
298        self,
299        url,
300        headers=None,
301        query_params=None,
302        post_params=None,
303        body=None,
304        _preload_content=True,
305        _request_timeout=None,
306    ):
307        return self.request(
308            "POST",
309            url,
310            headers=headers,
311            query_params=query_params,
312            post_params=post_params,
313            _preload_content=_preload_content,
314            _request_timeout=_request_timeout,
315            body=body,
316        )
317
318    def PUT(
319        self,
320        url,
321        headers=None,
322        query_params=None,
323        post_params=None,
324        body=None,
325        _preload_content=True,
326        _request_timeout=None,
327    ):
328        return self.request(
329            "PUT",
330            url,
331            headers=headers,
332            query_params=query_params,
333            post_params=post_params,
334            _preload_content=_preload_content,
335            _request_timeout=_request_timeout,
336            body=body,
337        )
338
339    def PATCH(
340        self,
341        url,
342        headers=None,
343        query_params=None,
344        post_params=None,
345        body=None,
346        _preload_content=True,
347        _request_timeout=None,
348    ):
349        return self.request(
350            "PATCH",
351            url,
352            headers=headers,
353            query_params=query_params,
354            post_params=post_params,
355            _preload_content=_preload_content,
356            _request_timeout=_request_timeout,
357            body=body,
358        )
RESTClientObject(configuration, pools_size=4, maxsize=None)
 52    def __init__(self, configuration, pools_size=4, maxsize=None):
 53        # urllib3.PoolManager will pass all kw parameters to connectionpool
 54        # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75  # noqa: E501
 55        # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680  # noqa: E501
 56        # maxsize is the number of requests to host that are allowed in parallel  # noqa: E501
 57        # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html  # noqa: E501
 58
 59        # cert_reqs
 60        if configuration.verify_ssl:
 61            cert_reqs = ssl.CERT_REQUIRED
 62        else:
 63            cert_reqs = ssl.CERT_NONE
 64
 65        addition_pool_args = {}
 66        if configuration.assert_hostname is not None:
 67            addition_pool_args["assert_hostname"] = configuration.assert_hostname  # noqa: E501
 68
 69        if configuration.retries is not None:
 70            addition_pool_args["retries"] = configuration.retries
 71
 72        if configuration.socket_options is not None:
 73            addition_pool_args["socket_options"] = configuration.socket_options
 74
 75        if maxsize is None:
 76            if configuration.connection_pool_maxsize is not None:
 77                maxsize = configuration.connection_pool_maxsize
 78            else:
 79                maxsize = 4
 80
 81        # https pool manager
 82        if configuration.proxy:
 83            self.pool_manager = urllib3.ProxyManager(
 84                num_pools=pools_size,
 85                maxsize=maxsize,
 86                cert_reqs=cert_reqs,
 87                ca_certs=configuration.ssl_ca_cert,
 88                cert_file=configuration.cert_file,
 89                key_file=configuration.key_file,
 90                proxy_url=configuration.proxy,
 91                proxy_headers=configuration.proxy_headers,
 92                **addition_pool_args
 93            )
 94        else:
 95            self.pool_manager = urllib3.PoolManager(
 96                num_pools=pools_size,
 97                maxsize=maxsize,
 98                cert_reqs=cert_reqs,
 99                ca_certs=configuration.ssl_ca_cert,
100                cert_file=configuration.cert_file,
101                key_file=configuration.key_file,
102                **addition_pool_args
103            )
def request( self, method, url, query_params=None, headers=None, body=None, post_params=None, _preload_content=True, _request_timeout=None):
105    def request(
106        self,
107        method,
108        url,
109        query_params=None,
110        headers=None,
111        body=None,
112        post_params=None,
113        _preload_content=True,
114        _request_timeout=None,
115    ):
116        """Perform requests.
117
118        :param method: http request method
119        :param url: http request url
120        :param query_params: query parameters in the url
121        :param headers: http request headers
122        :param body: request json body, for `application/json`
123        :param post_params: request post parameters,
124                            `application/x-www-form-urlencoded`
125                            and `multipart/form-data`
126        :param _preload_content: if False, the urllib3.HTTPResponse object will
127                                 be returned without reading/decoding response
128                                 data. Default is True.
129        :param _request_timeout: timeout setting for this request. If one
130                                 number provided, it will be total request
131                                 timeout. It can also be a pair (tuple) of
132                                 (connection, read) timeouts.
133        """
134        method = method.upper()
135        assert method in ["GET", "HEAD", "DELETE", "POST", "PUT", "PATCH", "OPTIONS"]
136
137        if post_params and body:
138            raise ApiValueError("body parameter cannot be used with post_params parameter.")
139
140        post_params = post_params or {}
141        headers = headers or {}
142
143        timeout = None
144        if _request_timeout:
145            if isinstance(_request_timeout, (int, float)):  # noqa: E501,F821
146                timeout = urllib3.Timeout(total=_request_timeout)
147            elif isinstance(_request_timeout, tuple) and len(_request_timeout) == 2:
148                timeout = urllib3.Timeout(connect=_request_timeout[0], read=_request_timeout[1])
149
150        try:
151            # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`
152            if method in ["POST", "PUT", "PATCH", "OPTIONS", "DELETE"]:
153                # Only set a default Content-Type for POST, PUT, PATCH and OPTIONS requests
154                if (method != "DELETE") and ("Content-Type" not in headers):
155                    headers["Content-Type"] = "application/json"
156                if query_params:
157                    url += "?" + urlencode(query_params)
158                if ("Content-Type" not in headers) or (re.search("json", headers["Content-Type"], re.IGNORECASE)):
159                    request_body = None
160                    if body is not None:
161                        request_body = json.dumps(body)
162                    r = self.pool_manager.request(
163                        method,
164                        url,
165                        body=request_body,
166                        preload_content=_preload_content,
167                        timeout=timeout,
168                        headers=headers,
169                    )
170                elif headers["Content-Type"] == "application/x-www-form-urlencoded":  # noqa: E501
171                    r = self.pool_manager.request(
172                        method,
173                        url,
174                        fields=post_params,
175                        encode_multipart=False,
176                        preload_content=_preload_content,
177                        timeout=timeout,
178                        headers=headers,
179                    )
180                elif headers["Content-Type"] == "multipart/form-data":
181                    # must del headers['Content-Type'], or the correct
182                    # Content-Type which generated by urllib3 will be
183                    # overwritten.
184                    del headers["Content-Type"]
185                    r = self.pool_manager.request(
186                        method,
187                        url,
188                        fields=post_params,
189                        encode_multipart=True,
190                        preload_content=_preload_content,
191                        timeout=timeout,
192                        headers=headers,
193                    )
194                # Pass a `string` parameter directly in the body to support
195                # other content types than Json when `body` argument is
196                # provided in serialized form
197                elif isinstance(body, str) or isinstance(body, bytes):
198                    request_body = body
199                    r = self.pool_manager.request(
200                        method,
201                        url,
202                        body=request_body,
203                        preload_content=_preload_content,
204                        timeout=timeout,
205                        headers=headers,
206                    )
207                else:
208                    # Cannot generate the request from given parameters
209                    msg = """Cannot prepare a request message for provided
210                             arguments. Please check that your arguments match
211                             declared content type."""
212                    raise ApiException(status=0, reason=msg)
213            # For `GET`, `HEAD`
214            else:
215                r = self.pool_manager.request(
216                    method, url, fields=query_params, preload_content=_preload_content, timeout=timeout, headers=headers
217                )
218        except urllib3.exceptions.SSLError as e:
219            msg = "{0}\n{1}".format(type(e).__name__, str(e))
220            raise ApiException(status=0, reason=msg)
221
222        if _preload_content:
223            r = RESTResponse(r)
224
225            # log response body
226            logger.debug("response body: %s", r.data)
227
228        if not 200 <= r.status <= 299:
229            if r.status == 401:
230                raise UnauthorizedException(http_resp=r)
231
232            if r.status == 403:
233                raise ForbiddenException(http_resp=r)
234
235            if r.status == 404:
236                raise NotFoundException(http_resp=r)
237
238            if 500 <= r.status <= 599:
239                raise ServiceException(http_resp=r)
240
241            raise ApiException(http_resp=r)
242
243        return r

Perform requests.

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):
245    def GET(self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None):
246        return self.request(
247            "GET",
248            url,
249            headers=headers,
250            _preload_content=_preload_content,
251            _request_timeout=_request_timeout,
252            query_params=query_params,
253        )
def HEAD( self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None):
255    def HEAD(self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None):
256        return self.request(
257            "HEAD",
258            url,
259            headers=headers,
260            _preload_content=_preload_content,
261            _request_timeout=_request_timeout,
262            query_params=query_params,
263        )
def OPTIONS( self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True, _request_timeout=None):
265    def OPTIONS(
266        self,
267        url,
268        headers=None,
269        query_params=None,
270        post_params=None,
271        body=None,
272        _preload_content=True,
273        _request_timeout=None,
274    ):
275        return self.request(
276            "OPTIONS",
277            url,
278            headers=headers,
279            query_params=query_params,
280            post_params=post_params,
281            _preload_content=_preload_content,
282            _request_timeout=_request_timeout,
283            body=body,
284        )
def DELETE( self, url, headers=None, query_params=None, body=None, _preload_content=True, _request_timeout=None):
286    def DELETE(self, url, headers=None, query_params=None, body=None, _preload_content=True, _request_timeout=None):
287        return self.request(
288            "DELETE",
289            url,
290            headers=headers,
291            query_params=query_params,
292            _preload_content=_preload_content,
293            _request_timeout=_request_timeout,
294            body=body,
295        )
def POST( self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True, _request_timeout=None):
297    def POST(
298        self,
299        url,
300        headers=None,
301        query_params=None,
302        post_params=None,
303        body=None,
304        _preload_content=True,
305        _request_timeout=None,
306    ):
307        return self.request(
308            "POST",
309            url,
310            headers=headers,
311            query_params=query_params,
312            post_params=post_params,
313            _preload_content=_preload_content,
314            _request_timeout=_request_timeout,
315            body=body,
316        )
def PUT( self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True, _request_timeout=None):
318    def PUT(
319        self,
320        url,
321        headers=None,
322        query_params=None,
323        post_params=None,
324        body=None,
325        _preload_content=True,
326        _request_timeout=None,
327    ):
328        return self.request(
329            "PUT",
330            url,
331            headers=headers,
332            query_params=query_params,
333            post_params=post_params,
334            _preload_content=_preload_content,
335            _request_timeout=_request_timeout,
336            body=body,
337        )
def PATCH( self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True, _request_timeout=None):
339    def PATCH(
340        self,
341        url,
342        headers=None,
343        query_params=None,
344        post_params=None,
345        body=None,
346        _preload_content=True,
347        _request_timeout=None,
348    ):
349        return self.request(
350            "PATCH",
351            url,
352            headers=headers,
353            query_params=query_params,
354            post_params=post_params,
355            _preload_content=_preload_content,
356            _request_timeout=_request_timeout,
357            body=body,
358        )