6 This is the initial REST API for RIC subscription # noqa: E501
8 OpenAPI spec version: 0.0.4
10 Generated by: https://github.com/swagger-api/swagger-codegen.git
14 from __future__ import absolute_import
23 # python 2 and python 3 compatibility library
25 from six.moves.urllib.parse import urlencode
30 raise ImportError('Swagger python client requires urllib3.')
33 logger = logging.getLogger(__name__)
36 class RESTResponse(io.IOBase):
38 def __init__(self, resp):
39 self.urllib3_response = resp
40 self.status = resp.status
41 self.reason = resp.reason
45 """Returns a dictionary of the response headers."""
46 return self.urllib3_response.getheaders()
48 def getheader(self, name, default=None):
49 """Returns a given response header."""
50 return self.urllib3_response.getheader(name, default)
53 class RESTClientObject(object):
55 def __init__(self, configuration, pools_size=4, maxsize=None):
56 # urllib3.PoolManager will pass all kw parameters to connectionpool
57 # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501
58 # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E501
59 # maxsize is the number of requests to host that are allowed in parallel # noqa: E501
60 # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html # noqa: E501
63 if configuration.verify_ssl:
64 cert_reqs = ssl.CERT_REQUIRED
66 cert_reqs = ssl.CERT_NONE
69 if configuration.ssl_ca_cert:
70 ca_certs = configuration.ssl_ca_cert
72 # if not set certificate file, use Mozilla's root certificates.
73 ca_certs = certifi.where()
75 addition_pool_args = {}
76 if configuration.assert_hostname is not None:
77 addition_pool_args['assert_hostname'] = configuration.assert_hostname # noqa: E501
80 if configuration.connection_pool_maxsize is not None:
81 maxsize = configuration.connection_pool_maxsize
86 if configuration.proxy:
87 self.pool_manager = urllib3.ProxyManager(
92 cert_file=configuration.cert_file,
93 key_file=configuration.key_file,
94 proxy_url=configuration.proxy,
98 self.pool_manager = urllib3.PoolManager(
103 cert_file=configuration.cert_file,
104 key_file=configuration.key_file,
108 def request(self, method, url, query_params=None, headers=None,
109 body=None, post_params=None, _preload_content=True,
110 _request_timeout=None):
113 :param method: http request method
114 :param url: http request url
115 :param query_params: query parameters in the url
116 :param headers: http request headers
117 :param body: request json body, for `application/json`
118 :param post_params: request post parameters,
119 `application/x-www-form-urlencoded`
120 and `multipart/form-data`
121 :param _preload_content: if False, the urllib3.HTTPResponse object will
122 be returned without reading/decoding response
123 data. Default is True.
124 :param _request_timeout: timeout setting for this request. If one
125 number provided, it will be total request
126 timeout. It can also be a pair (tuple) of
127 (connection, read) timeouts.
129 method = method.upper()
130 assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT',
133 if post_params and body:
135 "body parameter cannot be used with post_params parameter."
138 post_params = post_params or {}
139 headers = headers or {}
143 if isinstance(_request_timeout, (int, ) if six.PY3 else (int, long)): # noqa: E501,F821
144 timeout = urllib3.Timeout(total=_request_timeout)
145 elif (isinstance(_request_timeout, tuple) and
146 len(_request_timeout) == 2):
147 timeout = urllib3.Timeout(
148 connect=_request_timeout[0], read=_request_timeout[1])
150 if 'Content-Type' not in headers:
151 headers['Content-Type'] = 'application/json'
154 # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`
155 if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']:
157 url += '?' + urlencode(query_params)
158 if re.search('json', headers['Content-Type'], re.IGNORECASE):
161 request_body = json.dumps(body)
162 r = self.pool_manager.request(
165 preload_content=_preload_content,
168 elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501
169 r = self.pool_manager.request(
172 encode_multipart=False,
173 preload_content=_preload_content,
176 elif headers['Content-Type'] == 'multipart/form-data':
177 # must del headers['Content-Type'], or the correct
178 # Content-Type which generated by urllib3 will be
180 del headers['Content-Type']
181 r = self.pool_manager.request(
184 encode_multipart=True,
185 preload_content=_preload_content,
188 # Pass a `string` parameter directly in the body to support
189 # other content types than Json when `body` argument is
190 # provided in serialized form
191 elif isinstance(body, str):
193 r = self.pool_manager.request(
196 preload_content=_preload_content,
200 # Cannot generate the request from given parameters
201 msg = """Cannot prepare a request message for provided
202 arguments. Please check that your arguments match
203 declared content type."""
204 raise ApiException(status=0, reason=msg)
207 r = self.pool_manager.request(method, url,
209 preload_content=_preload_content,
212 except urllib3.exceptions.SSLError as e:
213 msg = "{0}\n{1}".format(type(e).__name__, str(e))
214 raise ApiException(status=0, reason=msg)
219 # In the python 3, the response.data is bytes.
220 # we need to decode it to string.
222 r.data = r.data.decode('utf8')
225 logger.debug("response body: %s", r.data)
227 if not 200 <= r.status <= 299:
228 raise ApiException(http_resp=r)
232 def GET(self, url, headers=None, query_params=None, _preload_content=True,
233 _request_timeout=None):
234 return self.request("GET", url,
236 _preload_content=_preload_content,
237 _request_timeout=_request_timeout,
238 query_params=query_params)
240 def HEAD(self, url, headers=None, query_params=None, _preload_content=True,
241 _request_timeout=None):
242 return self.request("HEAD", url,
244 _preload_content=_preload_content,
245 _request_timeout=_request_timeout,
246 query_params=query_params)
248 def OPTIONS(self, url, headers=None, query_params=None, post_params=None,
249 body=None, _preload_content=True, _request_timeout=None):
250 return self.request("OPTIONS", url,
252 query_params=query_params,
253 post_params=post_params,
254 _preload_content=_preload_content,
255 _request_timeout=_request_timeout,
258 def DELETE(self, url, headers=None, query_params=None, body=None,
259 _preload_content=True, _request_timeout=None):
260 return self.request("DELETE", url,
262 query_params=query_params,
263 _preload_content=_preload_content,
264 _request_timeout=_request_timeout,
267 def POST(self, url, headers=None, query_params=None, post_params=None,
268 body=None, _preload_content=True, _request_timeout=None):
269 return self.request("POST", url,
271 query_params=query_params,
272 post_params=post_params,
273 _preload_content=_preload_content,
274 _request_timeout=_request_timeout,
277 def PUT(self, url, headers=None, query_params=None, post_params=None,
278 body=None, _preload_content=True, _request_timeout=None):
279 return self.request("PUT", url,
281 query_params=query_params,
282 post_params=post_params,
283 _preload_content=_preload_content,
284 _request_timeout=_request_timeout,
287 def PATCH(self, url, headers=None, query_params=None, post_params=None,
288 body=None, _preload_content=True, _request_timeout=None):
289 return self.request("PATCH", url,
291 query_params=query_params,
292 post_params=post_params,
293 _preload_content=_preload_content,
294 _request_timeout=_request_timeout,
298 class ApiException(Exception):
300 def __init__(self, status=None, reason=None, http_resp=None):
302 self.status = http_resp.status
303 self.reason = http_resp.reason
304 self.body = http_resp.data
305 self.headers = http_resp.getheaders()
313 """Custom error messages for exception"""
314 error_message = "({0})\n"\
315 "Reason: {1}\n".format(self.status, self.reason)
317 error_message += "HTTP response headers: {0}\n".format(
321 error_message += "HTTP response body: {0}\n".format(self.body)