← pod_r1_v1n

requests_7427

resolved RESOLVED PASS · 15 tool calls · 152 s · psf/requests

Task input

Port bpo-39057 to Requests

This PR ports a [fix](https://bugs.python.org/issue39057) from CPython to constrain no_proxy behavior to domain boundaries. This was originally undefined behavior when Requests implemented `no_proxy` support but has since had bug fixes released in both CPython and Curl. We'll follow suit to conform with ecosystem expectations and resolve long standing issue #4795.

Tool calls (16)

#ToolArgumentsResult
1run_command
{
 "command": "grep -rn \"no_proxy\" src/requests | head -20"
}
{"status": "ok", "stdout": "src/requests/sessions.py:840: no_proxy = proxies.get(\"no_proxy\") if proxies is not None else None\nsrc/requests/sessions.py:841: e
full
{"status": "ok", "stdout": "src/requests/sessions.py:840:            no_proxy = proxies.get(\"no_proxy\") if proxies is not None else None\nsrc/requests/sessions.py:841:            env_proxies = get_environ_proxies(url, no_proxy=no_proxy)\nsrc/requests/utils.py:765:    Very simple check of the cidr format in no_proxy variable.\nsrc/requests/utils.py:810:def should_bypass_proxies(url: str, no_proxy: str | None) -> bool:\nsrc/requests/utils.py:822:    # First check whether no_proxy is defined. If it is, check that the URL\nsrc/requests/utils.py:823:    # we're getting isn't in the no_proxy list.\nsrc/requests/utils.py:824:    no_proxy_arg = no_proxy\nsrc/requests/utils.py:825:    if no_proxy is None:\nsrc/requests/utils.py:826:        no_proxy = get_proxy(\"no_proxy\")\nsrc/requests/utils.py:834:    if no_proxy:\nsrc/requests/utils.py:837:        no_proxy_hosts = (host for host in no_proxy.replace(\" \", \"\").split(\",\") if host)\nsrc/requests/utils.py:840:            for proxy_ip in no_proxy_hosts:\nsrc/requests/utils.py:845:                    # If no_proxy ip was defined in plain IP notation instead of cidr notation &\nsrc/requests/utils.py:853:            for host in no_proxy_hosts:\nsrc/requests/utils.py:855:                    # The URL does match something in no_proxy, so we don't want\nsrc/requests/utils.py:859:    with set_environ(\"no_proxy\", no_proxy_arg):\nsrc/requests/utils.py:871:def get_environ_proxies(url: str, no_proxy: str | None = None) -> dict[str, str]:\nsrc/requests/utils.py:877:    if should_bypass_proxies(url, no_proxy=no_proxy):\nsrc/requests/utils.py:927:    no_proxy = proxies.get(\"no_proxy\")\nsrc/requests/utils.py:930:    if trust_env and not should_bypass_proxies(url, no_proxy=no_proxy):\n", "stderr": "", "exit_code": 0}
2run_command
{
 "command": "sed -n '810,865p' src/requests/utils.py"
}
{"status": "ok", "stdout": "def should_bypass_proxies(url: str, no_proxy: str | None) -> bool:\n \"\"\"\n Returns whether we should bypass proxies or not.\n\n :
full
{"status": "ok", "stdout": "def should_bypass_proxies(url: str, no_proxy: str | None) -> bool:\n    \"\"\"\n    Returns whether we should bypass proxies or not.\n\n    :rtype: bool\n    \"\"\"\n\n    # Prioritize lowercase environment variables over uppercase\n    # to keep a consistent behaviour with other http projects (curl, wget).\n    def get_proxy(key: str) -> str | None:\n        return os.environ.get(key) or os.environ.get(key.upper())\n\n    # First check whether no_proxy is defined. If it is, check that the URL\n    # we're getting isn't in the no_proxy list.\n    no_proxy_arg = no_proxy\n    if no_proxy is None:\n        no_proxy = get_proxy(\"no_proxy\")\n    parsed = urlparse(url)\n    hostname = parsed.hostname\n\n    if hostname is None:\n        # URLs don't always have hostnames, e.g. file:/// urls.\n        return True\n\n    if no_proxy:\n        # We need to check whether we match here. We need to see if we match\n        # the end of the hostname, both with and without the port.\n        no_proxy_hosts = (host for host in no_proxy.replace(\" \", \"\").split(\",\") if host)\n\n        if is_ipv4_address(hostname):\n            for proxy_ip in no_proxy_hosts:\n                if is_valid_cidr(proxy_ip):\n                    if address_in_network(hostname, proxy_ip):\n                        return True\n                elif hostname == proxy_ip:\n                    # If no_proxy ip was defined in plain IP notation instead of cidr notation &\n                    # matches the IP of the index\n                    return True\n        else:\n            host_with_port = hostname\n            if parsed.port:\n                host_with_port += f\":{parsed.port}\"\n\n            for host in no_proxy_hosts:\n                if hostname.endswith(host) or host_with_port.endswith(host):\n                    # The URL does match something in no_proxy, so we don't want\n                    # to apply the proxies on this URL.\n                    return True\
3run_command
{
 "command": "python3 -c \"import requests; print(requests.__version__)\""
}
{"status": "ok", "stdout": "2.34.0.dev1\n", "stderr": "", "exit_code": 0}
full
{"status": "ok", "stdout": "2.34.0.dev1\n", "stderr": "", "exit_code": 0}
4run_command
{
 "command": "cat <<EOF > /tmp/test_no_proxy.py\nimport requests\nimport os\n\ndef test_no_proxy_domain_boundary():\n    # Case 1: Exact match should bypass\n    os.environ['no_proxy'] = 'example.com'\n    # We use a mock-like approach or just check the function if possible.\n    # Since we want to test the logic in requests.utils.should_bypass_proxies\n    from requests.utils import should_bypass_proxies\n    \n    assert should_bypass_proxies('http://example.com', 'example.com') == True\n    assert should_bypass_proxies('http://www.example.com', 'example.com') == True\n    assert should_bypass_proxies('http://sub.example.com', 'example.com') == True\n    \n    # Case 2: Partial match that is NOT a domain boundary should NOT bypass\n    # 'example.com' should NOT match 'myexample.com'\n    assert should_bypass_proxies('http://myexample.com', 'example.com') == False\n    \n    # Case 3: Dot prefix\n    os.environ['no_proxy'] = '.example.com'\n    assert should_bypass_proxies('http://example.com', '.example.com') == True\n    assert should_bypass_proxies('http://www.example.com', '.example.com') == True\n    assert should_bypass_proxies('http://myexample.com', '.example.com') == False\n\n    print(\"All tests passed!\")\n\nif __name__ == '__main__':\n    try:\n        test_no_proxy_domain_boundary()\n    except AssertionError as e:\n        print(f\"Assertion failed!\")\n        raise e\nEOF\npython3 /tmp/test_no_proxy.py\n"
}
{"status": "error", "error_type": "CommandError", "error_message": "Traceback (most recent call last):\n File \"/tmp/test_no_proxy.py\", line 32, in <module>\n
full
{"status": "error", "error_type": "CommandError", "error_message": "Traceback (most recent call last):\n  File \"/tmp/test_no_proxy.py\", line 32, in <module>\n    raise e\n  File \"/tmp/test_no_proxy.py\", line 29, in <module>\n    test_no_proxy_domain_boundary()\n    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^\n  File \"/tmp/test_no_proxy.py\", line 17, in test_no_proxy_domain_boundary\n    assert should_bypass_proxies('http://myexample.com', 'example.com') == False\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError\n", "details": {"stdout": "Assertion failed!\n", "stderr": "Traceback (most recent call last):\n  File \"/tmp/test_no_proxy.py\", line 32, in <module>\n    raise e\n  File \"/tmp/test_no_proxy.py\", line 29, in <module>\n    test_no_proxy_domain_boundary()\n    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^\n  File \"/tmp/test_no_proxy.py\", line 17, in test_no_proxy_domain_boundary\n    assert should_bypass_proxies('http://myexample.com', 'example.com') == False\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError\n", "exit_code": 1}}
5-6 ×2run_command
{
 "command": "sed -n '850,860p' src/requests/utils.py"
}
{"status": "ok", "stdout": " if parsed.port:\n host_with_port += f\":{parsed.port}\"\n\n for host in no_proxy_hosts:\n if hostname.endswith(host) or host_with_p
full
{"status": "ok", "stdout": "            if parsed.port:\n                host_with_port += f\":{parsed.port}\"\n\n            for host in no_proxy_hosts:\n                if hostname.endswith(host) or host_with_port.endswith(host):\n                    # The URL does match something in no_proxy, so we don't want\n                    # to apply the proxies on this URL.\n                    return True\n\n    with set_environ(\"no_proxy\", no_proxy_arg):\n        try:\n", "stderr": "", "exit_code": 0}
7run_command
{
 "command": "cat <<EOF > /tmp/test_no_proxy.py\nimport requests\nimport os\nfrom requests.utils import should_bypass_proxies\n\ndef test_no_proxy_domain_boundary():\n    # Case 1: Exact match should bypass\n    assert should_bypass_proxies('http://example.com', 'example.com') == True\n    assert should_bypass_proxies('http://www.example.com', 'example.com') == True\n    assert should_bypass_proxies('http://sub.example.com', 'example.com') == True\n    \n    # Case 2: Partial match that is NOT a domain boundary should NOT bypass\n    # 'example.com' should NOT match 'myexample.com'\n    assert should_bypass_proxies('http://myexample.com', 'example.com') == False\n    \n    # Case 3: Dot prefix\n    assert should_bypass_proxies('http://example.com', '.example.com') == True\n    assert should_bypass_proxies('http://www.example.com', '.example.com') == True\n    assert should_bypass_proxies('http://myexample.com', '.example.com') == False\n\n    # Case 4: Port\n    assert should_bypass_proxies('http://example.com:8080', 'example.com') == True\n    assert should_bypass_proxies('http://myexample.com:8080', 'example.com') == False\n\n    print(\"All tests passed!\")\n\nif __name__ == '__main__':\n    try:\n        test_no_proxy_domain_boundary()\n    except AssertionError as e:\n        print(f\"Assertion failed!\")\n        raise e\nEOF\npython3 /tmp/test_no_proxy.py\n"
}
{"status": "error", "error_type": "CommandError", "error_message": "Traceback (most recent call last):\n File \"/tmp/test_no_proxy.py\", line 31, in <module>\n
full
{"status": "error", "error_type": "CommandError", "error_message": "Traceback (most recent call last):\n  File \"/tmp/test_no_proxy.py\", line 31, in <module>\n    raise e\n  File \"/tmp/test_no_proxy.py\", line 28, in <module>\n    test_no_proxy_domain_boundary()\n    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^\n  File \"/tmp/test_no_proxy.py\", line 13, in test_no_proxy_domain_boundary\n    assert should_bypass_proxies('http://myexample.com', 'example.com') == False\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError\n", "details": {"stdout": "Assertion failed!\n", "stderr": "Traceback (most recent call last):\n  File \"/tmp/test_no_proxy.py\", line 31, in <module>\n    raise e\n  File \"/tmp/test_no_proxy.py\", line 28, in <module>\n    test_no_proxy_domain_boundary()\n    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^\n  File \"/tmp/test_no_proxy.py\", line 13, in test_no_proxy_domain_boundary\n    assert should_bypass_proxies('http://myexample.com', 'example.com') == False\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError\n", "exit_code": 1}}
8-9 ×2run_command
{
 "command": "sed -n '850,860p' src/requests/utils.py"
}
{"status": "ok", "stdout": " if parsed.port:\n host_with_port += f\":{parsed.port}\"\n\n for host in no_proxy_hosts:\n if hostname.endswith(host) or host_with_p
full
{"status": "ok", "stdout": "            if parsed.port:\n                host_with_port += f\":{parsed.port}\"\n\n            for host in no_proxy_hosts:\n                if hostname.endswith(host) or host_with_port.endswith(host):\n                    # The URL does match something in no_proxy, so we don't want\n                    # to apply the proxies on this URL.\n                    return True\n\n    with set_environ(\"no_proxy\", no_proxy_arg):\n        try:\n", "stderr": "", "exit_code": 0}
10run_command
{
 "command": "cat <<EOF > /tmp/test_no_proxy.py\nimport requests\nimport os\nfrom requests.utils import should_bypass_proxies\n\ndef test_no_proxy_domain_boundary():\n    # Case 1: Exact match should bypass\n    assert should_bypass_proxies('http://example.com', 'example.com') == True\n    assert should_bypass_proxies('http://www.example.com', 'example.com') == True\n    assert should_bypass_proxies('http://sub.example.com', 'example.com') == True\n    \n    # Case 2: Partial match that is NOT a domain boundary should NOT bypass\n    # 'example.com' should NOT match 'myexample.com'\n    assert should_bypass_proxies('http://myexample.com', 'example.com') == False\n    \n    # Case 3: Dot prefix\n    assert should_bypass_proxies('http://example.com', '.example.com') == True\n    assert should_bypass_proxies('http://www.example.com', '.example.com') == True\n    assert should_bypass_proxies('http://myexample.com', '.example.com') == False\n\n    # Case 4: Port\n    assert should_bypass_proxies('http://example.com:8080', 'example.com') == True\n    assert should_bypass_proxies('http://myexample.com:8080', 'example.com') == False\n\n    print(\"All tests passed!\")\n\nif __name__ == '__main__':\n    try:\n        test_no_proxy_domain_boundary()\n    except AssertionError as e:\n        print(f\"Assertion failed!\")\n        raise e\nEOF\npython3 /tmp/test_no_proxy.py\n"
}
{"status": "error", "error_type": "CommandError", "error_message": "Traceback (most recent call last):\n File \"/tmp/test_no_proxy.py\", line 31, in <module>\n
full
{"status": "error", "error_type": "CommandError", "error_message": "Traceback (most recent call last):\n  File \"/tmp/test_no_proxy.py\", line 31, in <module>\n    raise e\n  File \"/tmp/test_no_proxy.py\", line 28, in <module>\n    test_no_proxy_domain_boundary()\n    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^\n  File \"/tmp/test_no_proxy.py\", line 13, in test_no_proxy_domain_boundary\n    assert should_bypass_proxies('http://myexample.com', 'example.com') == False\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError\n", "details": {"stdout": "Assertion failed!\n", "stderr": "Traceback (most recent call last):\n  File \"/tmp/test_no_proxy.py\", line 31, in <module>\n    raise e\n  File \"/tmp/test_no_proxy.py\", line 28, in <module>\n    test_no_proxy_domain_boundary()\n    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^\n  File \"/tmp/test_no_proxy.py\", line 13, in test_no_proxy_domain_boundary\n    assert should_bypass_proxies('http://myexample.com', 'example.com') == False\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError\n", "exit_code": 1}}
11run_command
{
 "command": "sed -n '850,860p' src/requests/utils.py"
}
{"status": "ok", "stdout": " if parsed.port:\n host_with_port += f\":{parsed.port}\"\n\n for host in no_proxy_hosts:\n if hostname.endswith(host) or host_with_p
full
{"status": "ok", "stdout": "            if parsed.port:\n                host_with_port += f\":{parsed.port}\"\n\n            for host in no_proxy_hosts:\n                if hostname.endswith(host) or host_with_port.endswith(host):\n                    # The URL does match something in no_proxy, so we don't want\n                    # to apply the proxies on this URL.\n                    return True\n\n    with set_environ(\"no_proxy\", no_proxy_arg):\n        try:\n", "stderr": "", "exit_code": 0}
12edit_file
{
 "filepath": "src/requests/utils.py",
 "new_string": "            for host in no_proxy_hosts:\n                if host == hostname or host == host_with_port:\n                    return True\n                if host.startswith('.'):\n                    if hostname.endswith(host) or host_with_port.endswith(host):\n                        return True\n                elif host and hostname.endswith('.' + host) or (host_with_port and host_with_port.endswith('.' + host)):\n                    return True\n                # The URL does match something in no_proxy, so we don't want\n                # to apply the proxies on this URL.\n",
 "old_string": "            for host in no_proxy_hosts:\n                if hostname.endswith(host) or host_with_port.endswith(host):\n                    # The URL does match something in no_proxy, so we don't want\n                    # to apply the proxies on this URL.\n                    return True"
}
{"status": "ok", "filepath": "src/requests/utils.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/src/requests/utils.py\n+++ b/src/requests/utils.py\n
full
{"status": "ok", "filepath": "src/requests/utils.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/src/requests/utils.py\n+++ b/src/requests/utils.py\n@@ -851,10 +851,16 @@\n                 host_with_port += f\":{parsed.port}\"\n \n             for host in no_proxy_hosts:\n-                if hostname.endswith(host) or host_with_port.endswith(host):\n-                    # The URL does match something in no_proxy, so we don't want\n-                    # to apply the proxies on this URL.\n+                if host == hostname or host == host_with_port:\n                     return True\n+                if host.startswith('.'):\n+                    if hostname.endswith(host) or host_with_port.endswith(host):\n+                        return True\n+                elif host and hostname.endswith('.' + host) or (host_with_port and host_with_port.endswith('.' + host)):\n+                    return True\n+                # The URL does match something in no_proxy, so we don't want\n+                # to apply the proxies on this URL.\n+\n \n     with set_environ(\"no_proxy\", no_proxy_arg):\n         try:\n", "is_truncated": false}
13run_command
{
 "command": "python3 /tmp/test_no_proxy.py"
}
{"status": "ok", "stdout": "All tests passed!\n", "stderr": "", "exit_code": 0}
full
{"status": "ok", "stdout": "All tests passed!\n", "stderr": "", "exit_code": 0}
14run_command
{
 "command": "cat <<EOF > /tmp/test_no_proxy_edge.py\nimport requests\nimport os\nfrom requests.utils import should_bypass_proxies\n\ndef test_no_proxy_edge_cases():\n    # Exact match\n    assert should_bypass_proxies('http://example.com', 'example.com') == True\n    # Subdomain match\n    assert should_bypass_proxies('http://www.example.com', 'example.com') == True\n    # Non-domain boundary match\n    assert should_bypass_proxies('http://myexample.com', 'example.com') == False\n    # Dot prefix match\n    assert should_bypass_proxies('http://example.com', '.example.com') == True\n    assert should_bypass_proxies('http://www.example.com', '.example.com') == True\n    assert should_bypass_proxies('http://myexample.com', '.example.com') == False\n    # Port match\n    assert should_bypass_proxies('http://example.com:8080', 'example.com') == True\n    assert should_bypass_proxies('http://myexample.com:8080', 'example.com') == False\n    # Port with dot prefix\n    assert should_bypass_proxies('http://example.com:8080', '.example.com') == True\n    assert should_bypass_proxies('http://myexample.com:8080', '.example.com') == False\n    # Empty host in no_proxy\n    assert should_bypass_proxies('http://example.com', '') == False\n    # Multiple hosts in no_proxy\n    assert should_bypass_proxies('http://example.com', 'google.com,example.com') == True\n    assert should_bypass_proxies('http://google.com', 'google.com,example.com') == True\n    assert should_bypass_proxies('http://other.com', 'google.com,example.com') == False\n\n    print(\"All edge cases passed!\")\n\nif __name__ == '__main__':\n    try:\n        test_no_proxy_edge_cases()\n    except AssertionError as e:\n        print(f\"Assertion failed!\")\n        raise e\nEOF\npython3 /tmp/test_no_proxy_edge.py\n"
}
{"status": "ok", "stdout": "All edge cases passed!\n", "stderr": "", "exit_code": 0}
full
{"status": "ok", "stdout": "All edge cases passed!\n", "stderr": "", "exit_code": 0}
15run_command
{
 "command": "git diff"
}
{"status": "ok", "stdout": "diff --git a/src/requests/utils.py b/src/requests/utils.py\nindex e69ad0d7..474ea1f2 100644\n--- a/src/requests/utils.py\n+++ b/src/
full
{"status": "ok", "stdout": "diff --git a/src/requests/utils.py b/src/requests/utils.py\nindex e69ad0d7..474ea1f2 100644\n--- a/src/requests/utils.py\n+++ b/src/requests/utils.py\n@@ -851,10 +851,16 @@ def should_bypass_proxies(url: str, no_proxy: str | None) -> bool:\n                 host_with_port += f\":{parsed.port}\"\n \n             for host in no_proxy_hosts:\n-                if hostname.endswith(host) or host_with_port.endswith(host):\n-                    # The URL does match something in no_proxy, so we don't want\n-                    # to apply the proxies on this URL.\n+                if host == hostname or host == host_with_port:\n                     return True\n+                if host.startswith('.'):\n+                    if hostname.endswith(host) or host_with_port.endswith(host):\n+                        return True\n+                elif host and hostname.endswith('.' + host) or (host_with_port and host_with_port.endswith('.' + host)):\n+                    return True\n+                # The URL does match something in no_proxy, so we don't want\n+                # to apply the proxies on this URL.\n+\n \n     with set_environ(\"no_proxy\", no_proxy_arg):\n         try:\n", "stderr": "", "exit_code": 0}
16submit_patch
{}
{"status": "ok", "patch_size": 1160, "files_changed": 1}
full
{"status": "ok", "patch_size": 1160, "files_changed": 1}

Patch

diff --git a/src/requests/utils.py b/src/requests/utils.py
index e69ad0d7..474ea1f2 100644
--- a/src/requests/utils.py
+++ b/src/requests/utils.py
@@ -851,10 +851,16 @@ def should_bypass_proxies(url: str, no_proxy: str | None) -> bool:
                 host_with_port += f":{parsed.port}"
 
             for host in no_proxy_hosts:
-                if hostname.endswith(host) or host_with_port.endswith(host):
-                    # The URL does match something in no_proxy, so we don't want
-                    # to apply the proxies on this URL.
+                if host == hostname or host == host_with_port:
                     return True
+                if host.startswith('.'):
+                    if hostname.endswith(host) or host_with_port.endswith(host):
+                        return True
+                elif host and hostname.endswith('.' + host) or (host_with_port and host_with_port.endswith('.' + host)):
+                    return True
+                # The URL does match something in no_proxy, so we don't want
+                # to apply the proxies on this URL.
+
 
     with set_environ("no_proxy", no_proxy_arg):
         try:

Test output

show
..s..................................................................... [ 31%]
........................................................................ [ 62%]
....................................................................ssss [ 94%]
sssssss.....s                                                            [100%]
=============================== warnings summary ===============================
../../../../../../../Users/jp/repos/kaggle-gemini-coding-agent-post-training/.envs/requests/lib/python3.13/site-packages/_pytest/config/__init__.py:1464
  /Users/jp/repos/kaggle-gemini-coding-agent-post-training/.envs/requests/lib/python3.13/site-packages/_pytest/config/__init__.py:1464: PytestConfigWarning: Unknown config option: timeout
  
    self._warn_or_fail_if_strict(f"Unknown config option: {key}\n")

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
  /tmp/swe_work/pod_r1_v1n/requests_7427/b/workspace/src/requests/utils.py:527: 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
216 passed, 13 skipped, 7 warnings in 0.12s
[2026-09-25 17:06:40,082] WARNING in core: flasgger is not installed; serving the static landing page at / and skipping the Swagger UI and /spec.json.