codekingpro/portable-devtools
114k
1# coding: utf-82 3"""4 Kubernetes5 6 No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E5017 8 The version of the OpenAPI document: release-1.359 Generated by: https://openapi-generator.tech10"""11 12 13from __future__ import absolute_import14 15import io16import json17import logging18import re19import ssl20 21import certifi22# python 2 and python 3 compatibility library23import six24from six.moves.urllib.parse import urlencode25import urllib326 27from kubernetes.client.exceptions import ApiException, ApiValueError28from requests.utils import should_bypass_proxies29 30 31logger = logging.getLogger(__name__)32 33 34class RESTResponse(io.IOBase):35 36 def __init__(self, resp):37 self.urllib3_response = resp38 self.status = resp.status39 self.reason = resp.reason40 self.data = resp.data41 42 def getheaders(self):43 """Returns a dictionary of the response headers."""44 return self.urllib3_response.getheaders()45 46 def getheader(self, name, default=None):47 """Returns a given response header."""48 return self.urllib3_response.getheader(name, default)49 50 51class RESTClientObject(object):52 53 def __init__(self, configuration, pools_size=4, maxsize=None):54 # urllib3.PoolManager will pass all kw parameters to connectionpool55 # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E50156 # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E50157 # maxsize is the number of requests to host that are allowed in parallel # noqa: E50158 # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html # noqa: E50159 60 # cert_reqs61 if configuration.verify_ssl:62 cert_reqs = ssl.CERT_REQUIRED63 else:64 cert_reqs = ssl.CERT_NONE65 66 # ca_certs67 if configuration.ssl_ca_cert:68 ca_certs = configuration.ssl_ca_cert69 else:70 # if not set certificate file, use Mozilla's root certificates.71 ca_certs = certifi.where()72 73 addition_pool_args = {}74 if configuration.assert_hostname is not None:75 addition_pool_args['assert_hostname'] = configuration.assert_hostname # noqa: E50176 77 if configuration.retries is not None:78 addition_pool_args['retries'] = configuration.retries79 80 if configuration.tls_server_name:81 addition_pool_args['server_hostname'] = configuration.tls_server_name82 83 if maxsize is None:84 if configuration.connection_pool_maxsize is not None:85 maxsize = configuration.connection_pool_maxsize86 else:87 maxsize = 488 89 # https pool manager90 if configuration.proxy and not should_bypass_proxies(configuration.host, no_proxy=configuration.no_proxy or ''):91 self.pool_manager = urllib3.ProxyManager(92 num_pools=pools_size,93 maxsize=maxsize,94 cert_reqs=cert_reqs,95 ca_certs=ca_certs,96 cert_file=configuration.cert_file,97 key_file=configuration.key_file,98 proxy_url=configuration.proxy,99 proxy_headers=configuration.proxy_headers,100 **addition_pool_args101 )102 else:103 self.pool_manager = urllib3.PoolManager(104 num_pools=pools_size,105 maxsize=maxsize,106 cert_reqs=cert_reqs,107 ca_certs=ca_certs,108 cert_file=configuration.cert_file,109 key_file=configuration.key_file,110 **addition_pool_args111 )112 113 def request(self, method, url, query_params=None, headers=None,114 body=None, post_params=None, _preload_content=True,115 _request_timeout=None):116 """Perform requests.117 118 :param method: http request method119 :param url: http request url120 :param query_params: query parameters in the url121 :param headers: http request headers122 :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 will127 be returned without reading/decoding response128 data. Default is True.129 :param _request_timeout: timeout setting for this request. If one130 number provided, it will be total request131 timeout. It can also be a pair (tuple) of132 (connection, read) timeouts.133 """134 method = method.upper()135 assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT',136 'PATCH', 'OPTIONS']137 138 if post_params and body:139 raise ApiValueError(140 "body parameter cannot be used with post_params parameter."141 )142 143 post_params = post_params or {}144 headers = headers or {}145 146 timeout = None147 if _request_timeout:148 if isinstance(_request_timeout, (int, ) if six.PY3 else (int, long)): # noqa: E501,F821149 timeout = urllib3.Timeout(total=_request_timeout)150 elif (isinstance(_request_timeout, tuple) and151 len(_request_timeout) == 2):152 timeout = urllib3.Timeout(153 connect=_request_timeout[0], read=_request_timeout[1])154 155 if 'Content-Type' not in headers:156 headers['Content-Type'] = 'application/json'157 158 try:159 # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`160 if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']:161 if query_params:162 url += '?' + urlencode(query_params)163 if (re.search('json', headers['Content-Type'], re.IGNORECASE) or164 headers['Content-Type'] == 'application/apply-patch+yaml'):165 if headers['Content-Type'] == 'application/json-patch+json':166 if not isinstance(body, list):167 headers['Content-Type'] = \168 'application/strategic-merge-patch+json'169 request_body = None170 if body is not None:171 request_body = json.dumps(body)172 r = self.pool_manager.request(173 method, url,174 body=request_body,175 preload_content=_preload_content,176 timeout=timeout,177 headers=headers)178 elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501179 r = self.pool_manager.request(180 method, url,181 fields=post_params,182 encode_multipart=False,183 preload_content=_preload_content,184 timeout=timeout,185 headers=headers)186 elif headers['Content-Type'] == 'multipart/form-data':187 # must del headers['Content-Type'], or the correct188 # Content-Type which generated by urllib3 will be189 # overwritten.190 del headers['Content-Type']191 r = self.pool_manager.request(192 method, url,193 fields=post_params,194 encode_multipart=True,195 preload_content=_preload_content,196 timeout=timeout,197 headers=headers)198 # Pass a `string` parameter directly in the body to support199 # other content types than Json when `body` argument is200 # provided in serialized form201 elif isinstance(body, str) or isinstance(body, bytes):202 request_body = body203 r = self.pool_manager.request(204 method, url,205 body=request_body,206 preload_content=_preload_content,207 timeout=timeout,208 headers=headers)209 else:210 # Cannot generate the request from given parameters211 msg = """Cannot prepare a request message for provided212 arguments. Please check that your arguments match213 declared content type."""214 raise ApiException(status=0, reason=msg)215 # For `GET`, `HEAD`216 else:217 r = self.pool_manager.request(method, url,218 fields=query_params,219 preload_content=_preload_content,220 timeout=timeout,221 headers=headers)222 except urllib3.exceptions.SSLError as e:223 msg = "{0}\n{1}".format(type(e).__name__, str(e))224 raise ApiException(status=0, reason=msg)225 226 if _preload_content:227 r = RESTResponse(r)228 229 # In the python 3, the response.data is bytes.230 # we need to decode it to string.231 if six.PY3:232 r.data = r.data.decode('utf8')233 234 # log response body235 logger.debug("response body: %s", r.data)236 237 if not 200 <= r.status <= 299:238 raise ApiException(http_resp=r)239 240 return r241 242 def GET(self, url, headers=None, query_params=None, _preload_content=True,243 _request_timeout=None):244 return self.request("GET", url,245 headers=headers,246 _preload_content=_preload_content,247 _request_timeout=_request_timeout,248 query_params=query_params)249 250 def HEAD(self, url, headers=None, query_params=None, _preload_content=True,251 _request_timeout=None):252 return self.request("HEAD", url,253 headers=headers,254 _preload_content=_preload_content,255 _request_timeout=_request_timeout,256 query_params=query_params)257 258 def OPTIONS(self, url, headers=None, query_params=None, post_params=None,259 body=None, _preload_content=True, _request_timeout=None):260 return self.request("OPTIONS", url,261 headers=headers,262 query_params=query_params,263 post_params=post_params,264 _preload_content=_preload_content,265 _request_timeout=_request_timeout,266 body=body)267 268 def DELETE(self, url, headers=None, query_params=None, body=None,269 _preload_content=True, _request_timeout=None):270 return self.request("DELETE", url,271 headers=headers,272 query_params=query_params,273 _preload_content=_preload_content,274 _request_timeout=_request_timeout,275 body=body)276 277 def POST(self, url, headers=None, query_params=None, post_params=None,278 body=None, _preload_content=True, _request_timeout=None):279 return self.request("POST", url,280 headers=headers,281 query_params=query_params,282 post_params=post_params,283 _preload_content=_preload_content,284 _request_timeout=_request_timeout,285 body=body)286 287 def PUT(self, url, headers=None, query_params=None, post_params=None,288 body=None, _preload_content=True, _request_timeout=None):289 return self.request("PUT", url,290 headers=headers,291 query_params=query_params,292 post_params=post_params,293 _preload_content=_preload_content,294 _request_timeout=_request_timeout,295 body=body)296 297 def PATCH(self, url, headers=None, query_params=None, post_params=None,298 body=None, _preload_content=True, _request_timeout=None):299 return self.request("PATCH", url,300 headers=headers,301 query_params=query_params,302 post_params=post_params,303 _preload_content=_preload_content,304 _request_timeout=_request_timeout,305 body=body)306 