Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- F
- backend_login_test.py:4 (test_login)
- self = <urllib3.connection.HTTPConnection object at 0x7f30b282c898>
- def _new_conn(self):
- """ Establish a socket connection and set nodelay settings on it.
- :return: New socket connection.
- """
- extra_kw = {}
- if self.source_address:
- extra_kw['source_address'] = self.source_address
- if self.socket_options:
- extra_kw['socket_options'] = self.socket_options
- try:
- conn = connection.create_connection(
- > (self._dns_host, self.port), self.timeout, **extra_kw)
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/urllib3/connection.py:171:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- address = ('localhost', 80), timeout = None, source_address = None
- socket_options = [(6, 1, 1)]
- def create_connection(address, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
- source_address=None, socket_options=None):
- """Connect to *address* and return the socket object.
- Convenience function. Connect to *address* (a 2-tuple ``(host,
- port)``) and return the socket object. Passing the optional
- *timeout* parameter will set the timeout on the socket instance
- before attempting to connect. If no *timeout* is supplied, the
- global default timeout setting returned by :func:`getdefaulttimeout`
- is used. If *source_address* is set it must be a tuple of (host, port)
- for the socket to bind as a source address before making the connection.
- An host of '' or port 0 tells the OS to use the default.
- """
- host, port = address
- if host.startswith('['):
- host = host.strip('[]')
- err = None
- # Using the value from allowed_gai_family() in the context of getaddrinfo lets
- # us select whether to work with IPv4 DNS records, IPv6 records, or both.
- # The original create_connection function always returns all records.
- family = allowed_gai_family()
- for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
- af, socktype, proto, canonname, sa = res
- sock = None
- try:
- sock = socket.socket(af, socktype, proto)
- # If provided, set socket level options before connecting.
- _set_socket_options(sock, socket_options)
- if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT:
- sock.settimeout(timeout)
- if source_address:
- sock.bind(source_address)
- sock.connect(sa)
- return sock
- except socket.error as e:
- err = e
- if sock is not None:
- sock.close()
- sock = None
- if err is not None:
- > raise err
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/urllib3/util/connection.py:79:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- address = ('localhost', 80), timeout = None, source_address = None
- socket_options = [(6, 1, 1)]
- def create_connection(address, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
- source_address=None, socket_options=None):
- """Connect to *address* and return the socket object.
- Convenience function. Connect to *address* (a 2-tuple ``(host,
- port)``) and return the socket object. Passing the optional
- *timeout* parameter will set the timeout on the socket instance
- before attempting to connect. If no *timeout* is supplied, the
- global default timeout setting returned by :func:`getdefaulttimeout`
- is used. If *source_address* is set it must be a tuple of (host, port)
- for the socket to bind as a source address before making the connection.
- An host of '' or port 0 tells the OS to use the default.
- """
- host, port = address
- if host.startswith('['):
- host = host.strip('[]')
- err = None
- # Using the value from allowed_gai_family() in the context of getaddrinfo lets
- # us select whether to work with IPv4 DNS records, IPv6 records, or both.
- # The original create_connection function always returns all records.
- family = allowed_gai_family()
- for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
- af, socktype, proto, canonname, sa = res
- sock = None
- try:
- sock = socket.socket(af, socktype, proto)
- # If provided, set socket level options before connecting.
- _set_socket_options(sock, socket_options)
- if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT:
- sock.settimeout(timeout)
- if source_address:
- sock.bind(source_address)
- > sock.connect(sa)
- E ConnectionRefusedError: [Errno 111] Connection refused
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/urllib3/util/connection.py:69: ConnectionRefusedError
- During handling of the above exception, another exception occurred:
- self = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f30b283dba8>
- method = 'POST', url = '/api/auth'
- body = b'{"username": "test", "password": "test"}'
- headers = {'User-Agent': 'python-requests/2.19.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '40', 'Content-Type': 'application/json'}
- retries = Retry(total=0, connect=None, read=False, redirect=None, status=None)
- redirect = False, assert_same_host = False
- timeout = <urllib3.util.timeout.Timeout object at 0x7f30b283d5c0>
- pool_timeout = None, release_conn = False, chunked = False, body_pos = None
- response_kw = {'decode_content': False, 'preload_content': False}, conn = None
- release_this_conn = True, err = None, clean_exit = False
- timeout_obj = <urllib3.util.timeout.Timeout object at 0x7f30b282c400>
- is_new_proxy_conn = False
- def urlopen(self, method, url, body=None, headers=None, retries=None,
- redirect=True, assert_same_host=True, timeout=_Default,
- pool_timeout=None, release_conn=None, chunked=False,
- body_pos=None, **response_kw):
- """
- Get a connection from the pool and perform an HTTP request. This is the
- lowest level call for making a request, so you'll need to specify all
- the raw details.
- .. note::
- More commonly, it's appropriate to use a convenience method provided
- by :class:`.RequestMethods`, such as :meth:`request`.
- .. note::
- `release_conn` will only behave as expected if
- `preload_content=False` because we want to make
- `preload_content=False` the default behaviour someday soon without
- breaking backwards compatibility.
- :param method:
- HTTP request method (such as GET, POST, PUT, etc.)
- :param body:
- Data to send in the request body (useful for creating
- POST requests, see HTTPConnectionPool.post_url for
- more convenience).
- :param headers:
- Dictionary of custom headers to send, such as User-Agent,
- If-None-Match, etc. If None, pool headers are used. If provided,
- these headers completely replace any pool-specific headers.
- :param retries:
- Configure the number of retries to allow before raising a
- :class:`~urllib3.exceptions.MaxRetryError` exception.
- Pass ``None`` to retry until you receive a response. Pass a
- :class:`~urllib3.util.retry.Retry` object for fine-grained control
- over different types of retries.
- Pass an integer number to retry connection errors that many times,
- but no other types of errors. Pass zero to never retry.
- If ``False``, then retries are disabled and any exception is raised
- immediately. Also, instead of raising a MaxRetryError on redirects,
- the redirect response will be returned.
- :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.
- :param redirect:
- If True, automatically handle redirects (status codes 301, 302,
- 303, 307, 308). Each redirect counts as a retry. Disabling retries
- will disable redirect, too.
- :param assert_same_host:
- If ``True``, will make sure that the host of the pool requests is
- consistent else will raise HostChangedError. When False, you can
- use the pool on an HTTP proxy and request foreign hosts.
- :param timeout:
- If specified, overrides the default timeout for this one
- request. It may be a float (in seconds) or an instance of
- :class:`urllib3.util.Timeout`.
- :param pool_timeout:
- If set and the pool is set to block=True, then this method will
- block for ``pool_timeout`` seconds and raise EmptyPoolError if no
- connection is available within the time period.
- :param release_conn:
- If False, then the urlopen call will not release the connection
- back into the pool once a response is received (but will release if
- you read the entire contents of the response such as when
- `preload_content=True`). This is useful if you're not preloading
- the response's content immediately. You will need to call
- ``r.release_conn()`` on the response ``r`` to return the connection
- back into the pool. If None, it takes the value of
- ``response_kw.get('preload_content', True)``.
- :param chunked:
- If True, urllib3 will send the body using chunked transfer
- encoding. Otherwise, urllib3 will send the body using the standard
- content-length form. Defaults to False.
- :param int body_pos:
- Position to seek to in file-like body in the event of a retry or
- redirect. Typically this won't need to be set because urllib3 will
- auto-populate the value when needed.
- :param \\**response_kw:
- Additional parameters are passed to
- :meth:`urllib3.response.HTTPResponse.from_httplib`
- """
- if headers is None:
- headers = self.headers
- if not isinstance(retries, Retry):
- retries = Retry.from_int(retries, redirect=redirect, default=self.retries)
- if release_conn is None:
- release_conn = response_kw.get('preload_content', True)
- # Check host
- if assert_same_host and not self.is_same_host(url):
- raise HostChangedError(self, url, retries)
- conn = None
- # Track whether `conn` needs to be released before
- # returning/raising/recursing. Update this variable if necessary, and
- # leave `release_conn` constant throughout the function. That way, if
- # the function recurses, the original value of `release_conn` will be
- # passed down into the recursive call, and its value will be respected.
- #
- # See issue #651 [1] for details.
- #
- # [1] <https://github.com/shazow/urllib3/issues/651>
- release_this_conn = release_conn
- # Merge the proxy headers. Only do this in HTTP. We have to copy the
- # headers dict so we can safely change it without those changes being
- # reflected in anyone else's copy.
- if self.scheme == 'http':
- headers = headers.copy()
- headers.update(self.proxy_headers)
- # Must keep the exception bound to a separate variable or else Python 3
- # complains about UnboundLocalError.
- err = None
- # Keep track of whether we cleanly exited the except block. This
- # ensures we do proper cleanup in finally.
- clean_exit = False
- # Rewind body position, if needed. Record current position
- # for future rewinds in the event of a redirect/retry.
- body_pos = set_file_position(body, body_pos)
- try:
- # Request a connection from the queue.
- timeout_obj = self._get_timeout(timeout)
- conn = self._get_conn(timeout=pool_timeout)
- conn.timeout = timeout_obj.connect_timeout
- is_new_proxy_conn = self.proxy is not None and not getattr(conn, 'sock', None)
- if is_new_proxy_conn:
- self._prepare_proxy(conn)
- # Make the request on the httplib connection object.
- httplib_response = self._make_request(conn, method, url,
- timeout=timeout_obj,
- body=body, headers=headers,
- > chunked=chunked)
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/urllib3/connectionpool.py:600:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f30b283dba8>
- conn = <urllib3.connection.HTTPConnection object at 0x7f30b282c898>
- method = 'POST', url = '/api/auth'
- timeout = <urllib3.util.timeout.Timeout object at 0x7f30b282c400>
- chunked = False
- httplib_request_kw = {'body': b'{"username": "test", "password": "test"}', 'headers': {'User-Agent': 'python-requests/2.19.1', 'Accept-Enco...ip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '40', 'Content-Type': 'application/json'}}
- timeout_obj = <urllib3.util.timeout.Timeout object at 0x7f30b2766518>
- def _make_request(self, conn, method, url, timeout=_Default, chunked=False,
- **httplib_request_kw):
- """
- Perform a request on a given urllib connection object taken from our
- pool.
- :param conn:
- a connection from one of our connection pools
- :param timeout:
- Socket timeout in seconds for the request. This can be a
- float or integer, which will set the same timeout value for
- the socket connect and the socket read, or an instance of
- :class:`urllib3.util.Timeout`, which gives you more fine-grained
- control over your timeouts.
- """
- self.num_requests += 1
- timeout_obj = self._get_timeout(timeout)
- timeout_obj.start_connect()
- conn.timeout = timeout_obj.connect_timeout
- # Trigger any extra validation we need to do.
- try:
- self._validate_conn(conn)
- except (SocketTimeout, BaseSSLError) as e:
- # Py2 raises this as a BaseSSLError, Py3 raises it as socket timeout.
- self._raise_timeout(err=e, url=url, timeout_value=conn.timeout)
- raise
- # conn.request() calls httplib.*.request, not the method in
- # urllib3.request. It also calls makefile (recv) on the socket.
- if chunked:
- conn.request_chunked(method, url, **httplib_request_kw)
- else:
- > conn.request(method, url, **httplib_request_kw)
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/urllib3/connectionpool.py:354:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self = <urllib3.connection.HTTPConnection object at 0x7f30b282c898>
- method = 'POST', url = '/api/auth'
- body = b'{"username": "test", "password": "test"}'
- headers = {'User-Agent': 'python-requests/2.19.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '40', 'Content-Type': 'application/json'}
- def request(self, method, url, body=None, headers={}, *,
- encode_chunked=False):
- """Send a complete request to the server."""
- > self._send_request(method, url, body, headers, encode_chunked)
- /usr/lib/python3.6/http/client.py:1239:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self = <urllib3.connection.HTTPConnection object at 0x7f30b282c898>
- method = 'POST', url = '/api/auth'
- body = b'{"username": "test", "password": "test"}'
- headers = {'User-Agent': 'python-requests/2.19.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '40', 'Content-Type': 'application/json'}
- encode_chunked = False
- def _send_request(self, method, url, body, headers, encode_chunked):
- # Honor explicitly requested Host: and Accept-Encoding: headers.
- header_names = frozenset(k.lower() for k in headers)
- skips = {}
- if 'host' in header_names:
- skips['skip_host'] = 1
- if 'accept-encoding' in header_names:
- skips['skip_accept_encoding'] = 1
- self.putrequest(method, url, **skips)
- # chunked encoding will happen if HTTP/1.1 is used and either
- # the caller passes encode_chunked=True or the following
- # conditions hold:
- # 1. content-length has not been explicitly set
- # 2. the body is a file or iterable, but not a str or bytes-like
- # 3. Transfer-Encoding has NOT been explicitly set by the caller
- if 'content-length' not in header_names:
- # only chunk body if not explicitly set for backwards
- # compatibility, assuming the client code is already handling the
- # chunking
- if 'transfer-encoding' not in header_names:
- # if content-length cannot be automatically determined, fall
- # back to chunked encoding
- encode_chunked = False
- content_length = self._get_content_length(body, method)
- if content_length is None:
- if body is not None:
- if self.debuglevel > 0:
- print('Unable to determine size of %r' % body)
- encode_chunked = True
- self.putheader('Transfer-Encoding', 'chunked')
- else:
- self.putheader('Content-Length', str(content_length))
- else:
- encode_chunked = False
- for hdr, value in headers.items():
- self.putheader(hdr, value)
- if isinstance(body, str):
- # RFC 2616 Section 3.7.1 says that text default has a
- # default charset of iso-8859-1.
- body = _encode(body, 'body')
- > self.endheaders(body, encode_chunked=encode_chunked)
- /usr/lib/python3.6/http/client.py:1285:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self = <urllib3.connection.HTTPConnection object at 0x7f30b282c898>
- message_body = b'{"username": "test", "password": "test"}'
- def endheaders(self, message_body=None, *, encode_chunked=False):
- """Indicate that the last header line has been sent to the server.
- This method sends the request to the server. The optional message_body
- argument can be used to pass a message body associated with the
- request.
- """
- if self.__state == _CS_REQ_STARTED:
- self.__state = _CS_REQ_SENT
- else:
- raise CannotSendHeader()
- > self._send_output(message_body, encode_chunked=encode_chunked)
- /usr/lib/python3.6/http/client.py:1234:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self = <urllib3.connection.HTTPConnection object at 0x7f30b282c898>
- message_body = b'{"username": "test", "password": "test"}'
- encode_chunked = False
- def _send_output(self, message_body=None, encode_chunked=False):
- """Send the currently buffered request and clear the buffer.
- Appends an extra \\r\\n to the buffer.
- A message_body may be specified, to be appended to the request.
- """
- self._buffer.extend((b"", b""))
- msg = b"\r\n".join(self._buffer)
- del self._buffer[:]
- > self.send(msg)
- /usr/lib/python3.6/http/client.py:1026:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self = <urllib3.connection.HTTPConnection object at 0x7f30b282c898>
- data = b'POST /api/auth HTTP/1.1\r\nHost: localhost\r\nUser-Agent: python-requests/2.19.1\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nConnection: keep-alive\r\nContent-Length: 40\r\nContent-Type: application/json\r\n\r\n'
- def send(self, data):
- """Send `data' to the server.
- ``data`` can be a string object, a bytes object, an array object, a
- file-like object that supports a .read() method, or an iterable object.
- """
- if self.sock is None:
- if self.auto_open:
- > self.connect()
- /usr/lib/python3.6/http/client.py:964:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self = <urllib3.connection.HTTPConnection object at 0x7f30b282c898>
- def connect(self):
- > conn = self._new_conn()
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/urllib3/connection.py:196:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self = <urllib3.connection.HTTPConnection object at 0x7f30b282c898>
- def _new_conn(self):
- """ Establish a socket connection and set nodelay settings on it.
- :return: New socket connection.
- """
- extra_kw = {}
- if self.source_address:
- extra_kw['source_address'] = self.source_address
- if self.socket_options:
- extra_kw['socket_options'] = self.socket_options
- try:
- conn = connection.create_connection(
- (self._dns_host, self.port), self.timeout, **extra_kw)
- except SocketTimeout as e:
- raise ConnectTimeoutError(
- self, "Connection to %s timed out. (connect timeout=%s)" %
- (self.host, self.timeout))
- except SocketError as e:
- raise NewConnectionError(
- > self, "Failed to establish a new connection: %s" % e)
- E urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f30b282c898>: Failed to establish a new connection: [Errno 111] Connection refused
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/urllib3/connection.py:180: NewConnectionError
- During handling of the above exception, another exception occurred:
- self = <requests.adapters.HTTPAdapter object at 0x7f30b283d6a0>
- request = <PreparedRequest [POST]>, stream = False
- timeout = <urllib3.util.timeout.Timeout object at 0x7f30b283d5c0>, verify = True
- cert = None, proxies = OrderedDict()
- def send(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None):
- """Sends PreparedRequest object. Returns Response object.
- :param request: The :class:`PreparedRequest <PreparedRequest>` being sent.
- :param stream: (optional) Whether to stream the request content.
- :param timeout: (optional) How long to wait for the server to send
- data before giving up, as a float, or a :ref:`(connect timeout,
- read timeout) <timeouts>` tuple.
- :type timeout: float or tuple or urllib3 Timeout object
- :param verify: (optional) Either a boolean, in which case it controls whether
- we verify the server's TLS certificate, or a string, in which case it
- must be a path to a CA bundle to use
- :param cert: (optional) Any user-provided SSL certificate to be trusted.
- :param proxies: (optional) The proxies dictionary to apply to the request.
- :rtype: requests.Response
- """
- conn = self.get_connection(request.url, proxies)
- self.cert_verify(conn, request.url, verify, cert)
- url = self.request_url(request, proxies)
- self.add_headers(request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies)
- chunked = not (request.body is None or 'Content-Length' in request.headers)
- if isinstance(timeout, tuple):
- try:
- connect, read = timeout
- timeout = TimeoutSauce(connect=connect, read=read)
- except ValueError as e:
- # this may raise a string formatting error.
- err = ("Invalid timeout {0}. Pass a (connect, read) "
- "timeout tuple, or a single float to set "
- "both timeouts to the same value".format(timeout))
- raise ValueError(err)
- elif isinstance(timeout, TimeoutSauce):
- pass
- else:
- timeout = TimeoutSauce(connect=timeout, read=timeout)
- try:
- if not chunked:
- resp = conn.urlopen(
- method=request.method,
- url=url,
- body=request.body,
- headers=request.headers,
- redirect=False,
- assert_same_host=False,
- preload_content=False,
- decode_content=False,
- retries=self.max_retries,
- > timeout=timeout
- )
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/requests/adapters.py:445:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f30b283dba8>
- method = 'POST', url = '/api/auth'
- body = b'{"username": "test", "password": "test"}'
- headers = {'User-Agent': 'python-requests/2.19.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '40', 'Content-Type': 'application/json'}
- retries = Retry(total=0, connect=None, read=False, redirect=None, status=None)
- redirect = False, assert_same_host = False
- timeout = <urllib3.util.timeout.Timeout object at 0x7f30b283d5c0>
- pool_timeout = None, release_conn = False, chunked = False, body_pos = None
- response_kw = {'decode_content': False, 'preload_content': False}, conn = None
- release_this_conn = True, err = None, clean_exit = False
- timeout_obj = <urllib3.util.timeout.Timeout object at 0x7f30b282c400>
- is_new_proxy_conn = False
- def urlopen(self, method, url, body=None, headers=None, retries=None,
- redirect=True, assert_same_host=True, timeout=_Default,
- pool_timeout=None, release_conn=None, chunked=False,
- body_pos=None, **response_kw):
- """
- Get a connection from the pool and perform an HTTP request. This is the
- lowest level call for making a request, so you'll need to specify all
- the raw details.
- .. note::
- More commonly, it's appropriate to use a convenience method provided
- by :class:`.RequestMethods`, such as :meth:`request`.
- .. note::
- `release_conn` will only behave as expected if
- `preload_content=False` because we want to make
- `preload_content=False` the default behaviour someday soon without
- breaking backwards compatibility.
- :param method:
- HTTP request method (such as GET, POST, PUT, etc.)
- :param body:
- Data to send in the request body (useful for creating
- POST requests, see HTTPConnectionPool.post_url for
- more convenience).
- :param headers:
- Dictionary of custom headers to send, such as User-Agent,
- If-None-Match, etc. If None, pool headers are used. If provided,
- these headers completely replace any pool-specific headers.
- :param retries:
- Configure the number of retries to allow before raising a
- :class:`~urllib3.exceptions.MaxRetryError` exception.
- Pass ``None`` to retry until you receive a response. Pass a
- :class:`~urllib3.util.retry.Retry` object for fine-grained control
- over different types of retries.
- Pass an integer number to retry connection errors that many times,
- but no other types of errors. Pass zero to never retry.
- If ``False``, then retries are disabled and any exception is raised
- immediately. Also, instead of raising a MaxRetryError on redirects,
- the redirect response will be returned.
- :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.
- :param redirect:
- If True, automatically handle redirects (status codes 301, 302,
- 303, 307, 308). Each redirect counts as a retry. Disabling retries
- will disable redirect, too.
- :param assert_same_host:
- If ``True``, will make sure that the host of the pool requests is
- consistent else will raise HostChangedError. When False, you can
- use the pool on an HTTP proxy and request foreign hosts.
- :param timeout:
- If specified, overrides the default timeout for this one
- request. It may be a float (in seconds) or an instance of
- :class:`urllib3.util.Timeout`.
- :param pool_timeout:
- If set and the pool is set to block=True, then this method will
- block for ``pool_timeout`` seconds and raise EmptyPoolError if no
- connection is available within the time period.
- :param release_conn:
- If False, then the urlopen call will not release the connection
- back into the pool once a response is received (but will release if
- you read the entire contents of the response such as when
- `preload_content=True`). This is useful if you're not preloading
- the response's content immediately. You will need to call
- ``r.release_conn()`` on the response ``r`` to return the connection
- back into the pool. If None, it takes the value of
- ``response_kw.get('preload_content', True)``.
- :param chunked:
- If True, urllib3 will send the body using chunked transfer
- encoding. Otherwise, urllib3 will send the body using the standard
- content-length form. Defaults to False.
- :param int body_pos:
- Position to seek to in file-like body in the event of a retry or
- redirect. Typically this won't need to be set because urllib3 will
- auto-populate the value when needed.
- :param \\**response_kw:
- Additional parameters are passed to
- :meth:`urllib3.response.HTTPResponse.from_httplib`
- """
- if headers is None:
- headers = self.headers
- if not isinstance(retries, Retry):
- retries = Retry.from_int(retries, redirect=redirect, default=self.retries)
- if release_conn is None:
- release_conn = response_kw.get('preload_content', True)
- # Check host
- if assert_same_host and not self.is_same_host(url):
- raise HostChangedError(self, url, retries)
- conn = None
- # Track whether `conn` needs to be released before
- # returning/raising/recursing. Update this variable if necessary, and
- # leave `release_conn` constant throughout the function. That way, if
- # the function recurses, the original value of `release_conn` will be
- # passed down into the recursive call, and its value will be respected.
- #
- # See issue #651 [1] for details.
- #
- # [1] <https://github.com/shazow/urllib3/issues/651>
- release_this_conn = release_conn
- # Merge the proxy headers. Only do this in HTTP. We have to copy the
- # headers dict so we can safely change it without those changes being
- # reflected in anyone else's copy.
- if self.scheme == 'http':
- headers = headers.copy()
- headers.update(self.proxy_headers)
- # Must keep the exception bound to a separate variable or else Python 3
- # complains about UnboundLocalError.
- err = None
- # Keep track of whether we cleanly exited the except block. This
- # ensures we do proper cleanup in finally.
- clean_exit = False
- # Rewind body position, if needed. Record current position
- # for future rewinds in the event of a redirect/retry.
- body_pos = set_file_position(body, body_pos)
- try:
- # Request a connection from the queue.
- timeout_obj = self._get_timeout(timeout)
- conn = self._get_conn(timeout=pool_timeout)
- conn.timeout = timeout_obj.connect_timeout
- is_new_proxy_conn = self.proxy is not None and not getattr(conn, 'sock', None)
- if is_new_proxy_conn:
- self._prepare_proxy(conn)
- # Make the request on the httplib connection object.
- httplib_response = self._make_request(conn, method, url,
- timeout=timeout_obj,
- body=body, headers=headers,
- chunked=chunked)
- # If we're going to release the connection in ``finally:``, then
- # the response doesn't need to know about the connection. Otherwise
- # it will also try to release it and we'll have a double-release
- # mess.
- response_conn = conn if not release_conn else None
- # Pass method to Response for length checking
- response_kw['request_method'] = method
- # Import httplib's response into our own wrapper object
- response = self.ResponseCls.from_httplib(httplib_response,
- pool=self,
- connection=response_conn,
- retries=retries,
- **response_kw)
- # Everything went great!
- clean_exit = True
- except queue.Empty:
- # Timed out by queue.
- raise EmptyPoolError(self, "No pool connections are available.")
- except (TimeoutError, HTTPException, SocketError, ProtocolError,
- BaseSSLError, SSLError, CertificateError) as e:
- # Discard the connection for these exceptions. It will be
- # replaced during the next _get_conn() call.
- clean_exit = False
- if isinstance(e, (BaseSSLError, CertificateError)):
- e = SSLError(e)
- elif isinstance(e, (SocketError, NewConnectionError)) and self.proxy:
- e = ProxyError('Cannot connect to proxy.', e)
- elif isinstance(e, (SocketError, HTTPException)):
- e = ProtocolError('Connection aborted.', e)
- retries = retries.increment(method, url, error=e, _pool=self,
- > _stacktrace=sys.exc_info()[2])
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/urllib3/connectionpool.py:638:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self = Retry(total=0, connect=None, read=False, redirect=None, status=None)
- method = 'POST', url = '/api/auth', response = None
- error = NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f30b282c898>: Failed to establish a new connection: [Errno 111] Connection refused',)
- _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f30b283dba8>
- _stacktrace = <traceback object at 0x7f30b29368c8>
- def increment(self, method=None, url=None, response=None, error=None,
- _pool=None, _stacktrace=None):
- """ Return a new Retry object with incremented retry counters.
- :param response: A response object, or None, if the server did not
- return a response.
- :type response: :class:`~urllib3.response.HTTPResponse`
- :param Exception error: An error encountered during the request, or
- None if the response was received successfully.
- :return: A new ``Retry`` object.
- """
- if self.total is False and error:
- # Disabled, indicate to re-raise the error.
- raise six.reraise(type(error), error, _stacktrace)
- total = self.total
- if total is not None:
- total -= 1
- connect = self.connect
- read = self.read
- redirect = self.redirect
- status_count = self.status
- cause = 'unknown'
- status = None
- redirect_location = None
- if error and self._is_connection_error(error):
- # Connect retry?
- if connect is False:
- raise six.reraise(type(error), error, _stacktrace)
- elif connect is not None:
- connect -= 1
- elif error and self._is_read_error(error):
- # Read retry?
- if read is False or not self._is_method_retryable(method):
- raise six.reraise(type(error), error, _stacktrace)
- elif read is not None:
- read -= 1
- elif response and response.get_redirect_location():
- # Redirect retry?
- if redirect is not None:
- redirect -= 1
- cause = 'too many redirects'
- redirect_location = response.get_redirect_location()
- status = response.status
- else:
- # Incrementing because of a server error like a 500 in
- # status_forcelist and a the given method is in the whitelist
- cause = ResponseError.GENERIC_ERROR
- if response and response.status:
- if status_count is not None:
- status_count -= 1
- cause = ResponseError.SPECIFIC_ERROR.format(
- status_code=response.status)
- status = response.status
- history = self.history + (RequestHistory(method, url, error, status, redirect_location),)
- new_retry = self.new(
- total=total,
- connect=connect, read=read, redirect=redirect, status=status_count,
- history=history)
- if new_retry.is_exhausted():
- > raise MaxRetryError(_pool, url, error or ResponseError(cause))
- E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=80): Max retries exceeded with url: /api/auth (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f30b282c898>: Failed to establish a new connection: [Errno 111] Connection refused',))
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/urllib3/util/retry.py:398: MaxRetryError
- During handling of the above exception, another exception occurred:
- app = <Flask 'cc'>, client = <FlaskClient <Flask 'cc'>>
- def test_login(app, client):
- _create_dummy_user(app, client)
- > resp = client.post('/login', data={"username": "test", "password": "test"})
- backend_login_test.py:7:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/werkzeug/test.py:840: in post
- return self.open(*args, **kw)
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/flask/testing.py:200: in open
- follow_redirects=follow_redirects
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/werkzeug/test.py:803: in open
- response = self.run_wsgi_app(environ, buffered=buffered)
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/werkzeug/test.py:716: in run_wsgi_app
- rv = run_wsgi_app(self.application, environ, buffered=buffered)
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/werkzeug/test.py:923: in run_wsgi_app
- app_rv = app(environ, start_response)
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/flask/app.py:2309: in __call__
- return self.wsgi_app(environ, start_response)
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/flask/app.py:2295: in wsgi_app
- response = self.handle_exception(e)
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/flask/app.py:1741: in handle_exception
- reraise(exc_type, exc_value, tb)
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/flask/_compat.py:35: in reraise
- raise value
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/flask/app.py:2292: in wsgi_app
- response = self.full_dispatch_request()
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/flask/app.py:1815: in full_dispatch_request
- rv = self.handle_user_exception(e)
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/flask/app.py:1718: in handle_user_exception
- reraise(exc_type, exc_value, tb)
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/flask/_compat.py:35: in reraise
- raise value
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/flask/app.py:1813: in full_dispatch_request
- rv = self.dispatch_request()
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/flask/app.py:1799: in dispatch_request
- return self.view_functions[rule.endpoint](**req.view_args)
- ../cc/views/utils.py:26: in wrapper
- return view_func(*args, **kwargs)
- ../cc/views/general.py:22: in login
- json={'username': username, 'password': password}).json().get('token')
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/requests/api.py:112: in post
- return request('post', url, data=data, json=json, **kwargs)
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/requests/api.py:58: in request
- return session.request(method=method, url=url, **kwargs)
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/requests/sessions.py:512: in request
- resp = self.send(prep, **send_kwargs)
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/requests/sessions.py:622: in send
- r = adapter.send(request, **kwargs)
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self = <requests.adapters.HTTPAdapter object at 0x7f30b283d6a0>
- request = <PreparedRequest [POST]>, stream = False
- timeout = <urllib3.util.timeout.Timeout object at 0x7f30b283d5c0>, verify = True
- cert = None, proxies = OrderedDict()
- def send(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None):
- """Sends PreparedRequest object. Returns Response object.
- :param request: The :class:`PreparedRequest <PreparedRequest>` being sent.
- :param stream: (optional) Whether to stream the request content.
- :param timeout: (optional) How long to wait for the server to send
- data before giving up, as a float, or a :ref:`(connect timeout,
- read timeout) <timeouts>` tuple.
- :type timeout: float or tuple or urllib3 Timeout object
- :param verify: (optional) Either a boolean, in which case it controls whether
- we verify the server's TLS certificate, or a string, in which case it
- must be a path to a CA bundle to use
- :param cert: (optional) Any user-provided SSL certificate to be trusted.
- :param proxies: (optional) The proxies dictionary to apply to the request.
- :rtype: requests.Response
- """
- conn = self.get_connection(request.url, proxies)
- self.cert_verify(conn, request.url, verify, cert)
- url = self.request_url(request, proxies)
- self.add_headers(request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies)
- chunked = not (request.body is None or 'Content-Length' in request.headers)
- if isinstance(timeout, tuple):
- try:
- connect, read = timeout
- timeout = TimeoutSauce(connect=connect, read=read)
- except ValueError as e:
- # this may raise a string formatting error.
- err = ("Invalid timeout {0}. Pass a (connect, read) "
- "timeout tuple, or a single float to set "
- "both timeouts to the same value".format(timeout))
- raise ValueError(err)
- elif isinstance(timeout, TimeoutSauce):
- pass
- else:
- timeout = TimeoutSauce(connect=timeout, read=timeout)
- try:
- if not chunked:
- resp = conn.urlopen(
- method=request.method,
- url=url,
- body=request.body,
- headers=request.headers,
- redirect=False,
- assert_same_host=False,
- preload_content=False,
- decode_content=False,
- retries=self.max_retries,
- timeout=timeout
- )
- # Send the request.
- else:
- if hasattr(conn, 'proxy_pool'):
- conn = conn.proxy_pool
- low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)
- try:
- low_conn.putrequest(request.method,
- url,
- skip_accept_encoding=True)
- for header, value in request.headers.items():
- low_conn.putheader(header, value)
- low_conn.endheaders()
- for i in request.body:
- low_conn.send(hex(len(i))[2:].encode('utf-8'))
- low_conn.send(b'\r\n')
- low_conn.send(i)
- low_conn.send(b'\r\n')
- low_conn.send(b'0\r\n\r\n')
- # Receive the response from the server
- try:
- # For Python 2.7+ versions, use buffering of HTTP
- # responses
- r = low_conn.getresponse(buffering=True)
- except TypeError:
- # For compatibility with Python 2.6 versions and back
- r = low_conn.getresponse()
- resp = HTTPResponse.from_httplib(
- r,
- pool=conn,
- connection=low_conn,
- preload_content=False,
- decode_content=False
- )
- except:
- # If we hit any problems here, clean up the connection.
- # Then, reraise so that we can handle the actual exception.
- low_conn.close()
- raise
- except (ProtocolError, socket.error) as err:
- raise ConnectionError(err, request=request)
- except MaxRetryError as e:
- if isinstance(e.reason, ConnectTimeoutError):
- # TODO: Remove this in 3.0.0: see #2811
- if not isinstance(e.reason, NewConnectionError):
- raise ConnectTimeout(e, request=request)
- if isinstance(e.reason, ResponseError):
- raise RetryError(e, request=request)
- if isinstance(e.reason, _ProxyError):
- raise ProxyError(e, request=request)
- if isinstance(e.reason, _SSLError):
- # This branch is for urllib3 v1.22 and later.
- raise SSLError(e, request=request)
- > raise ConnectionError(e, request=request)
- E requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=80): Max retries exceeded with url: /api/auth (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f30b282c898>: Failed to establish a new connection: [Errno 111] Connection refused',))
- ../../../.virtualenvs/CC-ar9V6dQt/lib/python3.6/site-packages/requests/adapters.py:513: ConnectionError
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement