Marcel Telka
2023-12-21 9ca34b97dd1e30cb3da48a1fdfcd556b8a82da57
python/httpx: update to 0.26.0

5 files added
3 files modified
935 ■■■■■ changed files
components/python/httpx/Makefile 23 ●●●● patch | view | raw | blame | history
components/python/httpx/patches/01-no-trio.patch 31 ●●●●● patch | view | raw | blame | history
components/python/httpx/patches/02-no-ruff.patch 12 ●●●●● patch | view | raw | blame | history
components/python/httpx/patches/03-test-requirements.patch 28 ●●●●● patch | view | raw | blame | history
components/python/httpx/patches/04-types.patch 18 ●●●●● patch | view | raw | blame | history
components/python/httpx/patches/05-pip-install.patch 67 ●●●●● patch | view | raw | blame | history
components/python/httpx/python-integrate-project.conf 17 ●●●●● patch | view | raw | blame | history
components/python/httpx/test/results-all.master 739 ●●●●● patch | view | raw | blame | history
components/python/httpx/Makefile
@@ -19,19 +19,27 @@
include ../../../make-rules/shared-macros.mk
COMPONENT_NAME =        httpx
HUMAN_VERSION =            0.25.2
HUMAN_VERSION =            0.26.0
COMPONENT_SUMMARY =        httpx - The next generation HTTP client.
COMPONENT_PROJECT_URL =        https://github.com/encode/httpx
COMPONENT_ARCHIVE_URL =        \
    https://files.pythonhosted.org/packages/8c/23/911d93a022979d3ea295f659fbe7edb07b3f4561a477e83b3a6d0e0c914e/httpx-0.25.2.tar.gz
    https://github.com/encode/httpx/archive/refs/tags/$(HUMAN_VERSION).tar.gz
COMPONENT_ARCHIVE_HASH =    \
    sha256:8b8fcaa0c8ea7b05edd69a094e63a2094c4efcb48129fb757361bc423c0ad9e8
    sha256:c2c2db4a2d83420f96e48c80dacae4f079a02e7cf67a98bb85db6fdd70517c87
