def request(self, method, api_url, params={}, headers=None, file_name=None, file_content=None, axapi_args=None, **kwargs): LOG.debug("axapi_http: full url = %s", self.url_base + api_url) LOG.debug("axapi_http: %s url = %s", method, api_url) LOG.debug("axapi_http: params = %s", json.dumps(logutils.clean(params), indent=4)) # Update params with axapi_args for currently unsupported configuration of objects if axapi_args is not None: formatted_axapi_args = dict([(k.replace('_', '-'), v) for k, v in axapi_args.iteritems()]) params = acos_client.v21.axapi_http.merge_dicts(params, formatted_axapi_args) if (file_name is None and file_content is not None) or \ (file_name is not None and file_content is None): raise ValueError("file_name and file_content must both be " "populated if one is") hdrs = self.HEADERS.copy() if headers: hdrs.update(headers) if params: params_copy = params.copy() # params_copy.update(extra_params) LOG.debug("axapi_http: params_all = %s", logutils.clean(params_copy)) payload = json.dumps(params_copy, encoding='utf-8') else: payload = None LOG.debug("axapi_http: headers = %s", json.dumps(logutils.clean(hdrs), indent=4)) if file_name is not None: files = { 'file': (file_name, file_content, "application/octet-stream"), 'json': ('blob', payload, "application/json") } hdrs.pop("Content-type", None) hdrs.pop("Content-Type", None) z = requests.request(method, self.url_base + api_url, verify=False, files=files, headers=hdrs) else: z = requests.request(method, self.url_base + api_url, verify=False, data=payload, headers=hdrs) if z.status_code == 204: return None try: r = z.json() except ValueError as e: # The response is not JSON but it still succeeded. if z.status_code == 200: return {} else: raise e LOG.debug("axapi_http: data = %s", json.dumps(logutils.clean(r), indent=4)) if 'response' in r and 'status' in r['response']: if r['response']['status'] == 'fail': acos_responses.raise_axapi_ex(r, method, api_url) if 'authorizationschema' in r: acos_responses.raise_axapi_auth_error( r, method, api_url, headers) return r
def request(self, method, api_url, params={}, headers=None, file_name=None, file_content=None, axapi_args=None, **kwargs): LOG.debug("axapi_http: full url = %s", self.url_base + api_url) LOG.debug("axapi_http: %s url = %s", method, api_url) LOG.debug("axapi_http: params = %s", json.dumps(logutils.clean(params), indent=4)) # Update params with axapi_args for currently unsupported configuration of objects if axapi_args is not None: formatted_axapi_args = dict([(k.replace('_', '-'), v) for k, v in axapi_args.iteritems()]) params = acos_client.v21.axapi_http.merge_dicts( params, formatted_axapi_args) if (file_name is None and file_content is not None) or \ (file_name is not None and file_content is None): raise ValueError("file_name and file_content must both be " "populated if one is") hdrs = self.HEADERS.copy() if headers: hdrs.update(headers) if params: params_copy = params.copy() # params_copy.update(extra_params) LOG.debug("axapi_http: params_all = %s", logutils.clean(params_copy)) payload = json.dumps(params_copy, encoding='utf-8') else: payload = None LOG.debug("axapi_http: headers = %s", json.dumps(logutils.clean(hdrs), indent=4)) if file_name is not None: files = { 'file': (file_name, file_content, "application/octet-stream"), 'json': ('blob', payload, "application/json") } hdrs.pop("Content-type", None) hdrs.pop("Content-Type", None) last_e = None for i in xrange(0, 1500): try: last_e = None if file_name is not None: z = requests.request(method, self.url_base + api_url, verify=False, files=files, headers=hdrs) else: #requests.packages.urllib3.disable_warnings() z = requests.request(method, self.url_base + api_url, verify=False, data=payload, headers=hdrs) break except (socket.error, requests.exceptions.ConnectionError) as e: # Workaround some bogosity in the API if e.errno in self.retry_errnos or \ any(s in str(e) for s in self.retry_err_strings): time.sleep(0.1) last_e = e continue raise e LOG.debug("acos_client retried %s %s times", self.url_base + api_url, i) if last_e is not None: LOG.error( "acos_client failing with error %s after %s retries ignoring %s", last_e, i, self.retry_err_strings) raise e if z.status_code == 204: return None try: r = z.json() except ValueError as e: # The response is not JSON but it still succeeded. if z.status_code == 200: return {} else: raise e LOG.debug("axapi_http: data = %s", json.dumps(logutils.clean(r), indent=4)) if 'response' in r and 'status' in r['response']: if r['response']['status'] == 'fail': acos_responses.raise_axapi_ex(r, method, api_url) if 'authorizationschema' in r: acos_responses.raise_axapi_auth_error(r, method, api_url, headers) return r