Your message dated Sat, 31 Aug 2024 05:49:50 +0000
with message-id <e1skgze-00dcpv...@fasolo.debian.org>
and subject line Bug#1073427: fixed in python-requests-cache 1.2.1-1
has caused the Debian Bug report #1073427,
regarding python-requests-cache: FTBFS: dh_auto_test: error: pybuild --test 
--test-pytest -i python{version} -p "3.12 3.11" returned exit code 13
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
1073427: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1073427
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Source: python-requests-cache
Version: 0.9.8-2
Severity: serious
Justification: FTBFS
Tags: trixie sid ftbfs
User: lu...@debian.org
Usertags: ftbfs-20240615 ftbfs-trixie

Hi,

During a rebuild of all packages in sid, your package failed to build
on amd64.


Relevant part (hopefully):
> make[1]: Entering directory '/<<PKGBUILDDIR>>'
> dh_auto_build
> I: pybuild plugin_pyproject:129: Building wheel for python3.12 with "build" 
> module
> I: pybuild base:311: python3.12 -m build --skip-dependency-check 
> --no-isolation --wheel --outdir 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache  
> * Building wheel...
> Successfully built requests_cache-0.9.8-py3-none-any.whl
> I: pybuild plugin_pyproject:144: Unpacking wheel built for python3.12 with 
> "installer" module
> I: pybuild plugin_pyproject:129: Building wheel for python3.11 with "build" 
> module
> I: pybuild base:311: python3.11 -m build --skip-dependency-check 
> --no-isolation --wheel --outdir 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_requests_cache  
> * Building wheel...
> Successfully built requests_cache-0.9.8-py3-none-any.whl
> I: pybuild plugin_pyproject:144: Unpacking wheel built for python3.11 with 
> "installer" module
> # /usr/bin/make -C docs html
> make[1]: Leaving directory '/<<PKGBUILDDIR>>'
>    dh_auto_test -O--buildsystem=pybuild
> I: pybuild base:311: cd 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build; python3.12 -m 
> pytest --ignore=tests/integration
> ============================= test session starts 
> ==============================
> platform linux -- Python 3.12.4, pytest-8.2.2, pluggy-1.5.0
> rootdir: /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build
> configfile: pyproject.toml
> plugins: requests-mock-1.11.0
> collected 299 items
> 
> tests/compat/test_requests_mock_combine_cache.py .                       [  
> 0%]
> tests/compat/test_requests_mock_disable_cache.py .                       [  
> 0%]
> tests/compat/test_requests_mock_load_cache.py .                          [  
> 1%]
> tests/compat/test_responses_load_cache.py F                              [  
> 1%]
> tests/unit/models/test_raw_response.py F.....                            [  
> 3%]
> tests/unit/models/test_request.py .                                      [  
> 3%]
> tests/unit/models/test_response.py ...............                       [  
> 8%]
> tests/unit/policy/test_actions.py ...................................... [ 
> 21%]
> ..........................................                               [ 
> 35%]
> tests/unit/test_cache_keys.py ..................                         [ 
> 41%]
> tests/unit/test_patcher.py ..........                                    [ 
> 44%]
> tests/unit/test_serializers.py .......                                   [ 
> 47%]
> tests/unit/test_session.py ............................................. [ 
> 62%]
> ........................................................................ [ 
> 86%]
> .........................................                                
> [100%]
> 
> =================================== FAILURES 
> ===================================
> ______________________________ test_mock_session 
> _______________________________
> 
> self = <urllib3.connection.HTTPSConnection object at 0x7fa120524950>
> 
>     def _new_conn(self) -> socket.socket:
>         """Establish a socket connection and set nodelay settings on it.
>     
>         :return: New socket connection.
>         """
>         try:
> >           sock = connection.create_connection(
>                 (self._dns_host, self.port),
>                 self.timeout,
>                 source_address=self.source_address,
>                 socket_options=self.socket_options,
>             )
> 
> /usr/lib/python3/dist-packages/urllib3/connection.py:203: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> /usr/lib/python3/dist-packages/urllib3/util/connection.py:85: in 
> create_connection
>     raise err
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> address = ('127.0.0.1', 9), timeout = None, source_address = None
> socket_options = []
> 
>     def create_connection(
>         address: tuple[str, int],
>         timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
>         source_address: tuple[str, int] | None = None,
>         socket_options: _TYPE_SOCKET_OPTIONS | None = None,
>     ) -> socket.socket:
>         """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:`socket.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()
>     
>         try:
>             host.encode("idna")
>         except UnicodeError:
>             raise LocationParseError(f"'{host}', label empty or too long") 
> from None
>     
>         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 _DEFAULT_TIMEOUT:
>                     sock.settimeout(timeout)
>                 if source_address:
>                     sock.bind(source_address)
> >               sock.connect(sa)
> E               ConnectionRefusedError: [Errno 111] Connection refused
> 
> /usr/lib/python3/dist-packages/urllib3/util/connection.py:73: 
> ConnectionRefusedError
> 
> The above exception was the direct cause of the following exception:
> 
> self = <urllib3.connectionpool.HTTPSConnectionPool object at 0x7fa120524890>
> method = 'GET', url = '/gzip', body = None
> headers = {'User-Agent': 'python-requests/2.32.3', 'Accept-Encoding': 'gzip, 
> deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
> retries = Retry(total=0, connect=None, read=False, redirect=None, status=None)
> redirect = False, assert_same_host = False
> timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None
> release_conn = False, chunked = False, body_pos = None, preload_content = 
> False
> decode_content = False, response_kw = {}
> parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/gzip', 
> query=None, fragment=None)
> destination_scheme = None, conn = None, release_this_conn = True
> http_tunnel_required = True, err = None, clean_exit = False
> 
>     def urlopen(  # type: ignore[override]
>         self,
>         method: str,
>         url: str,
>         body: _TYPE_BODY | None = None,
>         headers: typing.Mapping[str, str] | None = None,
>         retries: Retry | bool | int | None = None,
>         redirect: bool = True,
>         assert_same_host: bool = True,
>         timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
>         pool_timeout: int | None = None,
>         release_conn: bool | None = None,
>         chunked: bool = False,
>         body_pos: _TYPE_BODY_POSITION | None = None,
>         preload_content: bool = True,
>         decode_content: bool = True,
>         **response_kw: typing.Any,
>     ) -> BaseHTTPResponse:
>         """
>         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
>            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 url:
>             The URL to perform the request on.
>     
>         :param body:
>             Data to send in the request body, either :class:`str`, 
> :class:`bytes`,
>             an iterable of :class:`str`/:class:`bytes`, or a file-like object.
>     
>         :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 bool preload_content:
>             If True, the response's body will be preloaded into memory.
>     
>         :param bool decode_content:
>             If True, will attempt to decode the body based on the
>             'content-encoding' header.
>     
>         :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 
> ``preload_content``
>             which defaults to ``True``.
>     
>         :param bool 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.
>         """
>         parsed_url = parse_url(url)
>         destination_scheme = parsed_url.scheme
>     
>         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 = preload_content
>     
>         # Check host
>         if assert_same_host and not self.is_same_host(url):
>             raise HostChangedError(self, url, retries)
>     
>         # Ensure that the URL we're connecting to is properly encoded
>         if url.startswith("/"):
>             url = to_str(_encode_target(url))
>         else:
>             url = to_str(parsed_url.url)
>     
>         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/urllib3/urllib3/issues/651>
>         release_this_conn = release_conn
>     
>         http_tunnel_required = connection_requires_http_tunnel(
>             self.proxy, self.proxy_config, destination_scheme
>         )
>     
>         # Merge the proxy headers. Only done when not using HTTP CONNECT. We
>         # have to copy the headers dict so we can safely change it without 
> those
>         # changes being reflected in anyone else's copy.
>         if not http_tunnel_required:
>             headers = headers.copy()  # type: ignore[attr-defined]
>             headers.update(self.proxy_headers)  # type: ignore[union-attr]
>     
>         # 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  # type: 
> ignore[assignment]
>     
>             # Is this a closed/new connection that requires CONNECT 
> tunnelling?
>             if self.proxy is not None and http_tunnel_required and 
> conn.is_closed:
>                 try:
> >                   self._prepare_proxy(conn)
> 
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:777: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:1046: in 
> _prepare_proxy
>     conn.connect()
> /usr/lib/python3/dist-packages/urllib3/connection.py:611: in connect
>     self.sock = sock = self._new_conn()
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <urllib3.connection.HTTPSConnection object at 0x7fa120524950>
> 
>     def _new_conn(self) -> socket.socket:
>         """Establish a socket connection and set nodelay settings on it.
>     
>         :return: New socket connection.
>         """
>         try:
>             sock = connection.create_connection(
>                 (self._dns_host, self.port),
>                 self.timeout,
>                 source_address=self.source_address,
>                 socket_options=self.socket_options,
>             )
>         except socket.gaierror as e:
>             raise NameResolutionError(self.host, self, e) from e
>         except SocketTimeout as e:
>             raise ConnectTimeoutError(
>                 self,
>                 f"Connection to {self.host} timed out. (connect 
> timeout={self.timeout})",
>             ) from e
>     
>         except OSError as e:
> >           raise NewConnectionError(
>                 self, f"Failed to establish a new connection: {e}"
>             ) from e
> E           urllib3.exceptions.NewConnectionError: 
> <urllib3.connection.HTTPSConnection object at 0x7fa120524950>: Failed to 
> establish a new connection: [Errno 111] Connection refused
> 
> /usr/lib/python3/dist-packages/urllib3/connection.py:218: NewConnectionError
> 
> The above exception was the direct cause of the following exception:
> Traceback (most recent call last):
>   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 203, in 
> _new_conn
>     sock = connection.create_connection(
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 85, 
> in create_connection
>     raise err
>   File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 73, 
> in create_connection
>     sock.connect(sa)
> ConnectionRefusedError: [Errno 111] Connection refused
> 
> The above exception was the direct cause of the following exception:
> 
> Traceback (most recent call last):
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 777, 
> in urlopen
>     self._prepare_proxy(conn)
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 1046, 
> in _prepare_proxy
>     conn.connect()
>   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 611, in 
> connect
>     self.sock = sock = self._new_conn()
>                        ^^^^^^^^^^^^^^^^
>   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 218, in 
> _new_conn
>     raise NewConnectionError(
> urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection 
> object at 0x7fa120524950>: Failed to establish a new connection: [Errno 111] 
> Connection refused
> 
> The above exception was the direct cause of the following exception:
> 
> urllib3.exceptions.ProxyError: ('Unable to connect to proxy', 
> NewConnectionError('<urllib3.connection.HTTPSConnection object at 
> 0x7fa120524950>: Failed to establish a new connection: [Errno 111] Connection 
> refused'))
> 
> The above exception was the direct cause of the following exception:
> 
> self = <requests.adapters.HTTPAdapter object at 0x7fa120b4be00>
> request = <PreparedRequest [GET]>, stream = False
> timeout = Timeout(connect=None, read=None, total=None), verify = True
> cert = None
> proxies = OrderedDict({'no': 'localhost', 'https': 'https://127.0.0.1:9/', 
> 'http': 'http://127.0.0.1:9/'})
> 
>     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
>         """
>     
>         try:
>             conn = self.get_connection_with_tls_context(
>                 request, verify, proxies=proxies, cert=cert
>             )
>         except LocationValueError as e:
>             raise InvalidURL(e, request=request)
>     
>         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:
>                 raise ValueError(
>                     f"Invalid timeout {timeout}. Pass a (connect, read) 
> timeout tuple, "
>                     f"or a single float to set both timeouts to the same 
> value."
>                 )
>         elif isinstance(timeout, TimeoutSauce):
>             pass
>         else:
>             timeout = TimeoutSauce(connect=timeout, read=timeout)
>     
>         try:
> >           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,
>                 chunked=chunked,
>             )
> 
> /usr/lib/python3/dist-packages/requests/adapters.py:667: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:845: in urlopen
>     retries = retries.increment(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = Retry(total=0, connect=None, read=False, redirect=None, status=None)
> method = 'GET', url = '/gzip', response = None
> error = ProxyError('Unable to connect to proxy', 
> NewConnectionError('<urllib3.connection.HTTPSConnection object at 
> 0x7fa120524950>: Failed to establish a new connection: [Errno 111] Connection 
> refused'))
> _pool = <urllib3.connectionpool.HTTPSConnectionPool object at 0x7fa120524890>
> _stacktrace = <traceback object at 0x7fa12052e000>
> 
>     def increment(
>         self,
>         method: str | None = None,
>         url: str | None = None,
>         response: BaseHTTPResponse | None = None,
>         error: Exception | None = None,
>         _pool: ConnectionPool | None = None,
>         _stacktrace: TracebackType | None = None,
>     ) -> Retry:
>         """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.BaseHTTPResponse`
>         :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 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
>         other = self.other
>         cause = "unknown"
>         status = None
>         redirect_location = None
>     
>         if error and self._is_connection_error(error):
>             # Connect retry?
>             if connect is False:
>                 raise 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 method is None or not 
> self._is_method_retryable(method):
>                 raise reraise(type(error), error, _stacktrace)
>             elif read is not None:
>                 read -= 1
>     
>         elif error:
>             # Other retry?
>             if other is not None:
>                 other -= 1
>     
>         elif response and response.get_redirect_location():
>             # Redirect retry?
>             if redirect is not None:
>                 redirect -= 1
>             cause = "too many redirects"
>             response_redirect_location = response.get_redirect_location()
>             if response_redirect_location:
>                 redirect_location = response_redirect_location
>             status = response.status
>     
>         else:
>             # Incrementing because of a server error like a 500 in
>             # status_forcelist and the given method is in the allowed_methods
>             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,
>             other=other,
>             history=history,
>         )
>     
>         if new_retry.is_exhausted():
>             reason = error or ResponseError(cause)
> >           raise MaxRetryError(_pool, url, reason) from reason  # type: 
> > ignore[arg-type]
> E           urllib3.exceptions.MaxRetryError: 
> HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with 
> url: /gzip (Caused by ProxyError('Unable to connect to proxy', 
> NewConnectionError('<urllib3.connection.HTTPSConnection object at 
> 0x7fa120524950>: Failed to establish a new connection: [Errno 111] Connection 
> refused')))
> 
> /usr/lib/python3/dist-packages/urllib3/util/retry.py:515: MaxRetryError
> 
> During handling of the above exception, another exception occurred:
> 
> mock_http_adapter = <MagicMock name='get_connection' id='140330015172864'>
> 
>     @patch.object(
>         requests.adapters.HTTPAdapter, 'get_connection', 
> side_effect=ValueError('Real request made!')
>     )
>     def test_mock_session(mock_http_adapter):
>         """Test that the mock_session fixture is working as expected"""
>         with get_responses():
>             # An error will be raised if a real request is made
>             with pytest.raises(ValueError):
> >               requests.get(PASSTHRU_URL)
> 
> tests/compat/test_responses_load_cache.py:53: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> /usr/lib/python3/dist-packages/requests/api.py:73: in get
>     return request("get", url, params=params, **kwargs)
> /usr/lib/python3/dist-packages/requests/api.py:59: in request
>     return session.request(method=method, url=url, **kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:589: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:703: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/responses/__init__.py:1175: in send
>     return self._on_request(adapter, request, **kwargs)
> /usr/lib/python3/dist-packages/responses/__init__.py:1079: in _on_request
>     return self._real_send(adapter, request, **kwargs)  # type: ignore
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <requests.adapters.HTTPAdapter object at 0x7fa120b4be00>
> request = <PreparedRequest [GET]>, stream = False
> timeout = Timeout(connect=None, read=None, total=None), verify = True
> cert = None
> proxies = OrderedDict({'no': 'localhost', 'https': 'https://127.0.0.1:9/', 
> 'http': 'http://127.0.0.1:9/'})
> 
>     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
>         """
>     
>         try:
>             conn = self.get_connection_with_tls_context(
>                 request, verify, proxies=proxies, cert=cert
>             )
>         except LocationValueError as e:
>             raise InvalidURL(e, request=request)
>     
>         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:
>                 raise ValueError(
>                     f"Invalid timeout {timeout}. Pass a (connect, read) 
> timeout tuple, "
>                     f"or a single float to set both timeouts to the same 
> value."
>                 )
>         elif isinstance(timeout, TimeoutSauce):
>             pass
>         else:
>             timeout = TimeoutSauce(connect=timeout, read=timeout)
>     
>         try:
>             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,
>                 chunked=chunked,
>             )
>     
>         except (ProtocolError, OSError) 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)
> E               requests.exceptions.ProxyError: 
> HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with 
> url: /gzip (Caused by ProxyError('Unable to connect to proxy', 
> NewConnectionError('<urllib3.connection.HTTPSConnection object at 
> 0x7fa120524950>: Failed to establish a new connection: [Errno 111] Connection 
> refused')))
> 
> /usr/lib/python3/dist-packages/requests/adapters.py:694: ProxyError
> ----------------------------- Captured stderr call 
> -----------------------------
> INFO:responses:request.allowed-passthru
> ------------------------------ Captured log call 
> -------------------------------
> INFO     responses:__init__.py:1078 request.allowed-passthru
> ______________________________ test_from_response 
> ______________________________
> 
> mock_session = <CachedSession(cache=<SQLiteCache(name=http_cache)>, 
> expire_after=-1, urls_expire_after=None, allowable_codes=(200,), 
> ...wable_methods=['GET', 'HEAD', 'OPTIONS', 'POST', 'PUT', 'PATCH', 
> 'DELETE'], stale_if_error=False, cache_control=False)>
> 
>     def test_from_response(mock_session):
>         response = mock_session.get(MOCKED_URL)
>         response.raw._fp = BytesIO(b'mock response')
>         raw = CachedHTTPResponse.from_response(response)
>     
>         assert dict(response.raw.headers) == dict(raw.headers) == 
> {'Content-Type': 'text/plain'}
>         assert raw.read(None) == b'mock response'
>         assert response.raw.decode_content is raw.decode_content is False
>         assert response.raw.reason is raw.reason is None
>         if hasattr(response.raw, '_request_url'):
>             assert response.raw._request_url is raw.request_url is None
>         assert response.raw.status == raw.status == 200
> >       assert response.raw.strict == raw.strict == 0
> E       AttributeError: 'HTTPResponse' object has no attribute 'strict'
> 
> tests/unit/models/test_raw_response.py:19: AttributeError
> =============================== warnings summary 
> ===============================
> tests/unit/models/test_response.py:38
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/tests/unit/models/test_response.py:38:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     (datetime.utcnow() + timedelta(days=1), False),
> 
> tests/unit/models/test_response.py:39
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/tests/unit/models/test_response.py:39:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     (datetime.utcnow() - timedelta(days=1), True),
> 
> tests/unit/test_session.py:32
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/tests/unit/test_session.py:32:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     YESTERDAY = datetime.utcnow() - timedelta(days=1)
> 
> tests/compat/test_requests_mock_combine_cache.py: 1 warning
> tests/unit/models/test_raw_response.py: 1 warning
> tests/unit/models/test_request.py: 1 warning
> tests/unit/models/test_response.py: 19 warnings
> tests/unit/policy/test_actions.py: 5 warnings
> tests/unit/test_serializers.py: 3 warnings
> tests/unit/test_session.py: 311 warnings
>   <attrs generated init requests_cache.models.response.CachedResponse>:11: 
> DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     self.created_at = __attr_factory_created_at()
> 
> tests/compat/test_requests_mock_load_cache.py::test_mock_session
> tests/compat/test_responses_load_cache.py::test_mock_session
> tests/unit/test_session.py::test_values
> tests/unit/test_session.py::test_values__with_invalid_responses[True-1]
> tests/unit/test_session.py::test_values__with_invalid_responses[False-2]
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/requests_cache/backends/base.py:298:
>  DeprecationWarning: BaseCache.values() is deprecated; please use .filter() 
> instead
>     warn('BaseCache.values() is deprecated; please use .filter() instead', 
> DeprecationWarning)
> 
> tests/unit/models/test_raw_response.py: 1 warning
> tests/unit/models/test_request.py: 1 warning
> tests/unit/models/test_response.py: 10 warnings
> tests/unit/test_serializers.py: 1 warning
> tests/unit/test_session.py: 306 warnings
>   <cattrs generated unstructure 
> requests_cache.models.response.CachedResponse>:10: DeprecationWarning: 
> datetime.datetime.utcnow() is deprecated and scheduled for removal in a 
> future version. Use timezone-aware objects to represent datetimes in UTC: 
> datetime.datetime.now(datetime.UTC).
>     if instance.created_at != __c_def_created_at():
> 
> tests/unit/models/test_response.py: 9 warnings
> tests/unit/policy/test_actions.py: 4 warnings
> tests/unit/test_session.py: 52 warnings
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/requests_cache/models/response.py:99:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     return self.expires is not None and datetime.utcnow() >= self.expires
> 
> tests/unit/models/test_response.py::test_revalidate__extend_expiration
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/tests/unit/models/test_response.py:82:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     expires=datetime.utcnow() - timedelta(seconds=0.01),
> 
> tests/unit/models/test_response.py::test_revalidate__extend_expiration
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/tests/unit/models/test_response.py:87:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     is_expired = response.revalidate(datetime.utcnow() + 
> timedelta(seconds=0.01))
> 
> tests/unit/models/test_response.py::test_revalidate__shorten_expiration
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/tests/unit/models/test_response.py:97:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     expires=datetime.utcnow() + timedelta(seconds=1),
> 
> tests/unit/models/test_response.py::test_revalidate__shorten_expiration
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/tests/unit/models/test_response.py:102:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     is_expired = response.revalidate(datetime.utcnow() - timedelta(seconds=1))
> 
> tests/unit/policy/test_actions.py: 3 warnings
> tests/unit/test_session.py: 17 warnings
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/requests_cache/policy/actions.py:179:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     return datetime.utcnow() + expire_after
> 
> tests/unit/policy/test_actions.py::test_get_expiration_datetime__relative[expire_after0-expected_expiration_delta0]
> tests/unit/policy/test_actions.py::test_get_expiration_datetime__relative[60-expected_expiration_delta1]
> tests/unit/policy/test_actions.py::test_get_expiration_datetime__relative[33.3-expected_expiration_delta2]
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/tests/unit/policy/test_actions.py:294:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     expected_expiration = datetime.utcnow() + expected_expiration_delta
> 
> tests/unit/test_serializers.py::test_custom_serializer
>   <cattrs generated unstructure 
> requests_cache.models.response.CachedResponse-2>:10: DeprecationWarning: 
> datetime.datetime.utcnow() is deprecated and scheduled for removal in a 
> future version. Use timezone-aware objects to represent datetimes in UTC: 
> datetime.datetime.now(datetime.UTC).
>     if instance.created_at != __c_def_created_at():
> 
> tests/unit/test_session.py::test_keys
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/requests_cache/backends/base.py:269:
>  DeprecationWarning: BaseCache.keys() is deprecated; please use .filter() or 
> BaseCache.responses.keys() instead
>     warn(
> 
> tests/unit/test_session.py::test_response_count[True-2]
> tests/unit/test_session.py::test_response_count[False-3]
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/requests_cache/backends/base.py:280:
>  DeprecationWarning: BaseCache.response_count() is deprecated; please use 
> .filter() or len(BaseCache.responses) instead
>     warn(
> 
> tests/unit/test_session.py: 19 warnings
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/requests_cache/backends/base.py:262:
>  DeprecationWarning: BaseCache.has_url() is deprecated; please use 
> .contains(url=...) instead
>     warn(
> 
> tests/unit/test_session.py::test_delete_url
> tests/unit/test_session.py::test_delete_url__request_args
> tests/unit/test_session.py::test_delete_url__nonexistent_response
> tests/unit/test_session.py::test_delete_url__nonexistent_response
> tests/unit/test_session.py::test_delete_url__nonexistent_response
> tests/unit/test_session.py::test_delete_url__redirect
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/requests_cache/backends/base.py:241:
>  DeprecationWarning: BaseCache.delete_url() is deprecated; please use 
> .delete(urls=...) instead
>     warn(
> 
> tests/unit/test_session.py::test_delete_urls
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/requests_cache/backends/base.py:248:
>  DeprecationWarning: BaseCache.delete_urls() is deprecated; please use 
> .delete(urls=...) instead
>     warn(
> 
> tests/unit/test_session.py::test_response_defaults
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/tests/unit/test_session.py:450:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     mock_session.expire_after = datetime.utcnow() + timedelta(days=1)
> 
> tests/unit/test_session.py::test_do_not_cache
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/requests_cache/policy/actions.py:165:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     return datetime.utcnow()
> 
> tests/unit/test_session.py::test_do_not_cache
> tests/unit/test_session.py::test_remove_expired_responses__per_request
> tests/unit/test_session.py::test_remove_expired_responses__per_request
> tests/unit/test_session.py::test_per_request__enable_expiration
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/requests_cache/policy/actions.py:185:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     return ceil((expires - datetime.utcnow()).total_seconds()) if expires 
> else NEVER_EXPIRE
> 
> tests/unit/test_session.py::test_remove_expired_responses
> tests/unit/test_session.py::test_remove_expired_responses
> tests/unit/test_session.py::test_remove_expired_responses__error
> tests/unit/test_session.py::test_remove_expired_responses__extend_expiration
> tests/unit/test_session.py::test_remove_expired_responses__shorten_expiration
> tests/unit/test_session.py::test_remove_expired_responses__per_request
> tests/unit/test_session.py::test_remove_expired_responses__per_request
> tests/unit/test_session.py::test_remove_expired_responses__per_request
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/requests_cache/backends/base.py:288:
>  DeprecationWarning: BaseCache.remove_expired_responses() is deprecated; 
> please use .delete(expired=True) instead
>     warn(
> 
> tests/unit/test_session.py::test_remove_expired_responses__extend_expiration
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/tests/unit/test_session.py:696:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     mock_session.expire_after = datetime.utcnow() - timedelta(seconds=0.01)
> 
> tests/unit/test_session.py::test_remove_expired_responses__extend_expiration
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/tests/unit/test_session.py:700:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     mock_session.remove_expired_responses(expire_after=datetime.utcnow() + 
> timedelta(seconds=1))
> 
> tests/unit/test_session.py::test_remove_expired_responses__shorten_expiration
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/tests/unit/test_session.py:708:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     mock_session.expire_after = datetime.utcnow() + timedelta(seconds=1)
> 
> tests/unit/test_session.py::test_remove_expired_responses__shorten_expiration
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/tests/unit/test_session.py:712:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     mock_session.remove_expired_responses(expire_after=datetime.utcnow() - 
> timedelta(seconds=0.01))
> 
> tests/unit/test_session.py::test_remove_expired_responses__per_request
> tests/unit/test_session.py::test_remove_expired_responses__per_request
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build/tests/unit/test_session.py:731:
>  DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled 
> for removal in a future version. Use timezone-aware objects to represent 
> datetimes in UTC: datetime.datetime.now(datetime.UTC).
>     print('Expires:', response.expires - datetime.utcnow() if 
> response.expires else None)
> 
> -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
> =========================== short test summary info 
> ============================
> FAILED tests/compat/test_responses_load_cache.py::test_mock_session - 
> request...
> FAILED tests/unit/models/test_raw_response.py::test_from_response - 
> Attribute...
> ================= 2 failed, 297 passed, 810 warnings in 15.81s 
> =================
> E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests_cache/build; python3.12 -m 
> pytest --ignore=tests/integration
> I: pybuild base:311: cd 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_requests_cache/build; python3.11 -m 
> pytest --ignore=tests/integration
> ============================= test session starts 
> ==============================
> platform linux -- Python 3.11.9, pytest-8.2.2, pluggy-1.5.0
> rootdir: /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_requests_cache/build
> configfile: pyproject.toml
> plugins: requests-mock-1.11.0
> collected 299 items
> 
> tests/compat/test_requests_mock_combine_cache.py .                       [  
> 0%]
> tests/compat/test_requests_mock_disable_cache.py .                       [  
> 0%]
> tests/compat/test_requests_mock_load_cache.py .                          [  
> 1%]
> tests/compat/test_responses_load_cache.py F                              [  
> 1%]
> tests/unit/models/test_raw_response.py F.....                            [  
> 3%]
> tests/unit/models/test_request.py .                                      [  
> 3%]
> tests/unit/models/test_response.py ...............                       [  
> 8%]
> tests/unit/policy/test_actions.py ...................................... [ 
> 21%]
> ..........................................                               [ 
> 35%]
> tests/unit/test_cache_keys.py ..................                         [ 
> 41%]
> tests/unit/test_patcher.py ..........                                    [ 
> 44%]
> tests/unit/test_serializers.py .......                                   [ 
> 47%]
> tests/unit/test_session.py ............................................. [ 
> 62%]
> ........................................................................ [ 
> 86%]
> .........................................                                
> [100%]
> 
> =================================== FAILURES 
> ===================================
> ______________________________ test_mock_session 
> _______________________________
> 
> self = <urllib3.connection.HTTPSConnection object at 0x7f21ead327d0>
> 
>     def _new_conn(self) -> socket.socket:
>         """Establish a socket connection and set nodelay settings on it.
>     
>         :return: New socket connection.
>         """
>         try:
> >           sock = connection.create_connection(
>                 (self._dns_host, self.port),
>                 self.timeout,
>                 source_address=self.source_address,
>                 socket_options=self.socket_options,
>             )
> 
> /usr/lib/python3/dist-packages/urllib3/connection.py:203: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> /usr/lib/python3/dist-packages/urllib3/util/connection.py:85: in 
> create_connection
>     raise err
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> address = ('127.0.0.1', 9), timeout = None, source_address = None
> socket_options = []
> 
>     def create_connection(
>         address: tuple[str, int],
>         timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
>         source_address: tuple[str, int] | None = None,
>         socket_options: _TYPE_SOCKET_OPTIONS | None = None,
>     ) -> socket.socket:
>         """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:`socket.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()
>     
>         try:
>             host.encode("idna")
>         except UnicodeError:
>             raise LocationParseError(f"'{host}', label empty or too long") 
> from None
>     
>         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 _DEFAULT_TIMEOUT:
>                     sock.settimeout(timeout)
>                 if source_address:
>                     sock.bind(source_address)
> >               sock.connect(sa)
> E               ConnectionRefusedError: [Errno 111] Connection refused
> 
> /usr/lib/python3/dist-packages/urllib3/util/connection.py:73: 
> ConnectionRefusedError
> 
> The above exception was the direct cause of the following exception:
> 
> self = <urllib3.connectionpool.HTTPSConnectionPool object at 0x7f21eb9c5c50>
> method = 'GET', url = '/gzip', body = None
> headers = {'User-Agent': 'python-requests/2.32.3', 'Accept-Encoding': 'gzip, 
> deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
> retries = Retry(total=0, connect=None, read=False, redirect=None, status=None)
> redirect = False, assert_same_host = False
> timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None
> release_conn = False, chunked = False, body_pos = None, preload_content = 
> False
> decode_content = False, response_kw = {}
> parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/gzip', 
> query=None, fragment=None)
> destination_scheme = None, conn = None, release_this_conn = True
> http_tunnel_required = True, err = None, clean_exit = False
> 
>     def urlopen(  # type: ignore[override]
>         self,
>         method: str,
>         url: str,
>         body: _TYPE_BODY | None = None,
>         headers: typing.Mapping[str, str] | None = None,
>         retries: Retry | bool | int | None = None,
>         redirect: bool = True,
>         assert_same_host: bool = True,
>         timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
>         pool_timeout: int | None = None,
>         release_conn: bool | None = None,
>         chunked: bool = False,
>         body_pos: _TYPE_BODY_POSITION | None = None,
>         preload_content: bool = True,
>         decode_content: bool = True,
>         **response_kw: typing.Any,
>     ) -> BaseHTTPResponse:
>         """
>         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
>            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 url:
>             The URL to perform the request on.
>     
>         :param body:
>             Data to send in the request body, either :class:`str`, 
> :class:`bytes`,
>             an iterable of :class:`str`/:class:`bytes`, or a file-like object.
>     
>         :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 bool preload_content:
>             If True, the response's body will be preloaded into memory.
>     
>         :param bool decode_content:
>             If True, will attempt to decode the body based on the
>             'content-encoding' header.
>     
>         :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 
> ``preload_content``
>             which defaults to ``True``.
>     
>         :param bool 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.
>         """
>         parsed_url = parse_url(url)
>         destination_scheme = parsed_url.scheme
>     
>         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 = preload_content
>     
>         # Check host
>         if assert_same_host and not self.is_same_host(url):
>             raise HostChangedError(self, url, retries)
>     
>         # Ensure that the URL we're connecting to is properly encoded
>         if url.startswith("/"):
>             url = to_str(_encode_target(url))
>         else:
>             url = to_str(parsed_url.url)
>     
>         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/urllib3/urllib3/issues/651>
>         release_this_conn = release_conn
>     
>         http_tunnel_required = connection_requires_http_tunnel(
>             self.proxy, self.proxy_config, destination_scheme
>         )
>     
>         # Merge the proxy headers. Only done when not using HTTP CONNECT. We
>         # have to copy the headers dict so we can safely change it without 
> those
>         # changes being reflected in anyone else's copy.
>         if not http_tunnel_required:
>             headers = headers.copy()  # type: ignore[attr-defined]
>             headers.update(self.proxy_headers)  # type: ignore[union-attr]
>     
>         # 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  # type: 
> ignore[assignment]
>     
>             # Is this a closed/new connection that requires CONNECT 
> tunnelling?
>             if self.proxy is not None and http_tunnel_required and 
> conn.is_closed:
>                 try:
> >                   self._prepare_proxy(conn)
> 
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:777: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:1046: in 
> _prepare_proxy
>     conn.connect()
> /usr/lib/python3/dist-packages/urllib3/connection.py:611: in connect
>     self.sock = sock = self._new_conn()
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <urllib3.connection.HTTPSConnection object at 0x7f21ead327d0>
> 
>     def _new_conn(self) -> socket.socket:
>         """Establish a socket connection and set nodelay settings on it.
>     
>         :return: New socket connection.
>         """
>         try:
>             sock = connection.create_connection(
>                 (self._dns_host, self.port),
>                 self.timeout,
>                 source_address=self.source_address,
>                 socket_options=self.socket_options,
>             )
>         except socket.gaierror as e:
>             raise NameResolutionError(self.host, self, e) from e
>         except SocketTimeout as e:
>             raise ConnectTimeoutError(
>                 self,
>                 f"Connection to {self.host} timed out. (connect 
> timeout={self.timeout})",
>             ) from e
>     
>         except OSError as e:
> >           raise NewConnectionError(
>                 self, f"Failed to establish a new connection: {e}"
>             ) from e
> E           urllib3.exceptions.NewConnectionError: 
> <urllib3.connection.HTTPSConnection object at 0x7f21ead327d0>: Failed to 
> establish a new connection: [Errno 111] Connection refused
> 
> /usr/lib/python3/dist-packages/urllib3/connection.py:218: NewConnectionError
> 
> The above exception was the direct cause of the following exception:
> Traceback (most recent call last):
>   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 203, in 
> _new_conn
>     sock = connection.create_connection(
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 85, 
> in create_connection
>     raise err
>   File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 73, 
> in create_connection
>     sock.connect(sa)
> ConnectionRefusedError: [Errno 111] Connection refused
> 
> The above exception was the direct cause of the following exception:
> 
> Traceback (most recent call last):
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 777, 
> in urlopen
>     self._prepare_proxy(conn)
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 1046, 
> in _prepare_proxy
>     conn.connect()
>   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 611, in 
> connect
>     self.sock = sock = self._new_conn()
>                        ^^^^^^^^^^^^^^^^
>   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 218, in 
> _new_conn
>     raise NewConnectionError(
> urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection 
> object at 0x7f21ead327d0>: Failed to establish a new connection: [Errno 111] 
> Connection refused
> 
> The above exception was the direct cause of the following exception:
> 
> urllib3.exceptions.ProxyError: ('Unable to connect to proxy', 
> NewConnectionError('<urllib3.connection.HTTPSConnection object at 
> 0x7f21ead327d0>: Failed to establish a new connection: [Errno 111] Connection 
> refused'))
> 
> The above exception was the direct cause of the following exception:
> 
> self = <requests.adapters.HTTPAdapter object at 0x7f21ea4bbb10>
> request = <PreparedRequest [GET]>, stream = False
> timeout = Timeout(connect=None, read=None, total=None), verify = True
> cert = None
> proxies = OrderedDict([('no', 'localhost'), ('https', 
> 'https://127.0.0.1:9/'), ('http', 'http://127.0.0.1:9/')])
> 
>     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
>         """
>     
>         try:
>             conn = self.get_connection_with_tls_context(
>                 request, verify, proxies=proxies, cert=cert
>             )
>         except LocationValueError as e:
>             raise InvalidURL(e, request=request)
>     
>         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:
>                 raise ValueError(
>                     f"Invalid timeout {timeout}. Pass a (connect, read) 
> timeout tuple, "
>                     f"or a single float to set both timeouts to the same 
> value."
>                 )
>         elif isinstance(timeout, TimeoutSauce):
>             pass
>         else:
>             timeout = TimeoutSauce(connect=timeout, read=timeout)
>     
>         try:
> >           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,
>                 chunked=chunked,
>             )
> 
> /usr/lib/python3/dist-packages/requests/adapters.py:667: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:845: in urlopen
>     retries = retries.increment(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = Retry(total=0, connect=None, read=False, redirect=None, status=None)
> method = 'GET', url = '/gzip', response = None
> error = ProxyError('Unable to connect to proxy', 
> NewConnectionError('<urllib3.connection.HTTPSConnection object at 
> 0x7f21ead327d0>: Failed to establish a new connection: [Errno 111] Connection 
> refused'))
> _pool = <urllib3.connectionpool.HTTPSConnectionPool object at 0x7f21eb9c5c50>
> _stacktrace = <traceback object at 0x7f21ea490c40>
> 
>     def increment(
>         self,
>         method: str | None = None,
>         url: str | None = None,
>         response: BaseHTTPResponse | None = None,
>         error: Exception | None = None,
>         _pool: ConnectionPool | None = None,
>         _stacktrace: TracebackType | None = None,
>     ) -> Retry:
>         """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.BaseHTTPResponse`
>         :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 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
>         other = self.other
>         cause = "unknown"
>         status = None
>         redirect_location = None
>     
>         if error and self._is_connection_error(error):
>             # Connect retry?
>             if connect is False:
>                 raise 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 method is None or not 
> self._is_method_retryable(method):
>                 raise reraise(type(error), error, _stacktrace)
>             elif read is not None:
>                 read -= 1
>     
>         elif error:
>             # Other retry?
>             if other is not None:
>                 other -= 1
>     
>         elif response and response.get_redirect_location():
>             # Redirect retry?
>             if redirect is not None:
>                 redirect -= 1
>             cause = "too many redirects"
>             response_redirect_location = response.get_redirect_location()
>             if response_redirect_location:
>                 redirect_location = response_redirect_location
>             status = response.status
>     
>         else:
>             # Incrementing because of a server error like a 500 in
>             # status_forcelist and the given method is in the allowed_methods
>             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,
>             other=other,
>             history=history,
>         )
>     
>         if new_retry.is_exhausted():
>             reason = error or ResponseError(cause)
> >           raise MaxRetryError(_pool, url, reason) from reason  # type: 
> > ignore[arg-type]
> E           urllib3.exceptions.MaxRetryError: 
> HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with 
> url: /gzip (Caused by ProxyError('Unable to connect to proxy', 
> NewConnectionError('<urllib3.connection.HTTPSConnection object at 
> 0x7f21ead327d0>: Failed to establish a new connection: [Errno 111] Connection 
> refused')))
> 
> /usr/lib/python3/dist-packages/urllib3/util/retry.py:515: MaxRetryError
> 
> During handling of the above exception, another exception occurred:
> 
> mock_http_adapter = <MagicMock name='get_connection' id='139783641468816'>
> 
>     @patch.object(
>         requests.adapters.HTTPAdapter, 'get_connection', 
> side_effect=ValueError('Real request made!')
>     )
>     def test_mock_session(mock_http_adapter):
>         """Test that the mock_session fixture is working as expected"""
>         with get_responses():
>             # An error will be raised if a real request is made
>             with pytest.raises(ValueError):
> >               requests.get(PASSTHRU_URL)
> 
> tests/compat/test_responses_load_cache.py:53: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> /usr/lib/python3/dist-packages/requests/api.py:73: in get
>     return request("get", url, params=params, **kwargs)
> /usr/lib/python3/dist-packages/requests/api.py:59: in request
>     return session.request(method=method, url=url, **kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:589: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:703: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/responses/__init__.py:1175: in send
>     return self._on_request(adapter, request, **kwargs)
> /usr/lib/python3/dist-packages/responses/__init__.py:1079: in _on_request
>     return self._real_send(adapter, request, **kwargs)  # type: ignore
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <requests.adapters.HTTPAdapter object at 0x7f21ea4bbb10>
> request = <PreparedRequest [GET]>, stream = False
> timeout = Timeout(connect=None, read=None, total=None), verify = True
> cert = None
> proxies = OrderedDict([('no', 'localhost'), ('https', 
> 'https://127.0.0.1:9/'), ('http', 'http://127.0.0.1:9/')])
> 
>     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
>         """
>     
>         try:
>             conn = self.get_connection_with_tls_context(
>                 request, verify, proxies=proxies, cert=cert
>             )
>         except LocationValueError as e:
>             raise InvalidURL(e, request=request)
>     
>         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:
>                 raise ValueError(
>                     f"Invalid timeout {timeout}. Pass a (connect, read) 
> timeout tuple, "
>                     f"or a single float to set both timeouts to the same 
> value."
>                 )
>         elif isinstance(timeout, TimeoutSauce):
>             pass
>         else:
>             timeout = TimeoutSauce(connect=timeout, read=timeout)
>     
>         try:
>             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,
>                 chunked=chunked,
>             )
>     
>         except (ProtocolError, OSError) 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)
> E               requests.exceptions.ProxyError: 
> HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with 
> url: /gzip (Caused by ProxyError('Unable to connect to proxy', 
> NewConnectionError('<urllib3.connection.HTTPSConnection object at 
> 0x7f21ead327d0>: Failed to establish a new connection: [Errno 111] Connection 
> refused')))
> 
> /usr/lib/python3/dist-packages/requests/adapters.py:694: ProxyError
> ----------------------------- Captured stderr call 
> -----------------------------
> INFO:responses:request.allowed-passthru
> ------------------------------ Captured log call 
> -------------------------------
> INFO     responses:__init__.py:1078 request.allowed-passthru
> ______________________________ test_from_response 
> ______________________________
> 
> mock_session = <CachedSession(cache=<SQLiteCache(name=http_cache)>, 
> expire_after=-1, urls_expire_after=None, allowable_codes=(200,), 
> ...wable_methods=['GET', 'HEAD', 'OPTIONS', 'POST', 'PUT', 'PATCH', 
> 'DELETE'], stale_if_error=False, cache_control=False)>
> 
>     def test_from_response(mock_session):
>         response = mock_session.get(MOCKED_URL)
>         response.raw._fp = BytesIO(b'mock response')
>         raw = CachedHTTPResponse.from_response(response)
>     
>         assert dict(response.raw.headers) == dict(raw.headers) == 
> {'Content-Type': 'text/plain'}
>         assert raw.read(None) == b'mock response'
>         assert response.raw.decode_content is raw.decode_content is False
>         assert response.raw.reason is raw.reason is None
>         if hasattr(response.raw, '_request_url'):
>             assert response.raw._request_url is raw.request_url is None
>         assert response.raw.status == raw.status == 200
> >       assert response.raw.strict == raw.strict == 0
> E       AttributeError: 'HTTPResponse' object has no attribute 'strict'
> 
> tests/unit/models/test_raw_response.py:19: AttributeError
> =============================== warnings summary 
> ===============================
> tests/compat/test_requests_mock_load_cache.py::test_mock_session
> tests/compat/test_responses_load_cache.py::test_mock_session
> tests/unit/test_session.py::test_values
> tests/unit/test_session.py::test_values__with_invalid_responses[True-1]
> tests/unit/test_session.py::test_values__with_invalid_responses[False-2]
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_requests_cache/build/requests_cache/backends/base.py:298:
>  DeprecationWarning: BaseCache.values() is deprecated; please use .filter() 
> instead
>     warn('BaseCache.values() is deprecated; please use .filter() instead', 
> DeprecationWarning)
> 
> tests/unit/test_session.py::test_keys
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_requests_cache/build/requests_cache/backends/base.py:269:
>  DeprecationWarning: BaseCache.keys() is deprecated; please use .filter() or 
> BaseCache.responses.keys() instead
>     warn(
> 
> tests/unit/test_session.py::test_response_count[True-2]
> tests/unit/test_session.py::test_response_count[False-3]
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_requests_cache/build/requests_cache/backends/base.py:280:
>  DeprecationWarning: BaseCache.response_count() is deprecated; please use 
> .filter() or len(BaseCache.responses) instead
>     warn(
> 
> tests/unit/test_session.py: 19 warnings
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_requests_cache/build/requests_cache/backends/base.py:262:
>  DeprecationWarning: BaseCache.has_url() is deprecated; please use 
> .contains(url=...) instead
>     warn(
> 
> tests/unit/test_session.py::test_delete_url
> tests/unit/test_session.py::test_delete_url__request_args
> tests/unit/test_session.py::test_delete_url__nonexistent_response
> tests/unit/test_session.py::test_delete_url__nonexistent_response
> tests/unit/test_session.py::test_delete_url__nonexistent_response
> tests/unit/test_session.py::test_delete_url__redirect
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_requests_cache/build/requests_cache/backends/base.py:241:
>  DeprecationWarning: BaseCache.delete_url() is deprecated; please use 
> .delete(urls=...) instead
>     warn(
> 
> tests/unit/test_session.py::test_delete_urls
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_requests_cache/build/requests_cache/backends/base.py:248:
>  DeprecationWarning: BaseCache.delete_urls() is deprecated; please use 
> .delete(urls=...) instead
>     warn(
> 
> tests/unit/test_session.py::test_remove_expired_responses
> tests/unit/test_session.py::test_remove_expired_responses
> tests/unit/test_session.py::test_remove_expired_responses__error
> tests/unit/test_session.py::test_remove_expired_responses__extend_expiration
> tests/unit/test_session.py::test_remove_expired_responses__shorten_expiration
> tests/unit/test_session.py::test_remove_expired_responses__per_request
> tests/unit/test_session.py::test_remove_expired_responses__per_request
> tests/unit/test_session.py::test_remove_expired_responses__per_request
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_requests_cache/build/requests_cache/backends/base.py:288:
>  DeprecationWarning: BaseCache.remove_expired_responses() is deprecated; 
> please use .delete(expired=True) instead
>     warn(
> 
> -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
> =========================== short test summary info 
> ============================
> FAILED tests/compat/test_responses_load_cache.py::test_mock_session - 
> request...
> FAILED tests/unit/models/test_raw_response.py::test_from_response - 
> Attribute...
> ================= 2 failed, 297 passed, 42 warnings in 16.60s 
> ==================
> E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_requests_cache/build; python3.11 -m 
> pytest --ignore=tests/integration
> dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.12 
> 3.11" returned exit code 13


The full build log is available from:
http://qa-logs.debian.net/2024/06/15/python-requests-cache_0.9.8-2_unstable.log

All bugs filed during this archive rebuild are listed at:
https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=ftbfs-20240615;users=lu...@debian.org
or:
https://udd.debian.org/bugs/?release=na&merged=ign&fnewerval=7&flastmodval=7&fusertag=only&fusertagtag=ftbfs-20240615&fusertaguser=lu...@debian.org&allbugs=1&cseverity=1&ctags=1&caffected=1#results

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

If you reassign this bug to another package, please mark it as 'affects'-ing
this package. See https://www.debian.org/Bugs/server-control#affects

If you fail to reproduce this, please provide a build log and diff it with mine
so that we can identify if something relevant changed in the meantime.

--- End Message ---
--- Begin Message ---
Source: python-requests-cache
Source-Version: 1.2.1-1
Done: Sandro Tosi <mo...@debian.org>

We believe that the bug you reported is fixed in the latest version of
python-requests-cache, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 1073...@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Sandro Tosi <mo...@debian.org> (supplier of updated python-requests-cache 
package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmas...@ftp-master.debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Format: 1.8
Date: Sat, 31 Aug 2024 01:22:39 -0400
Source: python-requests-cache
Architecture: source
Version: 1.2.1-1
Distribution: unstable
Urgency: medium
Maintainer: Sandro Tosi <mo...@debian.org>
Changed-By: Sandro Tosi <mo...@debian.org>
Closes: 1065936 1068001 1073179 1073427
Changes:
 python-requests-cache (1.2.1-1) unstable; urgency=medium
 .
   * New upstream release, heavily based on work by Antonio Terceiro;
     Closes: #1073179, #1073427
   * stop building the -doc package
   * debian/rules
     - add platformdirs and rich to b-d, needed by tests
   * debian/control
     - drop distutils from b-d, no longer needed; Closes: #1065936
     - add time-machine to b-d, needed by tests
     - drop appdirs from b-d, replaced by platformdirs; Closes: #1068001
     - add version to requests b-d to >= 2.32.3+dfsg-1~
Checksums-Sha1:
 e0789b0b4edf2a3b401c0ad1550857d66bec5381 2528 python-requests-cache_1.2.1-1.dsc
 73bb7ea33a8b28b5254b2895c363a972b85fe529 909220 
python-requests-cache_1.2.1.orig.tar.xz
 d0d97561643303143317e5f3acf6c73971f0c06c 3476 
python-requests-cache_1.2.1-1.debian.tar.xz
 80a23b941ed9752a9f0b6f16dc18954ca44d54bb 7857 
python-requests-cache_1.2.1-1_source.buildinfo
Checksums-Sha256:
 704d5f2d0771a9499e645f55097a2135c18bb24c7fa8000ffd2eef2e4d5e3ca5 2528 
python-requests-cache_1.2.1-1.dsc
 4440580ab9d19af722aed6cdd66a29fa5424e73b7f70634ed5bc379fa2b8632d 909220 
python-requests-cache_1.2.1.orig.tar.xz
 8b9af8c02774b828c7b143a68f5654b46a937d613d5c9fd9519ad3beb898c48c 3476 
python-requests-cache_1.2.1-1.debian.tar.xz
 0ffad6072d1971a92f6ac425496bf68d17c54f32ce3cedfa4a44c03bd583c045 7857 
python-requests-cache_1.2.1-1_source.buildinfo
Files:
 529cbafad1b0e137523667b5c6d91135 2528 python optional 
python-requests-cache_1.2.1-1.dsc
 dbc4723a4fa591c79fa4aa575c437bac 909220 python optional 
python-requests-cache_1.2.1.orig.tar.xz
 2acf9c50d7e12214f42d54e598a53d49 3476 python optional 
python-requests-cache_1.2.1-1.debian.tar.xz
 250116ea3934523f293ffbb5e305925f 7857 python optional 
python-requests-cache_1.2.1-1_source.buildinfo

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEufrTGSrz5KUwnZ05h588mTgBqU8FAmbSqkcACgkQh588mTgB
qU9hBQ/+KIXnEaZ5I4DSP7mDG+eqFQsVkVJHBcCbn9M/8rpUbp/R4eG5pfR5a3fg
iMyz0H3RUK1ZuKn1y2/XQCe1BI7tpzqFzk24MRmemnXQBl2inPq2QqJcc79Tx3Oa
K5mptVO6Fc07M51hcMOq2wdfNNi5dM6dqnvzJQmuccsY1daMl/gQdRM/x2dIwe13
7HqSxYuthmLvcWOmh3EubS6vRoWZmpm3sLp1btMsRLd/wWx0s4b91ExlmZHzB5ve
H6M1jzHlCEW9S8FOeU2JIbKEetYyJjUN433qc8yWB3lIvZut3hh4NCwhClyxREYy
OGrqMcmwH6SzA9qpZztkhkda9V68XgF8ISSe59c7+v/d3s2SN1BCkV0OcuF57Aml
U/+sLgA6aCG1wgaJLxfYOXeVNEob5ywtser2kvMoMdhOcGvrVfD3NXiIGRMmya9I
/uJnQyr6ugFW0xzXwSvEHwqBF1QivyZUpr9CLMlLlVoiZIdLjPSoFgS5YUEGVG+e
HuFwOQesAoxu/7/Oz+dI8BRljdTILYvFmoRRtFsNFkXiVKm8hdspWTCSTjKK7IKl
qd1ClggBwMFM/KoC1InhFFz46RORC4ulV8z7TeTNSUiwMNK4oVVQU9g36W8f23bl
sjVpvoObExiprQEJKES6Tr557Bbp4ydLtOlijoJz+oPIKTISJcI=
=kpAW
-----END PGP SIGNATURE-----

Attachment: pgpSKFspoL863.pgp
Description: PGP signature


--- End Message ---

Reply via email to