COMPONENT_LICENSE =        BSD-3-Clause
COMPONENT_LICENSE_FILE =    LICENSE.md
TEST_STYLE = pytest
include $(WS_MAKE_RULES)/common.mk
# Random temporary directory name
# see also https://github.com/encode/httpx/pull/3015
COMPONENT_TEST_TRANSFORMS += "-e '/\/tmp\/.*garbage/d'"
# This project does not support tox so we need to provide test requirements
# manually.
TEST_REQUIREMENTS += requirements.txt
# Auto-generated dependencies
PYTHON_REQUIRED_PACKAGES += library/python/anyio
@@ -42,3 +50,12 @@
PYTHON_REQUIRED_PACKAGES += library/python/idna
PYTHON_REQUIRED_PACKAGES += library/python/sniffio
PYTHON_REQUIRED_PACKAGES += runtime/python
TEST_REQUIRED_PACKAGES.python += library/python/chardet
TEST_REQUIRED_PACKAGES.python += library/python/coverage
TEST_REQUIRED_PACKAGES.python += library/python/cryptography
TEST_REQUIRED_PACKAGES.python += library/python/mypy
TEST_REQUIRED_PACKAGES.python += library/python/pytest
TEST_REQUIRED_PACKAGES.python += library/python/socksio
TEST_REQUIRED_PACKAGES.python += library/python/tomli
TEST_REQUIRED_PACKAGES.python += library/python/trustme
TEST_REQUIRED_PACKAGES.python += library/python/uvicorn
components/python/httpx/patches/01-no-trio.patch
@@ -1,8 +1,8 @@
We have no trio pacakged yet.
--- httpx-0.25.2/pyproject.toml.orig
+++ httpx-0.25.2/pyproject.toml
@@ -119,8 +119,6 @@
--- httpx-0.26.0/pyproject.toml.orig
+++ httpx-0.26.0/pyproject.toml
@@ -115,8 +115,6 @@
 filterwarnings = [
   "error",
   "ignore: You seem to already have a custom sys.excepthook handler installed. I'll skip installing Trio's custom handler, but this means MultiErrors will not show full tracebacks.:RuntimeWarning",
@@ -11,3 +11,28 @@
 ]
 markers = [
   "copied_from(source, changes=None): mark test as copied from somewhere else, along with a description of changes made to accodomate e.g. our test setup",
--- httpx-0.26.0/requirements.txt.orig
+++ httpx-0.26.0/requirements.txt
@@ -25,7 +25,5 @@
 types-certifi==2021.10.8.2
 pytest==7.4.3
 ruff==0.1.6
-trio==0.22.2
-trio-typing==0.10.0
 trustme==1.1.0
 uvicorn==0.24.0.post1
--- httpx-0.26.0/tests/concurrency.py.orig
+++ httpx-0.26.0/tests/concurrency.py
@@ -5,11 +5,7 @@
 import asyncio
 import sniffio
-import trio
 async def sleep(seconds: float) -> None:
-    if sniffio.current_async_library() == "trio":
-        await trio.sleep(seconds)  # pragma: no cover
-    else:
-        await asyncio.sleep(seconds)
+    await asyncio.sleep(seconds)
components/python/httpx/patches/02-no-ruff.patch
New file
@@ -0,0 +1,12 @@
We have no ruff support yet.
see https://github.com/tikv/jemallocator/issues/58
--- httpx-0.26.0/requirements.txt.orig
+++ httpx-0.26.0/requirements.txt
@@ -24,6 +24,5 @@
 mypy==1.5.1
 types-certifi==2021.10.8.2
 pytest==7.4.3
-ruff==0.1.6
 trustme==1.1.0
 uvicorn==0.24.0.post1
components/python/httpx/patches/03-test-requirements.patch
New file
@@ -0,0 +1,28 @@
Remove dependencies not needed to run tests.
--- httpx-0.26.0/requirements.txt.orig
+++ httpx-0.26.0/requirements.txt
@@ -2,22 +2,13 @@
 # On the other hand, we're not pinning package dependencies, because our tests
 # needs to pass with the latest version of the packages.
 # Reference: https://github.com/encode/httpx/pull/1721#discussion_r661241588
--e .[brotli,cli,http2,socks]
+.[socks]
 # Optional charset auto-detection
 # Used in our test cases
 chardet==5.2.0
 types-chardet==5.0.4.5
-# Documentation
-mkdocs==1.5.3
-mkautodoc==0.2.0
-mkdocs-material==9.4.14
-
-# Packaging
-build==1.0.3
-twine==4.0.2
-
 # Tests & Linting
 coverage[toml]==7.3.0
 cryptography==41.0.7
components/python/httpx/patches/04-types.patch
New file
@@ -0,0 +1,18 @@
https://github.com/encode/httpx/pull/3015
--- httpx-0.26.0/requirements.txt.orig
+++ httpx-0.26.0/requirements.txt
@@ -7,13 +7,11 @@
 # Optional charset auto-detection
 # Used in our test cases
 chardet==5.2.0
-types-chardet==5.0.4.5
 # Tests & Linting
 coverage[toml]==7.3.0
 cryptography==41.0.7
 mypy==1.5.1
-types-certifi==2021.10.8.2
 pytest==7.4.3
 trustme==1.1.0
 uvicorn==0.24.0.post1
components/python/httpx/patches/05-pip-install.patch
New file
@@ -0,0 +1,67 @@
--- httpx-0.26.0/httpx/_transports/default.py.orig
+++ httpx-0.26.0/httpx/_transports/default.py
@@ -172,7 +172,7 @@
             except ImportError:  # pragma: no cover
                 raise ImportError(
                     "Using SOCKS proxy, but the 'socksio' package is not installed. "
-                    "Make sure to install httpx using `pip install httpx[socks]`."
+                    "Please install 'socksio' using `pkg install library/python/socksio`."
                 ) from None
             self._pool = httpcore.SOCKSProxy(
@@ -312,7 +312,7 @@
             except ImportError:  # pragma: no cover
                 raise ImportError(
                     "Using SOCKS proxy, but the 'socksio' package is not installed. "
-                    "Make sure to install httpx using `pip install httpx[socks]`."
+                    "Please install 'socksio' using `pkg install library/python/socksio`."
                 ) from None
             self._pool = httpcore.AsyncSOCKSProxy(
--- httpx-0.26.0/httpx/_client.py.orig
+++ httpx-0.26.0/httpx/_client.py
@@ -668,7 +668,7 @@
             except ImportError:  # pragma: no cover
                 raise ImportError(
                     "Using http2=True, but the 'h2' package is not installed. "
-                    "Make sure to install httpx using `pip install httpx[http2]`."
+                    "Please install 'h2' using `pkg install library/python/h2`."
                 ) from None
         if proxies:
@@ -1408,7 +1408,7 @@
             except ImportError:  # pragma: no cover
                 raise ImportError(
                     "Using http2=True, but the 'h2' package is not installed. "
-                    "Make sure to install httpx using `pip install httpx[http2]`."
+                    "Please install 'h2' using `pkg install library/python/h2`."
                 ) from None
         if proxies:
--- httpx-0.26.0/httpx/__init__.py.orig
+++ httpx-0.26.0/httpx/__init__.py
@@ -54,7 +54,8 @@
         print(
             "The httpx command line client could not run because the required "
             "dependencies were not installed.\nMake sure you've installed "
-            "everything with: pip install 'httpx[cli]'"
+            "everything with: pkg install library/python/click "
+            "library/python/pygments library/python/rich"
         )
         sys.exit(1)
--- httpx-0.26.0/httpx/_decoders.py.orig
+++ httpx-0.26.0/httpx/_decoders.py
@@ -97,9 +97,9 @@
     def __init__(self) -> None:
         if brotli is None:  # pragma: no cover
             raise ImportError(
-                "Using 'BrotliDecoder', but neither of the 'brotlicffi' or 'brotli' "
-                "packages have been installed. "
-                "Make sure to install httpx using `pip install httpx[brotli]`."
+                "Using 'BrotliDecoder', but no 'brotli' "
+                "package has been installed. "
+                "Make sure to install 'brotli' using `pkg install library/python/brotli`."
             ) from None
         self.decompressor = brotli.Decompressor()
components/python/httpx/python-integrate-project.conf
@@ -14,3 +14,20 @@
#
%patch% 01-no-trio.patch
%patch% 02-no-ruff.patch
%patch% 03-test-requirements.patch
%patch% 04-types.patch
%patch% 05-pip-install.patch
%hook-begin%
# https://github.com/encode/httpx/discussions/2944
DOWNLOAD_URL='https://github.com/encode/httpx/archive/refs/tags/$(HUMAN_VERSION).tar.gz'
LICENSE_FILE='LICENSE.md'
%include-3%
# Random temporary directory name
# see also https://github.com/encode/httpx/pull/3015
COMPONENT_TEST_TRANSFORMS += "-e '/\/tmp\/.*garbage/d'"
# This project does not support tox so we need to provide test requirements
# manually.
TEST_REQUIREMENTS += requirements.txt
components/python/httpx/test/results-all.master
New file
@@ -0,0 +1,739 @@
============================= test session starts ==============================
platform sunos5 -- Python $(PYTHON_VERSION).X -- $(PYTHON)
cachedir: .pytest_cache
rootdir: $(@D)
configfile: pyproject.toml
collecting ... collected 722 items
tests/client/test_async_client.py::test_100_continue[asyncio] PASSED
tests/client/test_async_client.py::test_access_content_stream_response[asyncio] PASSED
tests/client/test_async_client.py::test_async_mock_transport[asyncio] PASSED
tests/client/test_async_client.py::test_build_request[asyncio] PASSED
tests/client/test_async_client.py::test_cancellation_during_stream[asyncio] PASSED
tests/client/test_async_client.py::test_cannot_stream_sync_request[asyncio] PASSED
tests/client/test_async_client.py::test_client_closed_state_using_implicit_open[asyncio] PASSED
tests/client/test_async_client.py::test_client_closed_state_using_with_block[asyncio] PASSED
tests/client/test_async_client.py::test_context_managed_transport[asyncio] PASSED
tests/client/test_async_client.py::test_context_managed_transport_and_mount[asyncio] PASSED
tests/client/test_async_client.py::test_delete[asyncio] PASSED
tests/client/test_async_client.py::test_get[asyncio] PASSED
tests/client/test_async_client.py::test_get_invalid_url[asyncio-no-host] PASSED
tests/client/test_async_client.py::test_get_invalid_url[asyncio-no-scheme] PASSED
tests/client/test_async_client.py::test_get_invalid_url[asyncio-scheme-not-http(s)] PASSED
tests/client/test_async_client.py::test_head[asyncio] PASSED
tests/client/test_async_client.py::test_mounted_transport[asyncio] PASSED
tests/client/test_async_client.py::test_options[asyncio] PASSED
tests/client/test_async_client.py::test_patch[asyncio] PASSED
tests/client/test_async_client.py::test_post[asyncio] PASSED
tests/client/test_async_client.py::test_post_json[asyncio] PASSED
tests/client/test_async_client.py::test_put[asyncio] PASSED
tests/client/test_async_client.py::test_raise_for_status[asyncio] PASSED
tests/client/test_async_client.py::test_server_extensions[asyncio] PASSED
tests/client/test_async_client.py::test_stream_request[asyncio] PASSED
tests/client/test_async_client.py::test_stream_response[asyncio] PASSED
tests/client/test_auth.py::test_async_auth[asyncio] PASSED
tests/client/test_auth.py::test_async_auth_history[asyncio] PASSED
tests/client/test_auth.py::test_async_auth_reads_response_body[asyncio] PASSED
tests/client/test_auth.py::test_async_digest_auth_raises_protocol_error_on_malformed_header[asyncio-Digest realm="httpx@example.org", qop="auth"] PASSED
tests/client/test_auth.py::test_async_digest_auth_raises_protocol_error_on_malformed_header[asyncio-Digest realm="httpx@example.org", qop="auth,au] PASSED
tests/client/test_auth.py::test_auth_disable_per_request[asyncio] PASSED
tests/client/test_auth.py::test_auth_hidden_header[asyncio] PASSED
tests/client/test_auth.py::test_auth_hidden_url PASSED
tests/client/test_auth.py::test_auth_invalid_type[asyncio] PASSED
tests/client/test_auth.py::test_auth_property[asyncio] PASSED
tests/client/test_auth.py::test_basic_auth[asyncio] PASSED
tests/client/test_auth.py::test_basic_auth_in_url[asyncio] PASSED
tests/client/test_auth.py::test_basic_auth_on_session[asyncio] PASSED
tests/client/test_auth.py::test_basic_auth_with_stream[asyncio] PASSED
tests/client/test_auth.py::test_custom_auth[asyncio] PASSED
tests/client/test_auth.py::test_digest_auth[asyncio-MD5-64-32] PASSED
tests/client/test_auth.py::test_digest_auth[asyncio-MD5-SESS-64-32] PASSED
tests/client/test_auth.py::test_digest_auth[asyncio-SHA-256-64-64] PASSED
tests/client/test_auth.py::test_digest_auth[asyncio-SHA-256-SESS-64-64] PASSED
tests/client/test_auth.py::test_digest_auth[asyncio-SHA-512-64-128] PASSED
tests/client/test_auth.py::test_digest_auth[asyncio-SHA-512-SESS-64-128] PASSED
tests/client/test_auth.py::test_digest_auth[asyncio-SHA-64-40] PASSED
tests/client/test_auth.py::test_digest_auth[asyncio-SHA-SESS-64-40] PASSED
tests/client/test_auth.py::test_digest_auth_200_response_including_digest_auth_header[asyncio] PASSED
tests/client/test_auth.py::test_digest_auth_401_response_without_digest_auth_header[asyncio] PASSED
tests/client/test_auth.py::test_digest_auth_incorrect_credentials[asyncio] PASSED
tests/client/test_auth.py::test_digest_auth_no_specified_qop[asyncio] PASSED
tests/client/test_auth.py::test_digest_auth_qop_auth_int_not_implemented[asyncio] PASSED
tests/client/test_auth.py::test_digest_auth_qop_including_spaces_and_auth_returns_auth[asyncio-auth, auth-int] PASSED
tests/client/test_auth.py::test_digest_auth_qop_including_spaces_and_auth_returns_auth[asyncio-auth,auth-int] PASSED
tests/client/test_auth.py::test_digest_auth_qop_including_spaces_and_auth_returns_auth[asyncio-unknown,auth] PASSED
tests/client/test_auth.py::test_digest_auth_qop_must_be_auth_or_auth_int[asyncio] PASSED
tests/client/test_auth.py::test_digest_auth_resets_nonce_count_after_401[asyncio] PASSED
tests/client/test_auth.py::test_digest_auth_returns_no_auth_if_alternate_auth_scheme PASSED
tests/client/test_auth.py::test_digest_auth_returns_no_auth_if_no_digest_header_in_response[asyncio] PASSED
tests/client/test_auth.py::test_digest_auth_reuses_challenge[asyncio] PASSED
tests/client/test_auth.py::test_digest_auth_unavailable_streaming_body[asyncio] PASSED
tests/client/test_auth.py::test_netrc_auth_credentials_do_not_exist PASSED
tests/client/test_auth.py::test_netrc_auth_credentials_exist PASSED
tests/client/test_auth.py::test_netrc_auth_nopassword SKIPPED (netrc...)
tests/client/test_auth.py::test_netrc_auth_nopassword_parse_error PASSED
tests/client/test_auth.py::test_sync_auth PASSED
tests/client/test_auth.py::test_sync_auth_history PASSED
tests/client/test_auth.py::test_sync_auth_reads_response_body PASSED
tests/client/test_auth.py::test_sync_digest_auth_raises_protocol_error_on_malformed_header[Digest realm="httpx@example.org", qop="auth"] PASSED
tests/client/test_auth.py::test_sync_digest_auth_raises_protocol_error_on_malformed_header[Digest realm="httpx@example.org", qop="auth,au] PASSED
tests/client/test_client.py::test_all_mounted_transport PASSED
tests/client/test_client.py::test_base_url PASSED
tests/client/test_client.py::test_build_post_request PASSED
tests/client/test_client.py::test_build_request PASSED
tests/client/test_client.py::test_cannot_stream_async_request PASSED
tests/client/test_client.py::test_client_closed_state_using_implicit_open PASSED
tests/client/test_client.py::test_client_closed_state_using_with_block PASSED
tests/client/test_client.py::test_client_decode_text_using_autodetect PASSED
tests/client/test_client.py::test_client_decode_text_using_explicit_encoding PASSED
tests/client/test_client.py::test_context_managed_transport PASSED
tests/client/test_client.py::test_context_managed_transport_and_mount PASSED
tests/client/test_client.py::test_delete PASSED
tests/client/test_client.py::test_get PASSED
tests/client/test_client.py::test_get_invalid_url[no-host] PASSED
tests/client/test_client.py::test_get_invalid_url[no-scheme] PASSED
tests/client/test_client.py::test_get_invalid_url[scheme-not-http(s)] PASSED
tests/client/test_client.py::test_head PASSED
tests/client/test_client.py::test_merge_absolute_url PASSED
tests/client/test_client.py::test_merge_relative_url PASSED
tests/client/test_client.py::test_merge_relative_url_with_dotted_path PASSED
tests/client/test_client.py::test_merge_relative_url_with_encoded_slashes PASSED
tests/client/test_client.py::test_merge_relative_url_with_path PASSED
tests/client/test_client.py::test_merge_relative_url_with_path_including_colon PASSED
tests/client/test_client.py::test_mounted_transport PASSED
tests/client/test_client.py::test_options PASSED
tests/client/test_client.py::test_patch PASSED
tests/client/test_client.py::test_post PASSED
tests/client/test_client.py::test_post_json PASSED
tests/client/test_client.py::test_put PASSED
tests/client/test_client.py::test_raise_for_status PASSED
tests/client/test_client.py::test_raw_client_header PASSED
tests/client/test_client.py::test_raw_iterator PASSED
tests/client/test_client.py::test_server_extensions PASSED
tests/client/test_client.py::test_stream_iterator PASSED
tests/client/test_client.py::test_stream_response PASSED
tests/client/test_cookies.py::test_cookie_persistence PASSED
tests/client/test_cookies.py::test_get_cookie PASSED
tests/client/test_cookies.py::test_set_cookie PASSED
tests/client/test_cookies.py::test_set_cookie_with_cookiejar PASSED
tests/client/test_cookies.py::test_set_cookie_with_cookies_model PASSED
tests/client/test_cookies.py::test_set_per_request_cookie_is_deprecated PASSED
tests/client/test_cookies.py::test_setting_client_cookies_to_cookiejar PASSED
tests/client/test_event_hooks.py::test_async_event_hooks[asyncio] PASSED
tests/client/test_event_hooks.py::test_async_event_hooks_raising_exception[asyncio] PASSED
tests/client/test_event_hooks.py::test_async_event_hooks_with_redirect[asyncio] PASSED
tests/client/test_event_hooks.py::test_event_hooks PASSED
tests/client/test_event_hooks.py::test_event_hooks_raising_exception PASSED
tests/client/test_event_hooks.py::test_event_hooks_with_redirect PASSED
tests/client/test_headers.py::test_client_header PASSED
tests/client/test_headers.py::test_header_does_not_exist PASSED
tests/client/test_headers.py::test_header_merge PASSED
tests/client/test_headers.py::test_header_merge_conflicting_headers PASSED
tests/client/test_headers.py::test_header_repeated_items PASSED
tests/client/test_headers.py::test_header_repeated_multi_items PASSED
tests/client/test_headers.py::test_header_update PASSED
tests/client/test_headers.py::test_host_with_auth_and_port_in_url PASSED
tests/client/test_headers.py::test_host_with_non_default_port_in_url PASSED
tests/client/test_headers.py::test_remove_default_header PASSED
tests/client/test_headers.py::test_request_auto_headers PASSED
tests/client/test_properties.py::test_client_base_url PASSED
tests/client/test_properties.py::test_client_base_url_with_trailing_slash PASSED
tests/client/test_properties.py::test_client_base_url_without_trailing_slash PASSED
tests/client/test_properties.py::test_client_cookies PASSED
tests/client/test_properties.py::test_client_event_hooks PASSED
tests/client/test_properties.py::test_client_headers PASSED
tests/client/test_properties.py::test_client_timeout PASSED
tests/client/test_properties.py::test_client_trust_env PASSED
tests/client/test_proxies.py::test_async_proxy_close[asyncio] PASSED
tests/client/test_proxies.py::test_for_deprecated_proxy_params[proxies0-False] PASSED
tests/client/test_proxies.py::test_for_deprecated_proxy_params[proxies1-False] PASSED
tests/client/test_proxies.py::test_for_deprecated_proxy_params[proxies2-False] PASSED
tests/client/test_proxies.py::test_for_deprecated_proxy_params[proxies3-True] PASSED
tests/client/test_proxies.py::test_for_deprecated_proxy_params[proxies4-True] PASSED
tests/client/test_proxies.py::test_for_deprecated_proxy_params[proxies5-True] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-http://127.0.0.1-env4-http://localhost:123] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-http://127.0.0.1-env5-None] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-http://127.0.0.1-env6-http://localhost:123] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-http://127.0.0.1-env7-http://localhost:123] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-http://courses.mit.edu-env8-None] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-http://google.com-env0-None] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-http://google.com-env1-http://example.com] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-http://google.com-env2-http://example.com] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-http://google.com-env3-None] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-https://foo.example.com-env13-http://localhost:123] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-https://mit.edu.info-env10-None] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-https://mit.edu.info-env11-None] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-https://mit.edu.info-env12-http://localhost:123] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-https://mit.edu.info-env9-http://localhost:123] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-https://www.example1.com-env14-None] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-https://www.example2.com-env15-http://localhost:123] PASSED
tests/client/test_proxies.py::test_proxies_environ[AsyncClient-https://www.example3.com-env16-None] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-http://127.0.0.1-env4-http://localhost:123] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-http://127.0.0.1-env5-None] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-http://127.0.0.1-env6-http://localhost:123] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-http://127.0.0.1-env7-http://localhost:123] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-http://courses.mit.edu-env8-None] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-http://google.com-env0-None] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-http://google.com-env1-http://example.com] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-http://google.com-env2-http://example.com] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-http://google.com-env3-None] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-https://foo.example.com-env13-http://localhost:123] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-https://mit.edu.info-env10-None] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-https://mit.edu.info-env11-None] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-https://mit.edu.info-env12-http://localhost:123] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-https://mit.edu.info-env9-http://localhost:123] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-https://www.example1.com-env14-None] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-https://www.example2.com-env15-http://localhost:123] PASSED
tests/client/test_proxies.py::test_proxies_environ[Client-https://www.example3.com-env16-None] PASSED
tests/client/test_proxies.py::test_proxies_parameter[http://127.0.0.1-expected_proxies0] PASSED
tests/client/test_proxies.py::test_proxies_parameter[proxies1-expected_proxies1] PASSED
tests/client/test_proxies.py::test_proxies_parameter[proxies2-expected_proxies2] PASSED
tests/client/test_proxies.py::test_proxies_parameter[proxies3-expected_proxies3] PASSED
tests/client/test_proxies.py::test_proxies_parameter[proxies4-expected_proxies4] PASSED
tests/client/test_proxies.py::test_proxy_and_proxies_together PASSED
tests/client/test_proxies.py::test_proxy_with_mounts PASSED
tests/client/test_proxies.py::test_socks_proxy PASSED
tests/client/test_proxies.py::test_socks_proxy_deprecated PASSED
tests/client/test_proxies.py::test_sync_proxy_close PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-None-None] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-proxies1-None] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-proxies10-http://[::1]] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-proxies14-http://[::1]] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-proxies15-None] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-proxies16-http://[::1]] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-proxies17-http://[::1]] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-proxies18-http://[::1]] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-proxies19-http://[::1]] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-proxies2-None] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-proxies22-http://[::1]:4] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-proxies23-http://[::1]:3] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-proxies24-http://[::1]:2] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-proxies3-None] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-proxies4-http://[::1]] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-proxies6-http://[::1]] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com-proxies8-None] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com:443-proxies13-http://[::1]] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com:8080-proxies20-http://[::1]] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://example.com:8080-proxies21-http://[::1]] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://www.example.com-proxies11-http://[::1]] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://www.example.com-proxies7-None] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://www.example.com-proxies9-http://[::1]] PASSED
tests/client/test_proxies.py::test_transport_for_request[http://wwwexample.com-proxies12-None] PASSED
tests/client/test_proxies.py::test_transport_for_request[https://example.com-proxies5-None] PASSED
tests/client/test_proxies.py::test_unsupported_proxy_scheme PASSED
tests/client/test_proxies.py::test_unsupported_proxy_scheme_deprecated PASSED
tests/client/test_queryparams.py::test_client_queryparams PASSED
tests/client/test_queryparams.py::test_client_queryparams_echo PASSED
tests/client/test_queryparams.py::test_client_queryparams_string PASSED
tests/client/test_redirects.py::test_async_invalid_redirect[asyncio] PASSED
tests/client/test_redirects.py::test_async_next_request[asyncio] PASSED
tests/client/test_redirects.py::test_async_too_many_redirects[asyncio] PASSED
tests/client/test_redirects.py::test_body_redirect PASSED
tests/client/test_redirects.py::test_can_stream_if_no_redirect PASSED
tests/client/test_redirects.py::test_cannot_redirect_streaming_body PASSED
tests/client/test_redirects.py::test_cross_domain_https_redirect_with_auth_header PASSED
tests/client/test_redirects.py::test_cross_domain_redirect_with_auth PASSED
tests/client/test_redirects.py::test_cross_domain_redirect_with_auth_header PASSED
tests/client/test_redirects.py::test_cross_subdomain_redirect PASSED
tests/client/test_redirects.py::test_fragment_redirect PASSED
tests/client/test_redirects.py::test_head_redirect PASSED
tests/client/test_redirects.py::test_invalid_redirect PASSED
tests/client/test_redirects.py::test_malformed_redirect PASSED
tests/client/test_redirects.py::test_multiple_redirects PASSED
tests/client/test_redirects.py::test_next_request PASSED
tests/client/test_redirects.py::test_no_body_redirect PASSED
tests/client/test_redirects.py::test_no_scheme_redirect PASSED
tests/client/test_redirects.py::test_redirect_301 PASSED
tests/client/test_redirects.py::test_redirect_302 PASSED
tests/client/test_redirects.py::test_redirect_303 PASSED
tests/client/test_redirects.py::test_redirect_cookie_behavior PASSED
tests/client/test_redirects.py::test_redirect_custom_scheme PASSED
tests/client/test_redirects.py::test_redirect_loop PASSED
tests/client/test_redirects.py::test_relative_redirect PASSED
tests/client/test_redirects.py::test_same_domain_https_redirect_with_auth_header PASSED
tests/client/test_redirects.py::test_same_domain_redirect PASSED
tests/client/test_redirects.py::test_sync_too_many_redirects PASSED
tests/models/test_cookies.py::test_cookies PASSED
tests/models/test_cookies.py::test_cookies_can_be_a_list_of_tuples PASSED
tests/models/test_cookies.py::test_cookies_repr PASSED
tests/models/test_cookies.py::test_cookies_update PASSED
tests/models/test_cookies.py::test_cookies_with_domain PASSED
tests/models/test_cookies.py::test_cookies_with_domain_and_path PASSED
tests/models/test_cookies.py::test_multiple_set_cookie PASSED
tests/models/test_headers.py::test_copy_headers_init PASSED
tests/models/test_headers.py::test_copy_headers_method PASSED
tests/models/test_headers.py::test_header_mutations PASSED
tests/models/test_headers.py::test_headers PASSED
tests/models/test_headers.py::test_headers_decode_ascii PASSED
tests/models/test_headers.py::test_headers_decode_explicit_encoding PASSED
tests/models/test_headers.py::test_headers_decode_iso_8859_1 PASSED
tests/models/test_headers.py::test_headers_decode_utf_8 PASSED
tests/models/test_headers.py::test_headers_delete_removes_all_existing PASSED
tests/models/test_headers.py::test_headers_dict_repr PASSED
tests/models/test_headers.py::test_headers_encoding_in_repr PASSED
tests/models/test_headers.py::test_headers_insert_appends_if_new PASSED
tests/models/test_headers.py::test_headers_insert_removes_all_existing PASSED
tests/models/test_headers.py::test_headers_insert_retains_ordering PASSED
tests/models/test_headers.py::test_headers_list_repr PASSED
tests/models/test_headers.py::test_multiple_headers PASSED
tests/models/test_headers.py::test_sensitive_headers[authorization] PASSED
tests/models/test_headers.py::test_sensitive_headers[proxy-authorization] PASSED
tests/models/test_queryparams.py::test_empty_query_params PASSED
tests/models/test_queryparams.py::test_queryparam_add PASSED
tests/models/test_queryparams.py::test_queryparam_merge PASSED
tests/models/test_queryparams.py::test_queryparam_remove PASSED
tests/models/test_queryparams.py::test_queryparam_set PASSED
tests/models/test_queryparams.py::test_queryparam_setter_is_hard_deprecated PASSED
tests/models/test_queryparams.py::test_queryparam_types PASSED
tests/models/test_queryparams.py::test_queryparam_update_is_hard_deprecated PASSED
tests/models/test_queryparams.py::test_queryparams[a=123&a=456&b=789] PASSED
tests/models/test_queryparams.py::test_queryparams[source1] PASSED
tests/models/test_queryparams.py::test_queryparams[source2] PASSED
tests/models/test_queryparams.py::test_queryparams[source3] PASSED
tests/models/test_queryparams.py::test_queryparams[source4] PASSED
tests/models/test_queryparams.py::test_queryparams_are_hashable PASSED
tests/models/test_requests.py::test_aread_and_stream_data[asyncio] PASSED
tests/models/test_requests.py::test_cannot_access_streaming_content_without_read PASSED
tests/models/test_requests.py::test_content_length_header PASSED
tests/models/test_requests.py::test_generator_with_content_length_header PASSED
tests/models/test_requests.py::test_generator_with_transfer_encoding_header PASSED
tests/models/test_requests.py::test_headers PASSED
tests/models/test_requests.py::test_ignore_transfer_encoding_header_if_content_length_exists PASSED
tests/models/test_requests.py::test_iterable_content PASSED
tests/models/test_requests.py::test_json_encoded_data PASSED
tests/models/test_requests.py::test_no_content PASSED
tests/models/test_requests.py::test_override_accept_encoding_header PASSED
tests/models/test_requests.py::test_override_content_length_header PASSED
tests/models/test_requests.py::test_override_host_header PASSED
tests/models/test_requests.py::test_read_and_stream_data PASSED
tests/models/test_requests.py::test_request_async_streaming_content_picklable[asyncio] PASSED
tests/models/test_requests.py::test_request_generator_content_picklable PASSED
tests/models/test_requests.py::test_request_picklable PASSED
tests/models/test_requests.py::test_request_repr PASSED
tests/models/test_requests.py::test_transfer_encoding_header PASSED
tests/models/test_requests.py::test_url PASSED
tests/models/test_requests.py::test_url_encoded_data PASSED
tests/models/test_responses.py::test_aclose_on_sync[asyncio] PASSED
tests/models/test_responses.py::test_aiter_bytes[asyncio] PASSED
tests/models/test_responses.py::test_aiter_bytes_with_chunk_size[asyncio] PASSED
tests/models/test_responses.py::test_aiter_lines[asyncio] PASSED
tests/models/test_responses.py::test_aiter_raw[asyncio] PASSED
tests/models/test_responses.py::test_aiter_raw_increments_updates_counter[asyncio] PASSED
tests/models/test_responses.py::test_aiter_raw_on_sync[asyncio] PASSED
tests/models/test_responses.py::test_aiter_raw_with_chunksize[asyncio] PASSED
tests/models/test_responses.py::test_aiter_text[asyncio] PASSED
tests/models/test_responses.py::test_aiter_text_with_chunk_size[asyncio] PASSED
tests/models/test_responses.py::test_aread[asyncio] PASSED
tests/models/test_responses.py::test_async_streaming_response[asyncio] PASSED
tests/models/test_responses.py::test_cannot_access_unset_request PASSED
tests/models/test_responses.py::test_cannot_aread_after_response_closed[asyncio] PASSED
tests/models/test_responses.py::test_cannot_aread_after_stream_consumed[asyncio] PASSED
tests/models/test_responses.py::test_cannot_read_after_response_closed PASSED
tests/models/test_responses.py::test_cannot_read_after_stream_consumed PASSED
tests/models/test_responses.py::test_close_on_async PASSED
tests/models/test_responses.py::test_decode_error_with_request[br] PASSED
tests/models/test_responses.py::test_decode_error_with_request[deflate] PASSED
tests/models/test_responses.py::test_decode_error_with_request[gzip] PASSED
tests/models/test_responses.py::test_elapsed_not_available_until_closed[asyncio] PASSED
tests/models/test_responses.py::test_empty_aread[asyncio] PASSED
tests/models/test_responses.py::test_empty_read PASSED
tests/models/test_responses.py::test_generator_with_content_length_header PASSED
tests/models/test_responses.py::test_generator_with_transfer_encoding_header PASSED
tests/models/test_responses.py::test_iter_bytes PASSED
tests/models/test_responses.py::test_iter_bytes_doesnt_return_empty_chunks PASSED
tests/models/test_responses.py::test_iter_bytes_with_chunk_size PASSED
tests/models/test_responses.py::test_iter_bytes_with_empty_response PASSED
tests/models/test_responses.py::test_iter_lines PASSED
tests/models/test_responses.py::test_iter_raw PASSED
tests/models/test_responses.py::test_iter_raw_doesnt_return_empty_chunks PASSED
tests/models/test_responses.py::test_iter_raw_increments_updates_counter PASSED
tests/models/test_responses.py::test_iter_raw_on_async PASSED
tests/models/test_responses.py::test_iter_raw_on_iterable PASSED
tests/models/test_responses.py::test_iter_raw_with_chunksize PASSED
tests/models/test_responses.py::test_iter_text PASSED
tests/models/test_responses.py::test_iter_text_with_chunk_size PASSED
tests/models/test_responses.py::test_json_with_options PASSED
tests/models/test_responses.py::test_json_with_specified_charset[utf-16-be] PASSED
tests/models/test_responses.py::test_json_with_specified_charset[utf-16-le] PASSED
tests/models/test_responses.py::test_json_with_specified_charset[utf-16] PASSED
tests/models/test_responses.py::test_json_with_specified_charset[utf-32-be] PASSED
tests/models/test_responses.py::test_json_with_specified_charset[utf-32-le] PASSED
tests/models/test_responses.py::test_json_with_specified_charset[utf-32] PASSED
tests/models/test_responses.py::test_json_with_specified_charset[utf-8-sig] PASSED
tests/models/test_responses.py::test_json_with_specified_charset[utf-8] PASSED
tests/models/test_responses.py::test_json_with_specified_encoding PASSED
tests/models/test_responses.py::test_json_without_specified_charset[utf-16-be] PASSED
tests/models/test_responses.py::test_json_without_specified_charset[utf-16-le] PASSED
tests/models/test_responses.py::test_json_without_specified_charset[utf-16] PASSED
tests/models/test_responses.py::test_json_without_specified_charset[utf-32-be] PASSED
tests/models/test_responses.py::test_json_without_specified_charset[utf-32-le] PASSED
tests/models/test_responses.py::test_json_without_specified_charset[utf-32] PASSED
tests/models/test_responses.py::test_json_without_specified_charset[utf-8-sig] PASSED
tests/models/test_responses.py::test_json_without_specified_charset[utf-8] PASSED
tests/models/test_responses.py::test_link_headers[headers0-expected0] PASSED
tests/models/test_responses.py::test_link_headers[headers1-expected1] PASSED
tests/models/test_responses.py::test_raise_for_status PASSED
tests/models/test_responses.py::test_read PASSED
tests/models/test_responses.py::test_response PASSED
tests/models/test_responses.py::test_response_async_streaming_picklable[asyncio] PASSED
tests/models/test_responses.py::test_response_content PASSED
tests/models/test_responses.py::test_response_content_type_encoding PASSED
tests/models/test_responses.py::test_response_decode_text_using_autodetect PASSED
tests/models/test_responses.py::test_response_decode_text_using_explicit_encoding PASSED
tests/models/test_responses.py::test_response_default_to_utf8_encoding PASSED
tests/models/test_responses.py::test_response_fallback_to_utf8_encoding PASSED
tests/models/test_responses.py::test_response_force_encoding PASSED
tests/models/test_responses.py::test_response_force_encoding_after_text_accessed PASSED
tests/models/test_responses.py::test_response_html PASSED
tests/models/test_responses.py::test_response_json PASSED
tests/models/test_responses.py::test_response_no_charset_with_ascii_content PASSED
tests/models/test_responses.py::test_response_no_charset_with_cp_1252_content PASSED
tests/models/test_responses.py::test_response_no_charset_with_iso_8859_1_content PASSED
tests/models/test_responses.py::test_response_no_charset_with_utf8_content PASSED
tests/models/test_responses.py::test_response_non_text_encoding PASSED
tests/models/test_responses.py::test_response_picklable PASSED
tests/models/test_responses.py::test_response_repr PASSED
tests/models/test_responses.py::test_response_set_explicit_encoding PASSED
tests/models/test_responses.py::test_response_text PASSED
tests/models/test_responses.py::test_response_with_unset_request PASSED
tests/models/test_responses.py::test_set_request_after_init PASSED
tests/models/test_responses.py::test_sync_streaming_response PASSED
tests/models/test_responses.py::test_unknown_status_code PASSED
tests/models/test_responses.py::test_value_error_without_request[br] PASSED
tests/models/test_responses.py::test_value_error_without_request[deflate] PASSED
tests/models/test_responses.py::test_value_error_without_request[gzip] PASSED
tests/models/test_url.py::test_basic_url PASSED
tests/models/test_url.py::test_complete_url PASSED
tests/models/test_url.py::test_copy_with PASSED
tests/models/test_url.py::test_idna_url[http_with_custom_port] PASSED
tests/models/test_url.py::test_idna_url[http_with_port] PASSED
tests/models/test_url.py::test_idna_url[https_with_custom_port] PASSED
tests/models/test_url.py::test_idna_url[https_with_port] PASSED
tests/models/test_url.py::test_idna_url[https_without_port] PASSED
tests/models/test_url.py::test_idna_url[unicode_tr46_compat] PASSED
tests/models/test_url.py::test_ipv6_url PASSED
tests/models/test_url.py::test_ipv6_url_copy_with_host[::ffff:192.168.0.1-http://127.0.0.1:1234] PASSED
tests/models/test_url.py::test_ipv6_url_copy_with_host[::ffff:192.168.0.1-http://[::ffff:127.0.0.1]:1234] PASSED
tests/models/test_url.py::test_ipv6_url_copy_with_host[::ffff:192.168.0.1-http://example.com:1234] PASSED
tests/models/test_url.py::test_ipv6_url_copy_with_host[[::ffff:192.168.0.1]-http://127.0.0.1:1234] PASSED
tests/models/test_url.py::test_ipv6_url_copy_with_host[[::ffff:192.168.0.1]-http://[::ffff:127.0.0.1]:1234] PASSED
tests/models/test_url.py::test_ipv6_url_copy_with_host[[::ffff:192.168.0.1]-http://example.com:1234] PASSED
tests/models/test_url.py::test_ipv6_url_from_raw_url[::ffff:192.168.0.1] PASSED
tests/models/test_url.py::test_ipv6_url_from_raw_url[[::ffff:192.168.0.1]] PASSED
tests/models/test_url.py::test_param_does_not_require_encoding PASSED
tests/models/test_url.py::test_param_requires_encoding PASSED
tests/models/test_url.py::test_param_with_existing_escape_requires_encoding PASSED
tests/models/test_url.py::test_path_query_fragment[https://example.com/ %61%62%63-/%20%61%62%63-/ abc--] PASSED
tests/models/test_url.py::test_path_query_fragment[https://example.com/!$&'()*+,;= abc ABC 123 :/[]@-/!$&'()*+,;=%20abc%20ABC%20123%20:/[]@-/!$&'()*+,;= abc ABC 123 :/[]@--] PASSED
tests/models/test_url.py::test_path_query_fragment[https://example.com/!$&'()*+,;=%20abc%20ABC%20123%20:/[]@-/!$&'()*+,;=%20abc%20ABC%20123%20:/[]@-/!$&'()*+,;= abc ABC 123 :/[]@--] PASSED
tests/models/test_url.py::test_path_query_fragment[https://example.com/#!$&'()*+,;= abc ABC 123 :/[]@?#-/-/--!$&'()*+,;= abc ABC 123 :/[]@?#] PASSED
tests/models/test_url.py::test_path_query_fragment[https://example.com/?!$&%27()*+,;=%20abc%20ABC%20123%20:%2F[]@?-/?!$&%27()*+,;=%20abc%20ABC%20123%20:%2F[]@?-/-!$&%27()*+,;=%20abc%20ABC%20123%20:%2F[]@?-] PASSED
tests/models/test_url.py::test_path_query_fragment[https://example.com/?!$&'()*+,;= abc ABC 123 :/[]@?-/?!$&'()*+,;=%20abc%20ABC%20123%20:/[]@?-/-!$&'()*+,;=%20abc%20ABC%20123%20:/[]@?-] PASSED
tests/models/test_url.py::test_path_query_fragment[https://example.com/?%20%97%98%99-/?%20%97%98%99-/-%20%97%98%99-] PASSED
tests/models/test_url.py::test_relative_url_join PASSED
tests/models/test_url.py::test_resolution_error_1833 PASSED
tests/models/test_url.py::test_url_add_param_manipulation PASSED
tests/models/test_url.py::test_url_copywith_authority_subcomponents PASSED
tests/models/test_url.py::test_url_copywith_invalid_component PASSED
tests/models/test_url.py::test_url_copywith_netloc PASSED
tests/models/test_url.py::test_url_copywith_query PASSED
tests/models/test_url.py::test_url_copywith_raw_path PASSED
tests/models/test_url.py::test_url_copywith_security PASSED
tests/models/test_url.py::test_url_copywith_urlencoded_path PASSED
tests/models/test_url.py::test_url_copywith_userinfo_subcomponents PASSED
tests/models/test_url.py::test_url_eq_str PASSED
tests/models/test_url.py::test_url_escaped_idna_host PASSED
tests/models/test_url.py::test_url_escaped_path PASSED
tests/models/test_url.py::test_url_excessively_long_component PASSED
tests/models/test_url.py::test_url_excessively_long_url PASSED
tests/models/test_url.py::test_url_invalid_hostname PASSED
tests/models/test_url.py::test_url_invalid_idna_host PASSED
tests/models/test_url.py::test_url_invalid_ipv4 PASSED
tests/models/test_url.py::test_url_invalid_ipv6 PASSED
tests/models/test_url.py::test_url_invalid_port PASSED
tests/models/test_url.py::test_url_invalid_type PASSED
tests/models/test_url.py::test_url_ipv4_like_host PASSED
tests/models/test_url.py::test_url_join PASSED
tests/models/test_url.py::test_url_join_rfc3986 PASSED
tests/models/test_url.py::test_url_leading_dot_prefix_on_absolute_url PASSED
tests/models/test_url.py::test_url_leading_dot_prefix_on_relative_url PASSED
tests/models/test_url.py::test_url_merge_params_manipulation PASSED
tests/models/test_url.py::test_url_no_authority PASSED
tests/models/test_url.py::test_url_no_scheme PASSED
tests/models/test_url.py::test_url_non_printing_character_in_component PASSED
tests/models/test_url.py::test_url_non_printing_character_in_url PASSED
tests/models/test_url.py::test_url_normalized_host PASSED
tests/models/test_url.py::test_url_normalized_path PASSED
tests/models/test_url.py::test_url_normalized_port PASSED
tests/models/test_url.py::test_url_params PASSED
tests/models/test_url.py::test_url_query_encoding PASSED
tests/models/test_url.py::test_url_raw_compatibility PASSED
tests/models/test_url.py::test_url_remove_param_manipulation PASSED
tests/models/test_url.py::test_url_set PASSED
tests/models/test_url.py::test_url_set_param_manipulation PASSED
tests/models/test_url.py::test_url_unescaped_idna_host PASSED
tests/models/test_url.py::test_url_username_and_password[https://user name:p@ssword@example.com-user%20name:p%40ssword-user name-p@ssword] PASSED
tests/models/test_url.py::test_url_username_and_password[https://user%20name:p%40ssword@example.com-user%20name:p%40ssword-user name-p@ssword] PASSED
tests/models/test_url.py::test_url_username_and_password[https://username%40gmail.com:pa%20ssword@example.com-username%40gmail.com:pa%20ssword-username@gmail.com-pa ssword] PASSED
tests/models/test_url.py::test_url_username_and_password[https://username:password@example.com-username:password-username-password] PASSED
tests/models/test_url.py::test_url_username_and_password[https://username@gmail.com:pa ssword@example.com-username%40gmail.com:pa%20ssword-username@gmail.com-pa ssword] PASSED
tests/models/test_url.py::test_url_valid_host PASSED
tests/models/test_url.py::test_url_valid_ipv4 PASSED
tests/models/test_url.py::test_url_valid_ipv6 PASSED
tests/models/test_url.py::test_url_valid_port PASSED
tests/models/test_url.py::test_url_with_components PASSED
tests/models/test_url.py::test_url_with_empty_query PASSED
tests/models/test_url.py::test_url_with_invalid_component PASSED
tests/models/test_url.py::test_url_with_relative_path PASSED
tests/models/test_url.py::test_urlparse_with_invalid_component PASSED
tests/models/test_url.py::test_urlparse_with_invalid_path PASSED
tests/models/test_url.py::test_urlparse_with_invalid_scheme PASSED
tests/test_api.py::test_delete PASSED
tests/test_api.py::test_get PASSED
tests/test_api.py::test_get_invalid_url PASSED
tests/test_api.py::test_head PASSED
tests/test_api.py::test_options PASSED
tests/test_api.py::test_patch PASSED
tests/test_api.py::test_post PASSED
tests/test_api.py::test_post_byte_iterator PASSED
tests/test_api.py::test_post_byte_stream PASSED
tests/test_api.py::test_put PASSED
tests/test_api.py::test_stream PASSED
tests/test_asgi.py::test_asgi[asyncio] PASSED
tests/test_asgi.py::test_asgi_disconnect_after_response_complete[asyncio] PASSED
tests/test_asgi.py::test_asgi_exc[asyncio] PASSED
tests/test_asgi.py::test_asgi_exc_after_response[asyncio] PASSED
tests/test_asgi.py::test_asgi_exc_no_raise[asyncio] PASSED
tests/test_asgi.py::test_asgi_headers[asyncio] PASSED
tests/test_asgi.py::test_asgi_raw_path[asyncio] PASSED
tests/test_asgi.py::test_asgi_raw_path_should_not_include_querystring_portion[asyncio] PASSED
tests/test_asgi.py::test_asgi_transport[asyncio] PASSED
tests/test_asgi.py::test_asgi_transport_no_body[asyncio] PASSED
tests/test_asgi.py::test_asgi_upload[asyncio] PASSED
tests/test_asgi.py::test_asgi_urlencoded_path[asyncio] PASSED
tests/test_auth.py::test_basic_auth PASSED
tests/test_auth.py::test_digest_auth_setting_cookie_in_request PASSED
tests/test_auth.py::test_digest_auth_with_200 PASSED
tests/test_auth.py::test_digest_auth_with_401 PASSED
tests/test_auth.py::test_digest_auth_with_401_nonce_counting PASSED
tests/test_config.py::test_create_ssl_context_with_get_request PASSED
tests/test_config.py::test_invalid_proxy_scheme PASSED
tests/test_config.py::test_limits_eq PASSED
tests/test_config.py::test_limits_repr PASSED
tests/test_config.py::test_load_ssl_config PASSED
tests/test_config.py::test_load_ssl_config_cert_and_encrypted_key[password0] PASSED
tests/test_config.py::test_load_ssl_config_cert_and_encrypted_key[password1] PASSED
tests/test_config.py::test_load_ssl_config_cert_and_key PASSED
tests/test_config.py::test_load_ssl_config_cert_and_key_invalid_password PASSED
tests/test_config.py::test_load_ssl_config_cert_without_key_raises PASSED
tests/test_config.py::test_load_ssl_config_no_verify PASSED
tests/test_config.py::test_load_ssl_config_verify_directory PASSED
tests/test_config.py::test_load_ssl_config_verify_env_file[SSL_CERT_DIR] PASSED
tests/test_config.py::test_load_ssl_config_verify_env_file[SSL_CERT_FILE] PASSED
tests/test_config.py::test_load_ssl_config_verify_existing_file PASSED
tests/test_config.py::test_load_ssl_config_verify_non_existing_path PASSED
tests/test_config.py::test_load_ssl_context PASSED
tests/test_config.py::test_proxy_from_url PASSED
tests/test_config.py::test_proxy_with_auth_from_url PASSED
tests/test_config.py::test_ssl_config_support_for_keylog_file PASSED
tests/test_config.py::test_timeout_all_parameters_set PASSED
tests/test_config.py::test_timeout_eq PASSED
tests/test_config.py::test_timeout_from_config_instance PASSED
tests/test_config.py::test_timeout_from_none PASSED
tests/test_config.py::test_timeout_from_nothing PASSED
tests/test_config.py::test_timeout_from_one_none_value PASSED
tests/test_config.py::test_timeout_from_one_value PASSED
tests/test_config.py::test_timeout_from_one_value_and_default PASSED
tests/test_config.py::test_timeout_from_tuple PASSED
tests/test_config.py::test_timeout_missing_default PASSED
tests/test_config.py::test_timeout_repr PASSED
tests/test_content.py::test_aiterator_content[asyncio] PASSED
tests/test_content.py::test_async_bytesio_content[asyncio] PASSED
tests/test_content.py::test_bytes_content[asyncio] PASSED
tests/test_content.py::test_bytesio_content[asyncio] PASSED
tests/test_content.py::test_empty_content[asyncio] PASSED
tests/test_content.py::test_empty_request[asyncio] PASSED
tests/test_content.py::test_invalid_argument PASSED
tests/test_content.py::test_iterator_content[asyncio] PASSED
tests/test_content.py::test_json_content[asyncio] PASSED
tests/test_content.py::test_multipart_data_and_files_content[asyncio] PASSED
tests/test_content.py::test_multipart_files_content[asyncio] PASSED
tests/test_content.py::test_multipart_multiple_files_single_input_content[asyncio] PASSED
tests/test_content.py::test_response_aiterator_content[asyncio] PASSED
tests/test_content.py::test_response_bytes_content[asyncio] PASSED
tests/test_content.py::test_response_empty_content[asyncio] PASSED
tests/test_content.py::test_response_invalid_argument PASSED
tests/test_content.py::test_response_iterator_content[asyncio] PASSED
tests/test_content.py::test_urlencoded_boolean[asyncio] PASSED
tests/test_content.py::test_urlencoded_content[asyncio] PASSED
tests/test_content.py::test_urlencoded_list[asyncio] PASSED
tests/test_content.py::test_urlencoded_none[asyncio] PASSED
tests/test_decoders.py::test_brotli PASSED
tests/test_decoders.py::test_decoders_empty_cases[br] PASSED
tests/test_decoders.py::test_decoders_empty_cases[deflate] PASSED
tests/test_decoders.py::test_decoders_empty_cases[gzip] PASSED
tests/test_decoders.py::test_decoders_empty_cases[identity] PASSED
tests/test_decoders.py::test_decoding_errors[br] PASSED
tests/test_decoders.py::test_decoding_errors[deflate] PASSED
tests/test_decoders.py::test_decoding_errors[gzip] PASSED
tests/test_decoders.py::test_deflate PASSED
tests/test_decoders.py::test_empty_content[br] PASSED
tests/test_decoders.py::test_empty_content[deflate] PASSED
tests/test_decoders.py::test_empty_content[gzip] PASSED
tests/test_decoders.py::test_empty_content[identity] PASSED
tests/test_decoders.py::test_gzip PASSED
tests/test_decoders.py::test_invalid_content_encoding_header PASSED
tests/test_decoders.py::test_line_decoder_cr PASSED
tests/test_decoders.py::test_line_decoder_crnl PASSED
tests/test_decoders.py::test_line_decoder_nl PASSED
tests/test_decoders.py::test_multi PASSED
tests/test_decoders.py::test_multi_with_identity PASSED
tests/test_decoders.py::test_streaming[asyncio] PASSED
tests/test_decoders.py::test_streaming_text_decoder[data0-expected0] PASSED
tests/test_decoders.py::test_text_decoder_empty_cases PASSED
tests/test_decoders.py::test_text_decoder_known_encoding[asyncio] PASSED
tests/test_decoders.py::test_text_decoder_with_autodetect[asyncio-data0-ascii] PASSED
tests/test_decoders.py::test_text_decoder_with_autodetect[asyncio-data1-utf-8] PASSED
tests/test_decoders.py::test_text_decoder_with_autodetect[asyncio-data2-cp1252] PASSED
tests/test_decoders.py::test_text_decoder_with_autodetect[asyncio-data3-iso-8859-1] PASSED
tests/test_decoders.py::test_zlib PASSED
tests/test_exceptions.py::test_httpcore_all_exceptions_mapped PASSED
tests/test_exceptions.py::test_httpcore_exception_mapping PASSED
tests/test_exceptions.py::test_request_attribute PASSED
tests/test_exported_members.py::test_all_imports_are_exported PASSED
tests/test_main.py::test_auth PASSED
tests/test_main.py::test_binary PASSED
tests/test_main.py::test_download PASSED
tests/test_main.py::test_errors PASSED
tests/test_main.py::test_follow_redirects PASSED
tests/test_main.py::test_get PASSED
tests/test_main.py::test_help PASSED
tests/test_main.py::test_json PASSED
tests/test_main.py::test_post PASSED
tests/test_main.py::test_redirects PASSED
tests/test_main.py::test_verbose PASSED
tests/test_multipart.py::TestHeaderParamHTML5Formatting::test_ascii PASSED
tests/test_multipart.py::TestHeaderParamHTML5Formatting::test_unicode PASSED
tests/test_multipart.py::TestHeaderParamHTML5Formatting::test_unicode_escape PASSED
tests/test_multipart.py::TestHeaderParamHTML5Formatting::test_unicode_with_control_character PASSED
tests/test_multipart.py::test_multipart[abc-abc0] PASSED
tests/test_multipart.py::test_multipart[abc-abc1] PASSED
tests/test_multipart.py::test_multipart_encode PASSED
tests/test_multipart.py::test_multipart_encode_files_allows_bytes_content PASSED
tests/test_multipart.py::test_multipart_encode_files_allows_filenames_as_none PASSED
tests/test_multipart.py::test_multipart_encode_files_allows_str_content PASSED
tests/test_multipart.py::test_multipart_encode_files_guesses_correct_content_type[example.json-application/json] PASSED
tests/test_multipart.py::test_multipart_encode_files_guesses_correct_content_type[example.txt-text/plain] PASSED
tests/test_multipart.py::test_multipart_encode_files_guesses_correct_content_type[no-extension-application/octet-stream] PASSED
tests/test_multipart.py::test_multipart_encode_files_raises_exception_with_StringIO_content PASSED
tests/test_multipart.py::test_multipart_encode_files_raises_exception_with_text_mode_file PASSED
tests/test_multipart.py::test_multipart_encode_non_seekable_filelike PASSED
tests/test_multipart.py::test_multipart_encode_unicode_file_contents PASSED
tests/test_multipart.py::test_multipart_explicit_boundary[multipart/form-data; boundary="+++" ;] PASSED
tests/test_multipart.py::test_multipart_explicit_boundary[multipart/form-data; boundary="+++"; charset=utf-8] PASSED
tests/test_multipart.py::test_multipart_explicit_boundary[multipart/form-data; boundary="+++"] PASSED
tests/test_multipart.py::test_multipart_explicit_boundary[multipart/form-data; boundary=+++ ;] PASSED
tests/test_multipart.py::test_multipart_explicit_boundary[multipart/form-data; boundary=+++; charset=utf-8] PASSED
tests/test_multipart.py::test_multipart_explicit_boundary[multipart/form-data; boundary=+++] PASSED
tests/test_multipart.py::test_multipart_explicit_boundary[multipart/form-data; charset=utf-8; boundary="+++"] PASSED
tests/test_multipart.py::test_multipart_explicit_boundary[multipart/form-data; charset=utf-8; boundary=+++] PASSED
tests/test_multipart.py::test_multipart_file_tuple PASSED
tests/test_multipart.py::test_multipart_file_tuple_headers[None] PASSED
tests/test_multipart.py::test_multipart_file_tuple_headers[text/plain] PASSED
tests/test_multipart.py::test_multipart_header_without_boundary[multipart/form-data; charset=utf-8; ] PASSED
tests/test_multipart.py::test_multipart_header_without_boundary[multipart/form-data; charset=utf-8] PASSED
tests/test_multipart.py::test_multipart_headers_include_content_type PASSED
tests/test_multipart.py::test_multipart_invalid_key[1] PASSED
tests/test_multipart.py::test_multipart_invalid_key[2.3] PASSED
tests/test_multipart.py::test_multipart_invalid_key[None] PASSED
tests/test_multipart.py::test_multipart_invalid_key[abc] PASSED
tests/test_multipart.py::test_multipart_invalid_value[value0] PASSED
tests/test_multipart.py::test_multipart_invalid_value[value1] PASSED
tests/test_multipart.py::test_multipart_rewinds_files PASSED
tests/test_status_codes.py::test_lowercase_status_code PASSED
tests/test_status_codes.py::test_reason_phrase_for_status_code PASSED
tests/test_status_codes.py::test_reason_phrase_for_unknown_status_code PASSED
tests/test_status_codes.py::test_status_code_as_int PASSED
tests/test_status_codes.py::test_status_code_phrase_lookup PASSED
tests/test_status_codes.py::test_status_code_value_lookup PASSED
tests/test_timeouts.py::test_connect_timeout[asyncio] PASSED
tests/test_timeouts.py::test_pool_timeout[asyncio] PASSED
tests/test_timeouts.py::test_read_timeout[asyncio] PASSED
tests/test_timeouts.py::test_write_timeout[asyncio] PASSED
tests/test_utils.py::test_bad_utf_like_encoding PASSED
tests/test_utils.py::test_encoded[utf-16-be] PASSED
tests/test_utils.py::test_encoded[utf-16-le] PASSED
tests/test_utils.py::test_encoded[utf-16] PASSED
tests/test_utils.py::test_encoded[utf-32-be] PASSED
tests/test_utils.py::test_encoded[utf-32-le] PASSED
tests/test_utils.py::test_encoded[utf-32] PASSED
tests/test_utils.py::test_encoded[utf-8-sig] PASSED
tests/test_utils.py::test_encoded[utf-8] PASSED
tests/test_utils.py::test_get_environment_proxies[environment0-proxies0] PASSED
tests/test_utils.py::test_get_environment_proxies[environment1-proxies1] PASSED
tests/test_utils.py::test_get_environment_proxies[environment10-proxies10] PASSED
tests/test_utils.py::test_get_environment_proxies[environment11-proxies11] PASSED
tests/test_utils.py::test_get_environment_proxies[environment2-proxies2] PASSED
tests/test_utils.py::test_get_environment_proxies[environment3-proxies3] PASSED
tests/test_utils.py::test_get_environment_proxies[environment4-proxies4] PASSED
tests/test_utils.py::test_get_environment_proxies[environment5-proxies5] PASSED
tests/test_utils.py::test_get_environment_proxies[environment6-proxies6] PASSED
tests/test_utils.py::test_get_environment_proxies[environment7-proxies7] PASSED
tests/test_utils.py::test_get_environment_proxies[environment8-proxies8] PASSED
tests/test_utils.py::test_get_environment_proxies[environment9-proxies9] PASSED
tests/test_utils.py::test_get_ssl_cert_file PASSED
tests/test_utils.py::test_guess_by_bom[utf-16-be-utf-16] PASSED
tests/test_utils.py::test_guess_by_bom[utf-16-le-utf-16] PASSED
tests/test_utils.py::test_guess_by_bom[utf-32-be-utf-32] PASSED
tests/test_utils.py::test_guess_by_bom[utf-32-le-utf-32] PASSED
tests/test_utils.py::test_is_https_redirect PASSED
tests/test_utils.py::test_is_not_https_redirect PASSED
tests/test_utils.py::test_is_not_https_redirect_if_not_default_ports PASSED
tests/test_utils.py::test_logging_redirect_chain PASSED
tests/test_utils.py::test_logging_request PASSED
tests/test_utils.py::test_logging_ssl PASSED
tests/test_utils.py::test_not_same_origin PASSED
tests/test_utils.py::test_obfuscate_sensitive_headers[headers0-output0] PASSED
tests/test_utils.py::test_obfuscate_sensitive_headers[headers1-output1] PASSED
tests/test_utils.py::test_obfuscate_sensitive_headers[headers2-output2] PASSED
tests/test_utils.py::test_parse_header_links[-expected4] PASSED
tests/test_utils.py::test_parse_header_links[<http:/.../front.jpeg>-expected1] PASSED
tests/test_utils.py::test_parse_header_links[<http:/.../front.jpeg>; rel=front; type="image/jpeg"-expected0] PASSED
tests/test_utils.py::test_parse_header_links[<http:/.../front.jpeg>; type="image/jpeg",<http://.../back.jpeg>;-expected3] PASSED
tests/test_utils.py::test_parse_header_links[<http:/.../front.jpeg>;-expected2] PASSED
tests/test_utils.py::test_pattern_priority PASSED
tests/test_utils.py::test_same_origin PASSED
tests/test_utils.py::test_url_matches[-https://example.com:123-True] PASSED
tests/test_utils.py::test_url_matches[all://-https://example.com:123-True] PASSED
tests/test_utils.py::test_url_matches[all://example.com-http://example.com-True] PASSED
tests/test_utils.py::test_url_matches[all://example.com-https://example.com-True] PASSED
tests/test_utils.py::test_url_matches[http://-http://example.com-True] PASSED
tests/test_utils.py::test_url_matches[http://-https://example.com-False] PASSED
tests/test_utils.py::test_url_matches[http://example.com-http://example.com-True] PASSED
tests/test_utils.py::test_url_matches[http://example.com-http://other.com-False] PASSED
tests/test_utils.py::test_url_matches[http://example.com-https://example.com-False] PASSED
tests/test_utils.py::test_url_matches[http://example.com:123-http://example.com-False] PASSED
tests/test_utils.py::test_url_matches[http://example.com:123-http://example.com:123-True] PASSED
tests/test_utils.py::test_url_matches[http://example.com:123-http://example.com:456-False] PASSED
tests/test_wsgi.py::test_logging PASSED
tests/test_wsgi.py::test_wsgi PASSED
tests/test_wsgi.py::test_wsgi_exc PASSED
tests/test_wsgi.py::test_wsgi_generator PASSED
tests/test_wsgi.py::test_wsgi_generator_empty PASSED
tests/test_wsgi.py::test_wsgi_http_error PASSED
tests/test_wsgi.py::test_wsgi_server_port[auto-http] PASSED
tests/test_wsgi.py::test_wsgi_server_port[auto-https] PASSED
tests/test_wsgi.py::test_wsgi_server_port[explicit-port] PASSED
tests/test_wsgi.py::test_wsgi_server_protocol PASSED
tests/test_wsgi.py::test_wsgi_upload PASSED
tests/test_wsgi.py::test_wsgi_upload_with_response_stream PASSED
=========================== short test summary info ============================
======== 721 passed, 1 skipped ========
<class 'FileExistsError'>: [Errno 17] File exists: 'test_safe_set_no_perms0'
  warnings.warn(
<class 'FileExistsError'>: [Errno 17] File exists: 'test_safe_delete_no_perms0'
  warnings.warn(
<class 'FileExistsError'>: [Errno 17] File exists: 'test_rmtree_errorhandler_rerai0'
  warnings.warn(
  warnings.warn(