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 )
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!')
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.
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
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 )
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 )
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-urlencodedandmultipart/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.
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 )
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 )
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 )
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 )
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 )