• Bug#1105654: requests: FTBFS with make --shuffle=reverse: E FileNotFoun

    From Lucas Nussbaum@21:1/5 to All on Tue May 13 21:30:21 2025
    Source: requests
    Version: 2.32.3+dfsg-5
    Severity: minor
    Tags: trixie sid ftbfs
    User: lucas@debian.org
    Usertags: ftbfs-shuffle

    Hi,

    GNU Make now has a --shuffle option that simulates non-deterministic ordering of target prerequisites. See https://trofi.github.io/posts/238-new-make-shuffle-mode.html and also previous work in Debian by Santiago Vila: https://people.debian.org/~sanvila/make-shuffle/

    This package fails to build with make --shuffle=reverse.
    This is likely to be caused by a missing dependency in
    debian/rules or an upstream Makefile.

    More information about this mass bug filing is available at https://wiki.debian.org/qa.debian.org/FTBFS/Shuffle

    Relevant part (hopefully):
    make[1]: Entering directory '/build/reproducible-path/requests-2.32.3+dfsg/tests/certs/valid/server'
    make[1]: Nothing to be done for 'all'.
    Makefile:16: update target 'clean' due to: target is .PHONY
    rm -f server.*
    make[1]: Leaving directory '/build/reproducible-path/requests-2.32.3+dfsg/tests/certs/valid/server'
    I: pybuild base:311: cd /build/reproducible-path/requests-2.32.3+dfsg/.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_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_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"
    ============================= test session starts ==============================
    platform linux -- Python 3.13.3, pytest-8.3.5, pluggy-1.5.0
    rootdir: /build/reproducible-path/requests-2.32.3+dfsg/.pybuild/cpython3_3.13_requests/build
    configfile: pyproject.toml
    plugins: httpbin-2.1.0, typeguard-4.4.2, mock-3.14.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%]
    ..........FFFF. [ 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_tls_settings_verify_True _

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

    def test_different_connection_pool_for_tls_settings_verify_True(self):
    def response_handler(sock):
    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=3,
    cert_chain="tests/certs/expired/server/server.pem",
    keyfile="tests/certs/expired/server/server.key",
    )

    tests/test_requests.py:2845:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    self = <TLSServer(Thread-12, initial)>

    def __init__(
    self,
    *,
    handler=None,
    host="localhost",
    port=0,
    requests_to_handle=1,
    wait_to_close_event=None,
    cert_chain=None,
    keyfile=None,
    mutual_tls=False,
    cacert=None,
    ):
    super().__init__(
    handler=handler,
    host=host,
    port=port,
    requests_to_handle=requests_to_handle,
    wait_to_close_event=wait_to_close_event,
    )
    self.cert_chain = cert_chain
    self.keyfile = keyfile
    self.ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    self.ssl_context.load_cert_chain(self.cert_chain, keyfile=self.keyfile)
    E FileNotFoundError: [Errno 2] No such file or directory

    tests/testserver/server.py:162: FileNotFoundError
    _ TestPreparingURLs.test_different_connection_pool_for_tls_settings_verify_bundle_expired_cert _

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

    def test_different_connection_pool_for_tls_settings_verify_bundle_expired_cert(
    self,
    ):
    def response_handler(sock):
    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=3,
    cert_chain="tests/certs/expired/server/server.pem",
    keyfile="tests/certs/expired/server/server.key",
    )

    tests/test_requests.py:2878:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    self = <TLSServer(Thread-13, initial)>

    def __init__(
    self,
    *,
    handler=None,
    host="localhost",
    port=0,
    requests_to_handle=1,
    wait_to_close_event=None,
    cert_chain=None,
    keyfile=None,
    mutual_tls=False,
    cacert=None,
    ):
    super().__init__(
    handler=handler,
    host=host,
    port=port,
    requests_to_handle=requests_to_handle,
    wait_to_close_event=wait_to_close_event,
    )
    self.cert_chain = cert_chain
    self.keyfile = keyfile
    self.ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    self.ssl_context.load_cert_chain(self.cert_chain, keyfile=self.keyfile)
    E FileNotFoundError: [Errno 2] No such file or directory

    tests/testserver/server.py:162: FileNotFoundError
    _ TestPreparingURLs.test_different_connection_pool_for_tls_settings_verify_bundle_unexpired_cert _

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

    def test_different_connection_pool_for_tls_settings_verify_bundle_unexpired_cert(
    self,
    ):
    def response_handler(sock):
    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=3,
    cert_chain="tests/certs/valid/server/server.pem",
    keyfile="tests/certs/valid/server/server.key",
    )

    tests/test_requests.py:2911:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    self = <TLSServer(Thread-14, initial)>

    def __init__(
    self,
    *,
    handler=None,
    host="localhost",
    port=0,
    requests_to_handle=1,
    wait_to_close_event=None,
    cert_chain=None,
    keyfile=None,
    mutual_tls=False,
    cacert=None,
    ):
    super().__init__(
    handler=handler,
    host=host,
    port=port,
    requests_to_handle=requests_to_handle,
    wait_to_close_event=wait_to_close_event,
    )
    self.cert_chain = cert_chain
    self.keyfile = keyfile
    self.ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    self.ssl_context.load_cert_chain(self.cert_chain, keyfile=self.keyfile)
    E FileNotFoundError: [Errno 2] No such file or directory

    tests/testserver/server.py:162: FileNotFoundError
    ______ TestPreparingURLs.test_different_connection_pool_for_mtls_settings ______

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

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

    tests/test_requests.py:2945:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    self = <TLSServer(Thread-15, initial)>

    def __init__(
    self,
    *,
    handler=None,
    host="localhost",
    port=0,
    requests_to_handle=1,
    wait_to_close_event=None,
    cert_chain=None,
    keyfile=None,
    mutual_tls=False,
    cacert=None,
    ):
    super().__init__(
    handler=handler,
    host=host,
    port=port,
    requests_to_handle=requests_to_handle,
    wait_to_close_event=wait_to_close_event,
    )
    self.cert_chain = cert_chain
    self.keyfile = keyfile
    self.ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    self.ssl_context.load_cert_chain(self.cert_chain, keyfile=self.keyfile)
    E FileNotFoundError: [Errno 2] No such file or directory

    tests/testserver/server.py:162: FileNotFoundError =============================== warnings summary ===============================
    tests/test_requests.py::TestRequests::test_set_basicauth[42-42]
    /build/reproducible-path/requests-2.32.3+dfsg/.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]
    /build/reproducible-path/requests-2.32.3+dfsg/.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]
    /build/reproducible-path/requests-2.32.3+dfsg/.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]
    /build/reproducible-path/requests-2.32.3+dfsg/.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_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', 56392)>
    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', 50246)>
    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
    /build/reproducible-path/requests-2.32.3+dfsg/.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_tls_settings_verify_True
    FAILED tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_bundle_expired_cert
    FAILED tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_bundle_unexpired_cert
    FAILED tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_mtls_settings
    === 4 failed, 420 passed, 15 skipped, 167 deselected, 12 warnings in 26.61s ====
    E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /build/reproducible-path/requests-2.32.3+dfsg/.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_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_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"
    dh_auto_test: error: pybuild --test -i python{version} -p 3.13 returned exit code 13


    The full build log is available from: http://qa-logs.debian.net/2025/05/05/shuffle/reverse/requests_2.32.3+dfsg-5_unstable_reverse.log

    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

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