• Bug#1091503: requests: will FTBFS during trixie support period (1/2)

    From Santiago Vila@21:1/5 to All on Fri Dec 27 20:00:02 2024
    Package: src:requests
    Version: 2.32.3+dfsg-1
    Tags: ftbfs trixie sid
    User: debian-qa@lists.debian.org
    Usertags: ftbfs-during-trixie-support-period

    Dear maintainer:

    During a rebuild of all packages in unstable in the year 2028, your package failed to build:

    --------------------------------------------------------------------------------
    [...]
    debian/rules build
    dh build --with python3,sphinxdoc --buildsystem=pybuild
    dh_update_autotools_config -O--buildsystem=pybuild
    dh_autoreconf -O--buildsystem=pybuild
    dh_auto_configure -O--buildsystem=pybuild
    dh_auto_build -O--buildsystem=pybuild
    I: pybuild plugin_pyproject:129: Building wheel for python3.13 with "build" module
    I: pybuild base:311: python3.13 -m build --skip-dependency-check --no-isolation --wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_requests
    * Building wheel...
    <string>:7: SetuptoolsDeprecationWarning: The test command is disabled and references to it are deprecated.
    !!

    ********************************************************************************

    [... snipped ...]

    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)
    E requests.exceptions.SSLError: HTTPSConnectionPool(host='localhost', port=49275): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_CERTIFICATE_EXPIRED] ssl/tls alert certificate expired (_ssl.c:2639)')))

    requests/adapters.py:698: SSLError
    =============================== warnings summary ===============================
    tests/test_requests.py::TestRequests::test_set_basicauth[42-42]
    /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_requests/build/requests/auth.py:36: DeprecationWarning: Non-string usernames will no longer be supported in Requests 3.0.0. Please convert the object you've passed in (42) to a string or bytes object in the near
    future to avoid problems.
    warnings.warn(

    tests/test_requests.py::TestRequests::test_set_basicauth[42-42]
    /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_requests/build/requests/auth.py:46: DeprecationWarning: Non-string passwords will no longer be supported in Requests 3.0.0. Please convert the object you've passed in (<class 'int'>) to a string or bytes object
    in the near future to avoid problems.
    warnings.warn(

    tests/test_requests.py::TestRequests::test_set_basicauth[None-None]
    /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_requests/build/requests/auth.py:36: DeprecationWarning: Non-string usernames will no longer be supported in Requests 3.0.0. Please convert the object you've passed in (None) to a string or bytes object in the
    near future to avoid problems.
    warnings.warn(

    tests/test_requests.py::TestRequests::test_set_basicauth[None-None]
    /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_requests/build/requests/auth.py:46: DeprecationWarning: Non-string passwords will no longer be supported in Requests 3.0.0. Please convert the object you've passed in (<class 'NoneType'>) to a string or bytes
    object in the near future to avoid problems.
    warnings.warn(

    tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_True
    tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_bundle_expired_cert
    tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_bundle_unexpired_cert
    tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_mtls_settings
    /usr/lib/python3/dist-packages/urllib3/connectionpool.py:1099: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/
    advanced-usage.html#tls-warnings
    warnings.warn(

    tests/test_testserver.py::TestTestServer::test_server_closes
    /usr/lib/python3/dist-packages/_pytest/python.py:159: ResourceWarning: unclosed <socket.socket fd=13, family=2, type=1, proto=0, laddr=('0.0.0.0', 36956)>
    result = testfunction(**testargs)
    Enable tracemalloc to get traceback where the object was allocated.
    See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.

    tests/test_testserver.py::TestTestServer::test_basic_waiting_server
    /usr/lib/python3/dist-packages/_pytest/python.py:159: ResourceWarning: unclosed <socket.socket fd=14, family=2, type=1, proto=0, laddr=('127.0.0.1', 44010)>
    result = testfunction(**testargs)
    Enable tracemalloc to get traceback where the object was allocated.
    See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.

    tests/test_utils.py::TestContentEncodingDetection::test_none tests/test_utils.py::TestContentEncodingDetection::test_pragmas[<meta charset="UTF-8">]
    tests/test_utils.py::TestContentEncodingDetection::test_pragmas[<meta http-equiv="Content-type" content="text/html;charset=UTF-8">]
    tests/test_utils.py::TestContentEncodingDetection::test_pragmas[<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />]
    tests/test_utils.py::TestContentEncodingDetection::test_pragmas[<?xml version="1.0" encoding="UTF-8"?>]
    tests/test_utils.py::TestContentEncodingDetection::test_precedence
    /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_requests/build/requests/utils.py:494: DeprecationWarning: In requests 3.0, get_encodings_from_content will be removed. For more information, please see the discussion on issue #2266. (This warning should only
    appear once.)
    warnings.warn(

    -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================
    FAILED tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_mtls_settings
    === 1 failed, 423 passed, 15 skipped, 167 deselected, 16 warnings in 37.40s ====
    E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_requests/build; python3.13 -m pytest tests -k "not test_use_proxy_from_environment and not TestGetEnvironProxies and not test_mixed_case_
    scheme_acceptable and not test_HTTP_200_OK_GET_ALTERNATIVE and not test_unicode_get and not test_HTTP_302_ALLOW_REDIRECT_GET and not test_HTTP_307_ALLOW_REDIRECT_POST and not test_HTTP_307_ALLOW_REDIRECT_POST_WITH_SEEKABLE and not test_HTTP_302_TOO_MANY_
    REDIRECTS and not test_HTTP_302_TOO_MANY_REDIRECTS_WITH_PARAMS and not test_http_301_changes_post_to_get and not test_http_301_doesnt_change_head_to_get and not test_http_302_changes_post_to_get and not test_http_302_doesnt_change_head_to_get and not
    test_http_303_changes_post_to_get and not test_http_303_doesnt_change_head_to_get and not test_header_and_body_removal_on_redirect and not test_transfer_enc_removal_on_redirect and not test_fragment_maintained_on_redirect and not test_HTTP_
    200_OK_GET_WITH_PARAMS and not test_HTTP_200_OK_GET_WITH_MIXED_PARAMS and not test_set_cookie_on_301 and not test_cookie_sent_on_redirect and not test_cookie_removed_on_expire and not test_cookie_quote_wrapped and not test_cookie_persists_via_api and
    not test_request_cookie_overrides_session_cookie and not test_request_cookies_not_persisted and not test_generic_cookiejar_works and not test_param_cookiejar_works and not test_cookielib_cookiejar_on_redirect and not test_requests_in_history_are_not_
    overridden and not test_history_is_always_a_list and not test_user_agent_transfers and not test_HTTP_200_OK_HEAD and not test_HTTP_200_OK_PUT and not test_BASICAUTH_TUPLE_HTTP_200_OK_GET and not test_proxy_authorization_preserved_on_request and not test_
    basicauth_with_netrc and not test_DIGEST_HTTP_200_OK_GET and not test_DIGEST_AUTH_RETURNS_COOKIE and not test_DIGEST_AUTH_SETS_SESSION_COOKIES and not test_DIGEST_STREAM and not test_DIGESTAUTH_WRONG_HTTP_401_GET and not test_DIGESTAUTH_QUOTE
    S_QOP_VALUE and not test_POSTBIN_GET_POST_FILES and not test_invalid_files_input and not test_POSTBIN_SEEKED_OBJECT_WITH_NO_ITER and not test_POSTBIN_GET_POST_FILES_WITH_DATA and not test_post_with_custom_mapping and not test_conflicting_post_params and
    not test_request_ok_set and not test_status_raising and not test_decompress_gzip and not test_unicode_header_name and not test_pyopenssl_redirect and not test_http_with_certificate and not test_certificate_failure and not test_urlencoded_get_query_
    multivalued_param and not test_different_encodings_dont_break_post and not test_unicode_multipart_post and not test_unicode_method_name and not test_unicode_method_name_with_request_object and not test_custom_content_type and not test_hook_receives_
    request_arguments and not test_prepared_request_hook and not test_prepared_from_session and not test_request_with_bytestring_host and not test_time_elapsed_blank and not test_request_and_response_are_pickleable and not test_prepared_request_is_pi
    ckleable and not test_prepared_request_with_file_is_pickleable and not test_prepared_request_with_hook_is_pickleable and not test_session_pickling and not test_fixes_1329 and not test_uppercase_scheme_redirect and not test_header_remove_is_case_
    insensitive and not test_params_are_merged_case_sensitive and not test_header_validation and not test_auth_is_stripped_on_http_downgrade and not test_auth_is_retained_for_redirect_on_host and not test_manual_redirect_with_partial_body_read and not test_
    redirect_with_wrong_gzipped_header and not test_requests_history_is_saved and not test_json_param_post_content_type_works and not test_response_iter_lines and not test_response_context_manager and not test_unconsumed_session_response_closes_connection
    and not test_response_json_when_content_is_None and not test_custom_redirect_mixin and not test_stream_timeout and not test_none_timeout and not test_read_timeout and not test_connect_timeout and not test_total_timeout_connect and not test_encoded
    _methods and not test_proxy_env_vars_override_default and not test_urllib3_retries and not test_redirecting_to_bad_url and not test_json_decode_compatibility and not test_set_environ and not test_json_decode_persists_doc_attr and not test_header_with_
    subclass_types and not test_urllib3_pool_connection_closed"
    I: pybuild base:311: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests/build; python3.12 -m pytest tests -k "not test_use_proxy_from_environment and not TestGetEnvironProxies and not test_mixed_case_scheme_acceptable and not test_HTTP_200_OK_GET_
    ALTERNATIVE and not test_unicode_get and not test_HTTP_302_ALLOW_REDIRECT_GET and not test_HTTP_307_ALLOW_REDIRECT_POST and not test_HTTP_307_ALLOW_REDIRECT_POST_WITH_SEEKABLE and not test_HTTP_302_TOO_MANY_REDIRECTS and not test_HTTP_302_TOO_MANY_
    REDIRECTS_WITH_PARAMS and not test_http_301_changes_post_to_get and not test_http_301_doesnt_change_head_to_get and not test_http_302_changes_post_to_get and not test_http_302_doesnt_change_head_to_get and not test_http_303_changes_post_to_get and not
    test_http_303_doesnt_change_head_to_get and not test_header_and_body_removal_on_redirect and not test_transfer_enc_removal_on_redirect and not test_fragment_maintained_on_redirect and not test_HTTP_200_OK_GET_WITH_PARAMS and not test_HTTP_200_OK_GET_
    WITH_MIXED_PARAMS and not test_set_cookie_on_301 and not test_cookie_sent_on_redirect and not test_cookie_removed_on_expire and not test_cookie_quote_wrapped and not test_cookie_persists_via_api and not test_request_cookie_overrides_session_cookie and
    not test_request_cookies_not_persisted and not test_generic_cookiejar_works and not test_param_cookiejar_works and not test_cookielib_cookiejar_on_redirect and not test_requests_in_history_are_not_overridden and not test_history_is_always_a_list and not
    test_user_agent_transfers and not test_HTTP_200_OK_HEAD and not test_HTTP_200_OK_PUT and not test_BASICAUTH_TUPLE_HTTP_200_OK_GET and not test_proxy_authorization_preserved_on_request and not test_basicauth_with_netrc and not test_DIGEST_HTTP_200_OK_GET
    and not test_DIGEST_AUTH_RETURNS_COOKIE and not test_DIGEST_AUTH_SETS_SESSION_COOKIES and not test_DIGEST_STREAM and not test_DIGESTAUTH_WRONG_HTTP_401_GET and not test_DIGESTAUTH_QUOTES_QOP_VALUE and not test_POSTBIN_GET_POST_FILES and
    not test_invalid_files_input and not test_POSTBIN_SEEKED_OBJECT_WITH_NO_ITER and not test_POSTBIN_GET_POST_FILES_WITH_DATA and not test_post_with_custom_mapping and not test_conflicting_post_params and not test_request_ok_set and not test_status_raising
    and not test_decompress_gzip and not test_unicode_header_name and not test_pyopenssl_redirect and not test_http_with_certificate and not test_certificate_failure and not test_urlencoded_get_query_multivalued_param and not test_different_encodings_dont_
    break_post and not test_unicode_multipart_post and not test_unicode_method_name and not test_unicode_method_name_with_request_object and not test_custom_content_type and not test_hook_receives_request_arguments and not test_prepared_request_hook and not
    test_prepared_from_session and not test_request_with_bytestring_host and not test_time_elapsed_blank and not test_request_and_response_are_pickleable and not test_prepared_request_is_pickleable and not test_prepared_request_with_file_is_
    pickleable and not test_prepared_request_with_hook_is_pickleable and not test_session_pickling and not test_fixes_1329 and not test_uppercase_scheme_redirect and not test_header_remove_is_case_insensitive and not test_params_are_merged_case_sensitive
    and not test_header_validation and not test_auth_is_stripped_on_http_downgrade and not test_auth_is_retained_for_redirect_on_host and not test_manual_redirect_with_partial_body_read and not test_redirect_with_wrong_gzipped_header and not test_requests_
    history_is_saved and not test_json_param_post_content_type_works and not test_response_iter_lines and not test_response_context_manager and not test_unconsumed_session_response_closes_connection and not test_response_json_when_content_is_None and not
    test_custom_redirect_mixin and not test_stream_timeout and not test_none_timeout and not test_read_timeout and not test_connect_timeout and not test_total_timeout_connect and not test_encoded_methods and not test_proxy_env_vars_override_defaul
    t and not test_urllib3_retries and not test_redirecting_to_bad_url and not test_json_decode_compatibility and not test_set_environ and not test_json_decode_persists_doc_attr and not test_header_with_subclass_types and not test_urllib3_pool_connection_
    closed"
    ============================= test session starts ==============================
    platform linux -- Python 3.12.8, pytest-8.3.4, pluggy-1.5.0
    rootdir: /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests/build
    configfile: pyproject.toml
    plugins: mock-3.14.0, typeguard-4.4.1, httpbin-2.1.0
    collected 606 items / 167 deselected / 439 selected

    tests/test_adapters.py . [ 0%] tests/test_help.py ... [ 0%] tests/test_hooks.py ... [ 1%] tests/test_lowlevel.py ........... [ 4%] tests/test_packages.py ... [ 4%] tests/test_requests.py ................................................. [ 15%] .......s................................................................ [ 32%] ........................................................................ [ 48%] .............F. [ 52%] tests/test_structures.py .................... [ 56%] tests/test_testserver.py ......s.... [ 59%] tests/test_utils.py ..s................................................. [ 71%] ........................................................................ [ 87%] ...........................................ssssssssssss [100%]

    =================================== FAILURES ===================================
    ______ TestPreparingURLs.test_different_connection_pool_for_mtls_settings ______
    urllib3.exceptions.SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_EXPIRED] ssl/tls alert certificate expired (_ssl.c:2571)

    The above exception was the direct cause of the following exception:

    self = <requests.adapters.HTTPAdapter object at 0x7f08ca0fe7b0>
    request = <PreparedRequest [GET]>, stream = False
    timeout = Timeout(connect=None, read=None, total=None), verify = False
    cert = ('tests/certs/mtls/client/client.pem', 'tests/certs/mtls/client/client.key')
    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
    """

    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,
    )

    requests/adapters.py:667:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/dist-packages/urllib3/connectionpool.py:843: in urlopen
    retries = retries.increment(
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    self = Retry(total=0, connect=None, read=False, redirect=None, status=None) method = 'GET', url = '/', response = None
    error = SSLError(SSLError(1, '[SSL: SSLV3_ALERT_CERTIFICATE_EXPIRED] ssl/tls alert certificate expired (_ssl.c:2571)'))
    _pool = <urllib3.connectionpool.HTTPSConnectionPool object at 0x7f08ca0ffb00> _stacktrace = <traceback object at 0x7f08ca887e00>

    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,
    ) -> Self:
    """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='localhost', port=50363): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_CERTIFICATE_EXPIRED] ssl/tls alert certificate expired (_ssl.c:2571)')))

    /usr/lib/python3/dist-packages/urllib3/util/retry.py:519: MaxRetryError

    During handling of the above exception, another exception occurred:

    self = <tests.test_requests.TestPreparingURLs object at 0x7f08ca3e71d0>

    def test_different_connection_pool_for_mtls_settings(self):
    client_cert = None

    def response_handler(sock):
    nonlocal client_cert
    client_cert = sock.getpeercert()
    consume_socket_content(sock, timeout=0.5)
    sock.send(
    b"HTTP/1.1 200 OK\r\n"
    b"Content-Length: 18\r\n\r\n"
    b'\xff\xfe{\x00"\x00K0"\x00=\x00"\x00\xab0"\x00\r\n'
    )

    s = requests.Session()
    close_server = threading.Event()
    server = TLSServer(
    handler=response_handler,
    wait_to_close_event=close_server,
    requests_to_handle=2,
    cert_chain="tests/certs/expired/server/server.pem",
    keyfile="tests/certs/expired/server/server.key",
    mutual_tls=True,
    cacert="tests/certs/expired/ca/ca.crt",
    )

    cert = (
    "tests/certs/mtls/client/client.pem",
    "tests/certs/mtls/client/client.key",
    )
    with server as (host, port):
    url = f"https://{host}:{port}"
    r1 = s.get(url, verify=False, cert=cert)

    tests/test_requests.py:2961:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ requests/sessions.py:602: in get
    return self.request("GET", url, **kwargs)
    requests/sessions.py:589: in request
    resp = self.send(prep, **send_kwargs)
    requests/sessions.py:703: in send
    r = adapter.send(request, **kwargs)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    self = <requests.adapters.HTTPAdapter object at 0x7f08ca0fe7b0>
    request = <PreparedRequest [GET]>, stream = False
    timeout = Timeout(connect=None, read=None, total=None), verify = False
    cert = ('tests/certs/mtls/client/client.pem', 'tests/certs/mtls/client/client.key')
    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
    """

    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)

    if isinstance(e.reason, _SSLError):
    # This branch is for urllib3 v1.22 and later.
    raise SSLError(e, request=request)
    E requests.exceptions.SSLError: HTTPSConnectionPool(host='localhost', port=50363): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_CERTIFICATE_EXPIRED] ssl/tls alert certificate expired (_ssl.c:2571)')))

    requests/adapters.py:698: SSLError
    =============================== warnings summary ===============================
    tests/test_requests.py::TestRequests::test_set_basicauth[42-42]
    /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests/build/requests/auth.py:36: DeprecationWarning: Non-string usernames will no longer be supported in Requests 3.0.0. Please convert the object you've passed in (42) to a string or bytes object in the near
    future to avoid problems.
    warnings.warn(

    tests/test_requests.py::TestRequests::test_set_basicauth[42-42]
    /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests/build/requests/auth.py:46: DeprecationWarning: Non-string passwords will no longer be supported in Requests 3.0.0. Please convert the object you've passed in (<class 'int'>) to a string or bytes object
    in the near future to avoid problems.
    warnings.warn(

    tests/test_requests.py::TestRequests::test_set_basicauth[None-None]
    /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests/build/requests/auth.py:36: DeprecationWarning: Non-string usernames will no longer be supported in Requests 3.0.0. Please convert the object you've passed in (None) to a string or bytes object in the
    near future to avoid problems.
    warnings.warn(

    tests/test_requests.py::TestRequests::test_set_basicauth[None-None]
    /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_requests/build/requests/auth.py:46: DeprecationWarning: Non-string passwords will no longer be supported in Requests 3.0.0. Please convert the object you've passed in (<class 'NoneType'>) to a string or bytes
    object in the near future to avoid problems.
    warnings.warn(

    tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_True
    tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_bundle_expired_cert
    tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_bundle_unexpired_cert
    tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_mtls_settings

    [continued in next message]

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)