def _request(method, url, is_success=_default_is_success, timeout=DEFAULT_TIMEOUT, auth=None, verify=None, **kwargs): """Sends an HTTP request. :param method: method for the new Request object :type method: str :param url: URL for the new Request object :type url: str :param is_success: Defines successful status codes for the request :type is_success: Function from int to bool :param timeout: request timeout :type timeout: int :param auth: authentication :type auth: AuthBase :param verify: whether to verify SSL certs or path to cert(s) :type verify: bool | str :param kwargs: Additional arguments to requests.request (see http://docs.python-requests.org/en/latest/api/#requests.request) :type kwargs: dict :rtype: Response """ logger.info('Sending HTTP [%r] to [%r]: %r', method, url, kwargs.get('headers')) try: response = requests.request(method=method, url=url, timeout=timeout, auth=auth, verify=verify, **kwargs) except requests.exceptions.SSLError as e: logger.exception("HTTP SSL Error") msg = ("An SSL error occurred. To configure your SSL settings, " "please run: `dcos config set core.ssl_verify <value>`") description = config.get_property_description("core", "ssl_verify") if description is not None: msg += "\n<value>: {}".format(description) raise DCOSException(msg) except requests.exceptions.ConnectionError as e: logger.exception("HTTP Connection Error") raise DCOSException('URL [{0}] is unreachable: {1}'.format(url, e)) except requests.exceptions.Timeout as e: logger.exception("HTTP Timeout") raise DCOSException('Request to URL [{0}] timed out.'.format(url)) except requests.exceptions.RequestException as e: logger.exception("HTTP Exception") raise DCOSException('HTTP Exception: {}'.format(e)) logger.info('Received HTTP response [%r]: %r', response.status_code, response.headers) return response
def _request(method, url, is_success=_default_is_success, timeout=DEFAULT_TIMEOUT, auth=None, verify=None, **kwargs): """Sends an HTTP request. :param method: method for the new Request object :type method: str :param url: URL for the new Request object :type url: str :param is_success: Defines successful status codes for the request :type is_success: Function from int to bool :param timeout: request timeout :type timeout: int :param auth: authentication :type auth: AuthBase :param verify: whether to verify SSL certs or path to cert(s) :type verify: bool | str :param kwargs: Additional arguments to requests.request (see http://docs.python-requests.org/en/latest/api/#requests.request) :type kwargs: dict :rtype: Response """ logger.info("Sending HTTP [%r] to [%r]: %r", method, url, kwargs.get("headers")) try: response = requests.request(method=method, url=url, timeout=timeout, auth=auth, verify=verify, **kwargs) except requests.exceptions.SSLError as e: logger.exception("HTTP SSL Error") msg = ( "An SSL error occurred. To configure your SSL settings, " "please run: `dcos config set core.ssl_verify <value>`" ) description = config.get_property_description("core", "ssl_verify") if description is not None: msg += "\n<value>: {}".format(description) raise DCOSException(msg) except requests.exceptions.ConnectionError as e: logger.exception("HTTP Connection Error") raise DCOSException("URL [{0}] is unreachable: {1}".format(url, e)) except requests.exceptions.Timeout as e: logger.exception("HTTP Timeout") raise DCOSException("Request to URL [{0}] timed out.".format(url)) except requests.exceptions.RequestException as e: logger.exception("HTTP Exception") raise DCOSException("HTTP Exception: {}".format(e)) logger.info("Received HTTP response [%r]: %r", response.status_code, response.headers) return response
def _request(method, url, is_success=_default_is_success, timeout=True, auth=None, verify=None, toml_config=None, **kwargs): """Sends an HTTP request. :param method: method for the new Request object :type method: str :param url: URL for the new Request object :type url: str :param is_success: Defines successful status codes for the request :type is_success: Function from int to bool :param timeout: How many seconds to wait for the server to send data before aborting and raising an exception. A timeout is either a float, a (connect timeout, read timeout) tuple or `None`. `None` means unlimited timeout. If no timeout is passed it defaults to the DEFAULT_TIMEOUT tuple, where the connect timeout can optionally be overridden by the `core.timeout` config. :type timeout: int | float | None | bool | (int | float | None, int | float | None) :param auth: authentication :type auth: AuthBase :param verify: whether to verify SSL certs or path to cert(s) :type verify: bool | str :param toml_config: cluster config to use :type toml_config: Toml :param kwargs: Additional arguments to requests.request (see http://docs.python-requests.org/en/latest/api/#requests.request) :type kwargs: dict :rtype: Response """ if timeout is True: if toml_config is None: toml_config = config.get_config() timeout = config.get_config_val("core.timeout", toml_config) timeout = (DEFAULT_CONNECT_TIMEOUT, timeout or DEFAULT_READ_TIMEOUT) elif type(timeout) in (float, int): timeout = (DEFAULT_CONNECT_TIMEOUT, timeout) if 'headers' not in kwargs: kwargs['headers'] = {'Accept': 'application/json'} verify = _verify_ssl(url, verify, toml_config) # Silence 'Unverified HTTPS request' and 'SecurityWarning' for bad certs if verify is not None: silence_requests_warnings() logger.info('Sending HTTP [%r] to [%r]: %r', method, url, kwargs.get('headers')) try: response = requests.request(method=method, url=url, timeout=timeout, auth=auth, verify=verify, **kwargs) except requests.exceptions.SSLError as e: logger.exception("HTTP SSL Error") msg = ("An SSL error occurred. To configure your SSL settings, " "please run: `dcos config set core.ssl_verify <value>`") description = config.get_property_description("core", "ssl_verify") if description is not None: msg += "\n<value>: {}".format(description) raise DCOSException(msg) except requests.exceptions.ConnectionError as e: logger.exception("HTTP Connection Error") raise DCOSConnectionError(url) except requests.exceptions.Timeout as e: logger.exception("HTTP Timeout") raise DCOSException('Request to URL [{0}] timed out.'.format(url)) except requests.exceptions.RequestException as e: logger.exception("HTTP Exception") raise DCOSException('HTTP Exception: {}'.format(e)) logger.info('Received HTTP response [%r]: %r', response.status_code, response.headers) return response