diff --git a/.changeset/switch_from_httpx_to_httpx2.md b/.changeset/switch_from_httpx_to_httpx2.md new file mode 100644 index 000000000..c9dc3955f --- /dev/null +++ b/.changeset/switch_from_httpx_to_httpx2.md @@ -0,0 +1,19 @@ +--- +default: major +--- + +# Switch from httpx to httpx2 + +For better or worse, httpx has not been actively maintained and hasn't seen a stable release in years. The Pydantic +org forked this into httpx and took over maintenance. The fork maintains API compatibility with the latest stable httpx +releast 0.28.1. + +Hypothetically httpx might see a 1.0 release at some point, I am not sure about the plans for that, even that doesn't +seem to be seeing much activity. Given the potential sensitivity of the generated clients, switching to a more-actively +maintained HTTP client library, including its switch to defaulting to the hopefully-better-updated system certificate +store, given recent issues with web PKI, is prudent. + +This generates all usages of httpx2 with `import httpx2 as httpx` rather than importing directly and changing all of +the use sites. This method is endorsed by the httpx2 migration guide and keeps things simpler and does not change any +of the existing API. The primary way this could break usage is for consumers that rely on this package bringing in +httpx as a dependency. diff --git a/end_to_end_tests/functional_tests/generated_code_execution/test_path_parameters.py b/end_to_end_tests/functional_tests/generated_code_execution/test_path_parameters.py index de03a2bd9..142b5dd7a 100644 --- a/end_to_end_tests/functional_tests/generated_code_execution/test_path_parameters.py +++ b/end_to_end_tests/functional_tests/generated_code_execution/test_path_parameters.py @@ -1,6 +1,6 @@ from unittest.mock import MagicMock -import httpx +import httpx2 as httpx from end_to_end_tests.functional_tests.helpers import ( with_generated_client_fixture, diff --git a/end_to_end_tests/golden-records/docstrings-on-attributes-golden-record/my_test_api_client/client.py b/end_to_end_tests/golden-records/docstrings-on-attributes-golden-record/my_test_api_client/client.py index a11b85c36..5b861ad1c 100644 --- a/end_to_end_tests/golden-records/docstrings-on-attributes-golden-record/my_test_api_client/client.py +++ b/end_to_end_tests/golden-records/docstrings-on-attributes-golden-record/my_test_api_client/client.py @@ -1,7 +1,7 @@ import ssl from typing import Any, Self -import httpx +import httpx2 as httpx from attrs import define, evolve, field diff --git a/end_to_end_tests/golden-records/docstrings-on-attributes-golden-record/pyproject.toml b/end_to_end_tests/golden-records/docstrings-on-attributes-golden-record/pyproject.toml index f2498ce1a..3064e78c4 100644 --- a/end_to_end_tests/golden-records/docstrings-on-attributes-golden-record/pyproject.toml +++ b/end_to_end_tests/golden-records/docstrings-on-attributes-golden-record/pyproject.toml @@ -11,7 +11,7 @@ include = ["my_test_api_client/py.typed"] [tool.poetry.dependencies] python = "^3.11" -httpx = ">=0.23.1,<0.29.0" +httpx2 = ">=2.16.0,<3" attrs = ">=22.2.0" [build-system] diff --git a/end_to_end_tests/golden-records/escapes-client/escapes_client/api/default/get_weird_responses.py b/end_to_end_tests/golden-records/escapes-client/escapes_client/api/default/get_weird_responses.py index 81a43a14b..49fb446f9 100644 --- a/end_to_end_tests/golden-records/escapes-client/escapes_client/api/default/get_weird_responses.py +++ b/end_to_end_tests/golden-records/escapes-client/escapes_client/api/default/get_weird_responses.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/escapes-client/escapes_client/api/default/misc_metadata_escapes.py b/end_to_end_tests/golden-records/escapes-client/escapes_client/api/default/misc_metadata_escapes.py index adabb42d1..70e1ce99e 100644 --- a/end_to_end_tests/golden-records/escapes-client/escapes_client/api/default/misc_metadata_escapes.py +++ b/end_to_end_tests/golden-records/escapes-client/escapes_client/api/default/misc_metadata_escapes.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any, cast -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/escapes-client/escapes_client/api/default/non_string_example.py b/end_to_end_tests/golden-records/escapes-client/escapes_client/api/default/non_string_example.py index 7090834e2..1be1527fb 100644 --- a/end_to_end_tests/golden-records/escapes-client/escapes_client/api/default/non_string_example.py +++ b/end_to_end_tests/golden-records/escapes-client/escapes_client/api/default/non_string_example.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/escapes-client/escapes_client/api/default/property_escapes.py b/end_to_end_tests/golden-records/escapes-client/escapes_client/api/default/property_escapes.py index 8a62c1764..83eda92b8 100644 --- a/end_to_end_tests/golden-records/escapes-client/escapes_client/api/default/property_escapes.py +++ b/end_to_end_tests/golden-records/escapes-client/escapes_client/api/default/property_escapes.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/escapes-client/escapes_client/api/printtag_escape/with_braces_path.py b/end_to_end_tests/golden-records/escapes-client/escapes_client/api/printtag_escape/with_braces_path.py index cbbbc3541..e540566aa 100644 --- a/end_to_end_tests/golden-records/escapes-client/escapes_client/api/printtag_escape/with_braces_path.py +++ b/end_to_end_tests/golden-records/escapes-client/escapes_client/api/printtag_escape/with_braces_path.py @@ -2,7 +2,7 @@ from typing import Any from urllib.parse import quote -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/escapes-client/escapes_client/client.py b/end_to_end_tests/golden-records/escapes-client/escapes_client/client.py index edb246d7e..99adb156b 100644 --- a/end_to_end_tests/golden-records/escapes-client/escapes_client/client.py +++ b/end_to_end_tests/golden-records/escapes-client/escapes_client/client.py @@ -1,7 +1,7 @@ import ssl from typing import Any, Self -import httpx +import httpx2 as httpx from attrs import define, evolve, field diff --git a/end_to_end_tests/golden-records/escapes-client/pyproject.toml b/end_to_end_tests/golden-records/escapes-client/pyproject.toml index 1a167e041..c6bbb3121 100644 --- a/end_to_end_tests/golden-records/escapes-client/pyproject.toml +++ b/end_to_end_tests/golden-records/escapes-client/pyproject.toml @@ -11,7 +11,7 @@ include = ["escapes_client/py.typed"] [tool.poetry.dependencies] python = "^3.11" -httpx = ">=0.23.1,<0.29.0" +httpx2 = ">=2.16.0,<3" attrs = ">=22.2.0" [build-system] diff --git a/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/api/enums/bool_enum_tests_bool_enum_post.py b/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/api/enums/bool_enum_tests_bool_enum_post.py index 53b574ebd..ca1d0f69c 100644 --- a/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/api/enums/bool_enum_tests_bool_enum_post.py +++ b/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/api/enums/bool_enum_tests_bool_enum_post.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/api/enums/int_enum_tests_int_enum_post.py b/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/api/enums/int_enum_tests_int_enum_post.py index f936104b5..3585dab0d 100644 --- a/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/api/enums/int_enum_tests_int_enum_post.py +++ b/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/api/enums/int_enum_tests_int_enum_post.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/api/tests/get_user_list.py b/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/api/tests/get_user_list.py index 15b821528..7319d2644 100644 --- a/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/api/tests/get_user_list.py +++ b/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/api/tests/get_user_list.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/api/tests/post_user_list.py b/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/api/tests/post_user_list.py index 911d81248..32305c8a5 100644 --- a/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/api/tests/post_user_list.py +++ b/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/api/tests/post_user_list.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/client.py b/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/client.py index edb246d7e..99adb156b 100644 --- a/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/client.py +++ b/end_to_end_tests/golden-records/my-enum-api-client/my_enum_api_client/client.py @@ -1,7 +1,7 @@ import ssl from typing import Any, Self -import httpx +import httpx2 as httpx from attrs import define, evolve, field diff --git a/end_to_end_tests/golden-records/my-enum-api-client/pyproject.toml b/end_to_end_tests/golden-records/my-enum-api-client/pyproject.toml index a7b5ed278..860a9fc92 100644 --- a/end_to_end_tests/golden-records/my-enum-api-client/pyproject.toml +++ b/end_to_end_tests/golden-records/my-enum-api-client/pyproject.toml @@ -11,7 +11,7 @@ include = ["my_enum_api_client/py.typed"] [tool.poetry.dependencies] python = "^3.11" -httpx = ">=0.23.1,<0.29.0" +httpx2 = ">=2.16.0,<3" attrs = ">=22.2.0" [build-system] diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/bodies/json_like.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/bodies/json_like.py index 1a4fc2fd9..a856ef6bb 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/bodies/json_like.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/bodies/json_like.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/bodies/optional_body.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/bodies/optional_body.py index 8402cf086..032e545a8 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/bodies/optional_body.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/bodies/optional_body.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/bodies/post_bodies_multiple.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/bodies/post_bodies_multiple.py index 9361e3f56..1f39fa374 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/bodies/post_bodies_multiple.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/bodies/post_bodies_multiple.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/bodies/refs.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/bodies/refs.py index 2e224bc8c..afe7ffeca 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/bodies/refs.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/bodies/refs.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/config/content_type_override.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/config/content_type_override.py index be06459be..77c6e73d6 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/config/content_type_override.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/config/content_type_override.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any, cast -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/get_common_parameters.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/get_common_parameters.py index c82055686..965193410 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/get_common_parameters.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/get_common_parameters.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/get_models_allof.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/get_models_allof.py index 3558ef1be..ff23d9c5a 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/get_models_allof.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/get_models_allof.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/get_models_oneof_with_required_const.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/get_models_oneof_with_required_const.py index 73911b7cd..865c70e3e 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/get_models_oneof_with_required_const.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/get_models_oneof_with_required_const.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/post_common_parameters.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/post_common_parameters.py index 27509b93a..46537b876 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/post_common_parameters.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/post_common_parameters.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/post_types_unions_duplicate_types.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/post_types_unions_duplicate_types.py index f6eabc4a7..74622ccf7 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/post_types_unions_duplicate_types.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/post_types_unions_duplicate_types.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/reserved_parameters.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/reserved_parameters.py index 687473903..21c566773 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/reserved_parameters.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/default/reserved_parameters.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/defaults/defaults_tests_defaults_post.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/defaults/defaults_tests_defaults_post.py index 9990c8b5e..d9e7d49aa 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/defaults/defaults_tests_defaults_post.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/defaults/defaults_tests_defaults_post.py @@ -2,7 +2,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/enums/bool_enum_tests_bool_enum_post.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/enums/bool_enum_tests_bool_enum_post.py index 53b574ebd..ca1d0f69c 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/enums/bool_enum_tests_bool_enum_post.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/enums/bool_enum_tests_bool_enum_post.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/enums/int_enum_tests_int_enum_post.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/enums/int_enum_tests_int_enum_post.py index 264c5af9e..a8fcba164 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/enums/int_enum_tests_int_enum_post.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/enums/int_enum_tests_int_enum_post.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/location/get_location_header_types.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/location/get_location_header_types.py index 20c2db527..4de45b807 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/location/get_location_header_types.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/location/get_location_header_types.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/location/get_location_query_optionality.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/location/get_location_query_optionality.py index 756e4a266..aa31044c0 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/location/get_location_query_optionality.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/location/get_location_query_optionality.py @@ -2,7 +2,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/naming/hyphen_in_path.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/naming/hyphen_in_path.py index d30d3c1ae..9eea29d42 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/naming/hyphen_in_path.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/naming/hyphen_in_path.py @@ -2,7 +2,7 @@ from typing import Any from urllib.parse import quote -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/naming/mixed_case.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/naming/mixed_case.py index 5945ad0de..796b4e314 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/naming/mixed_case.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/naming/mixed_case.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/naming/post_naming_property_conflict_with_import.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/naming/post_naming_property_conflict_with_import.py index 9e848f7af..def6a4c44 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/naming/post_naming_property_conflict_with_import.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/naming/post_naming_property_conflict_with_import.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameter_references/get_parameter_references_path_param.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameter_references/get_parameter_references_path_param.py index 801929db9..0dd76a3ec 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameter_references/get_parameter_references_path_param.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameter_references/get_parameter_references_path_param.py @@ -2,7 +2,7 @@ from typing import Any from urllib.parse import quote -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameters/delete_common_parameters_overriding_param.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameters/delete_common_parameters_overriding_param.py index 23c5b72da..4f487a60e 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameters/delete_common_parameters_overriding_param.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameters/delete_common_parameters_overriding_param.py @@ -2,7 +2,7 @@ from typing import Any from urllib.parse import quote -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameters/get_common_parameters_overriding_param.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameters/get_common_parameters_overriding_param.py index 3233fa605..c9ca4d16c 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameters/get_common_parameters_overriding_param.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameters/get_common_parameters_overriding_param.py @@ -2,7 +2,7 @@ from typing import Any from urllib.parse import quote -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameters/get_same_name_multiple_locations_param.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameters/get_same_name_multiple_locations_param.py index dd11f68ca..81a6681d6 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameters/get_same_name_multiple_locations_param.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameters/get_same_name_multiple_locations_param.py @@ -2,7 +2,7 @@ from typing import Any from urllib.parse import quote -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameters/multiple_path_parameters.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameters/multiple_path_parameters.py index d683b856c..ced73f53a 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameters/multiple_path_parameters.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/parameters/multiple_path_parameters.py @@ -2,7 +2,7 @@ from typing import Any from urllib.parse import quote -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/default_status_code.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/default_status_code.py index aa32c5393..354d006c6 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/default_status_code.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/default_status_code.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ...client import AuthenticatedClient, Client from ...types import Response diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/post_responses_unions_simple_before_complex.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/post_responses_unions_simple_before_complex.py index 022f30062..3c0e8d621 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/post_responses_unions_simple_before_complex.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/post_responses_unions_simple_before_complex.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/reference_response.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/reference_response.py index 77429a73b..a130a39e1 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/reference_response.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/reference_response.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/status_code_patterns.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/status_code_patterns.py index 796d3764f..b31ce155d 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/status_code_patterns.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/status_code_patterns.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/status_code_precedence.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/status_code_precedence.py index 11d832c87..8e00ec522 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/status_code_precedence.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/status_code_precedence.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ...client import AuthenticatedClient, Client from ...types import Response diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/text_response.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/text_response.py index 0f56f8c77..93256e9cd 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/text_response.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/responses/text_response.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tag1/get_tag_with_number.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tag1/get_tag_with_number.py index 3ee534c8f..b9789bee3 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tag1/get_tag_with_number.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tag1/get_tag_with_number.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tag2/get_tag_with_number.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tag2/get_tag_with_number.py index 3ee534c8f..b9789bee3 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tag2/get_tag_with_number.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tag2/get_tag_with_number.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/callback_test.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/callback_test.py index e806fe60c..d70cd8010 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/callback_test.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/callback_test.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/description_with_backslash.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/description_with_backslash.py index f173767ed..299e4f32a 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/description_with_backslash.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/description_with_backslash.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_basic_list_of_booleans.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_basic_list_of_booleans.py index 0a20d2f8f..3ab52337b 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_basic_list_of_booleans.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_basic_list_of_booleans.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any, cast -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_basic_list_of_floats.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_basic_list_of_floats.py index 0beb7b1dd..b0294e160 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_basic_list_of_floats.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_basic_list_of_floats.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any, cast -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_basic_list_of_integers.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_basic_list_of_integers.py index c0ca1e8c7..6be0a9a89 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_basic_list_of_integers.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_basic_list_of_integers.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any, cast -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_basic_list_of_strings.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_basic_list_of_strings.py index 4cb0a1bef..1e9fb387c 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_basic_list_of_strings.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_basic_list_of_strings.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any, cast -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_user_list.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_user_list.py index 5fcbd86e1..751bb5420 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_user_list.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/get_user_list.py @@ -2,7 +2,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/json_body_tests_json_body_post.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/json_body_tests_json_body_post.py index 5be950c77..e64777632 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/json_body_tests_json_body_post.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/json_body_tests_json_body_post.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/no_response_tests_no_response_get.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/no_response_tests_no_response_get.py index 34c4b54c0..730601dda 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/no_response_tests_no_response_get.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/no_response_tests_no_response_get.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/octet_stream_tests_octet_stream_get.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/octet_stream_tests_octet_stream_get.py index c08c3caca..8dfc5b4ce 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/octet_stream_tests_octet_stream_get.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/octet_stream_tests_octet_stream_get.py @@ -2,7 +2,7 @@ from io import BytesIO from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/octet_stream_tests_octet_stream_post.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/octet_stream_tests_octet_stream_post.py index 1dd936601..016caac55 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/octet_stream_tests_octet_stream_post.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/octet_stream_tests_octet_stream_post.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/post_form_data.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/post_form_data.py index 5e1ba06ed..d0bea09f7 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/post_form_data.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/post_form_data.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/post_form_data_inline.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/post_form_data_inline.py index 168fd9c82..1522499ce 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/post_form_data_inline.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/post_form_data_inline.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/post_tests_json_body_string.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/post_tests_json_body_string.py index 498d0572e..145eda63e 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/post_tests_json_body_string.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/post_tests_json_body_string.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any, cast -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/test_inline_objects.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/test_inline_objects.py index ea2e45c94..683e96094 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/test_inline_objects.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/test_inline_objects.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/token_with_cookie_auth_token_with_cookie_get.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/token_with_cookie_auth_token_with_cookie_get.py index 9ad310a2a..dc514b1d7 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/token_with_cookie_auth_token_with_cookie_get.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/token_with_cookie_auth_token_with_cookie_get.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/unsupported_content_tests_unsupported_content_get.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/unsupported_content_tests_unsupported_content_get.py index 409f6147a..efc79e7f6 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/unsupported_content_tests_unsupported_content_get.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/unsupported_content_tests_unsupported_content_get.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/upload_file_tests_upload_post.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/upload_file_tests_upload_post.py index 6339d61f3..9dbccb2d8 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/upload_file_tests_upload_post.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/tests/upload_file_tests_upload_post.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/true_/false_.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/true_/false_.py index d7713f03f..2ae7f732f 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/true_/false_.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/api/true_/false_.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/client.py b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/client.py index edb246d7e..99adb156b 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/client.py +++ b/end_to_end_tests/golden-records/my-test-api-client/my_test_api_client/client.py @@ -1,7 +1,7 @@ import ssl from typing import Any, Self -import httpx +import httpx2 as httpx from attrs import define, evolve, field diff --git a/end_to_end_tests/golden-records/my-test-api-client/pyproject.toml b/end_to_end_tests/golden-records/my-test-api-client/pyproject.toml index f2498ce1a..3064e78c4 100644 --- a/end_to_end_tests/golden-records/my-test-api-client/pyproject.toml +++ b/end_to_end_tests/golden-records/my-test-api-client/pyproject.toml @@ -11,7 +11,7 @@ include = ["my_test_api_client/py.typed"] [tool.poetry.dependencies] python = "^3.11" -httpx = ">=0.23.1,<0.29.0" +httpx2 = ">=2.16.0,<3" attrs = ">=22.2.0" [build-system] diff --git a/end_to_end_tests/golden-records/test-3-1-features-client/pyproject.toml b/end_to_end_tests/golden-records/test-3-1-features-client/pyproject.toml index 39efe0b62..92369312c 100644 --- a/end_to_end_tests/golden-records/test-3-1-features-client/pyproject.toml +++ b/end_to_end_tests/golden-records/test-3-1-features-client/pyproject.toml @@ -11,7 +11,7 @@ include = ["test_3_1_features_client/py.typed"] [tool.poetry.dependencies] python = "^3.11" -httpx = ">=0.23.1,<0.29.0" +httpx2 = ">=2.16.0,<3" attrs = ">=22.2.0" [build-system] diff --git a/end_to_end_tests/golden-records/test-3-1-features-client/test_3_1_features_client/api/const/post_const_path.py b/end_to_end_tests/golden-records/test-3-1-features-client/test_3_1_features_client/api/const/post_const_path.py index bf3472121..0343dc23b 100644 --- a/end_to_end_tests/golden-records/test-3-1-features-client/test_3_1_features_client/api/const/post_const_path.py +++ b/end_to_end_tests/golden-records/test-3-1-features-client/test_3_1_features_client/api/const/post_const_path.py @@ -2,7 +2,7 @@ from typing import Any, Literal, cast from urllib.parse import quote -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/test-3-1-features-client/test_3_1_features_client/api/prefix_items/post_prefix_items.py b/end_to_end_tests/golden-records/test-3-1-features-client/test_3_1_features_client/api/prefix_items/post_prefix_items.py index 5b114873e..5e073ee78 100644 --- a/end_to_end_tests/golden-records/test-3-1-features-client/test_3_1_features_client/api/prefix_items/post_prefix_items.py +++ b/end_to_end_tests/golden-records/test-3-1-features-client/test_3_1_features_client/api/prefix_items/post_prefix_items.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any, cast -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/end_to_end_tests/golden-records/test-3-1-features-client/test_3_1_features_client/client.py b/end_to_end_tests/golden-records/test-3-1-features-client/test_3_1_features_client/client.py index edb246d7e..99adb156b 100644 --- a/end_to_end_tests/golden-records/test-3-1-features-client/test_3_1_features_client/client.py +++ b/end_to_end_tests/golden-records/test-3-1-features-client/test_3_1_features_client/client.py @@ -1,7 +1,7 @@ import ssl from typing import Any, Self -import httpx +import httpx2 as httpx from attrs import define, evolve, field diff --git a/end_to_end_tests/metadata_snapshots/pdm.pyproject.toml b/end_to_end_tests/metadata_snapshots/pdm.pyproject.toml index c5262ff1e..4f25f16cd 100644 --- a/end_to_end_tests/metadata_snapshots/pdm.pyproject.toml +++ b/end_to_end_tests/metadata_snapshots/pdm.pyproject.toml @@ -6,7 +6,7 @@ authors = [] readme = "README.md" requires-python = ">=3.11" dependencies = [ - "httpx>=0.23.1,<0.29.0", + "httpx2>=2.16.0,<3", "attrs>=22.2.0", ] diff --git a/end_to_end_tests/metadata_snapshots/poetry.pyproject.toml b/end_to_end_tests/metadata_snapshots/poetry.pyproject.toml index 39efe0b62..92369312c 100644 --- a/end_to_end_tests/metadata_snapshots/poetry.pyproject.toml +++ b/end_to_end_tests/metadata_snapshots/poetry.pyproject.toml @@ -11,7 +11,7 @@ include = ["test_3_1_features_client/py.typed"] [tool.poetry.dependencies] python = "^3.11" -httpx = ">=0.23.1,<0.29.0" +httpx2 = ">=2.16.0,<3" attrs = ">=22.2.0" [build-system] diff --git a/end_to_end_tests/metadata_snapshots/uv.pyproject.toml b/end_to_end_tests/metadata_snapshots/uv.pyproject.toml index 553582723..edcaab2a9 100644 --- a/end_to_end_tests/metadata_snapshots/uv.pyproject.toml +++ b/end_to_end_tests/metadata_snapshots/uv.pyproject.toml @@ -6,7 +6,7 @@ authors = [] requires-python = ">=3.11" readme = "README.md" dependencies = [ - "httpx>=0.23.1,<0.29.0", + "httpx2>=2.16.0,<3", "attrs>=22.2.0", ] diff --git a/integration-tests/integration_tests/api/body/post_body_multipart.py b/integration-tests/integration_tests/api/body/post_body_multipart.py index 7ceef67b6..086363e3c 100644 --- a/integration-tests/integration_tests/api/body/post_body_multipart.py +++ b/integration-tests/integration_tests/api/body/post_body_multipart.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/integration-tests/integration_tests/api/parameters/post_parameters_header.py b/integration-tests/integration_tests/api/parameters/post_parameters_header.py index 190b7efe0..0a8dd62bf 100644 --- a/integration-tests/integration_tests/api/parameters/post_parameters_header.py +++ b/integration-tests/integration_tests/api/parameters/post_parameters_header.py @@ -1,7 +1,7 @@ from http import HTTPStatus from typing import Any -import httpx +import httpx2 as httpx from ... import errors from ...client import AuthenticatedClient, Client diff --git a/integration-tests/integration_tests/client.py b/integration-tests/integration_tests/client.py index edb246d7e..99adb156b 100644 --- a/integration-tests/integration_tests/client.py +++ b/integration-tests/integration_tests/client.py @@ -1,7 +1,7 @@ import ssl from typing import Any, Self -import httpx +import httpx2 as httpx from attrs import define, evolve, field diff --git a/integration-tests/pdm.lock b/integration-tests/pdm.lock index ffae47bd6..486edd6b4 100644 --- a/integration-tests/pdm.lock +++ b/integration-tests/pdm.lock @@ -4,8 +4,8 @@ [metadata] groups = ["default", "dev"] strategy = ["inherit_metadata"] -lock_version = "4.5.0" -content_hash = "sha256:eaf8c822d09eaa6cb6b1cb2ac7deb1746c24e404459a1a79f5c35df71b8883c7" +lock_version = "4.5.1" +content_hash = "sha256:983ad25626318f7e3eeb05fa1d4bc900f68d6b56a86faa1c565f00d47f53b582" [[metadata.targets]] requires_python = "~=3.11" @@ -16,6 +16,7 @@ version = "4.14.0" requires_python = ">=3.10" summary = "High-level concurrency and networking framework on top of asyncio or Trio" groups = ["default"] +marker = "sys_platform != \"emscripten\"" dependencies = [ "exceptiongroup>=1.0.2; python_version < \"3.11\"", "idna>=2.8", @@ -79,17 +80,6 @@ files = [ {file = "attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32"}, ] -[[package]] -name = "certifi" -version = "2026.6.17" -requires_python = ">=3.7" -summary = "Python package for providing Mozilla's CA Bundle." -groups = ["default"] -files = [ - {file = "certifi-2026.6.17-py3-none-any.whl", hash = "sha256:2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db"}, - {file = "certifi-2026.6.17.tar.gz", hash = "sha256:024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432"}, -] - [[package]] name = "colorama" version = "0.4.6" @@ -108,41 +98,57 @@ version = "0.16.0" requires_python = ">=3.8" summary = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" groups = ["default"] +marker = "sys_platform != \"emscripten\"" files = [ {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, ] [[package]] -name = "httpcore" -version = "1.0.9" -requires_python = ">=3.8" +name = "httpcore2" +version = "2.16.0" +requires_python = ">=3.11" summary = "A minimal low-level HTTP client." groups = ["default"] +marker = "sys_platform != \"emscripten\"" dependencies = [ - "certifi", "h11>=0.16", + "truststore>=0.10", ] files = [ - {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, - {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, + {file = "httpcore2-2.16.0-py3-none-any.whl", hash = "sha256:5c4358319f2602d984ad93182c9fee5160f22e9da7babdda870a5e7c4e2dc34f"}, + {file = "httpcore2-2.16.0.tar.gz", hash = "sha256:c72cd0413563b17e1cd8354677dff887466f8ec2551679759e93126534428643"}, ] [[package]] -name = "httpx" -version = "0.28.1" -requires_python = ">=3.8" +name = "httpx2" +version = "2.16.0" +requires_python = ">=3.11" summary = "The next generation HTTP client." groups = ["default"] dependencies = [ - "anyio", - "certifi", - "httpcore==1.*", - "idna", + "anyio>=4.10; sys_platform != \"emscripten\"", + "httpcore2==2.16.0; sys_platform != \"emscripten\"", + "httpx2-jsfetch; sys_platform == \"emscripten\" and python_version >= \"3.12\"", + "idna>=3.18", + "truststore>=0.10; sys_platform != \"emscripten\"", + "typing-extensions>=4.5.0; python_version < \"3.13\"", ] files = [ - {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, - {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, + {file = "httpx2-2.16.0-py3-none-any.whl", hash = "sha256:fd2c5d7909e8d86fe92d53020c310ca0e4e431b838c207c5754b9bbf0308d49a"}, + {file = "httpx2-2.16.0.tar.gz", hash = "sha256:0d54c98128e8f2ff7fbbde0fca8c359e5f032edeaaaac443cdb7f31f685bcd7f"}, +] + +[[package]] +name = "httpx2-jsfetch" +version = "1.0" +requires_python = ">=3.12" +summary = "httpx2 transports for Emscripten/Pyodide, backed by the JavaScript fetch API." +groups = ["default"] +marker = "sys_platform == \"emscripten\" and python_version >= \"3.12\"" +files = [ + {file = "httpx2_jsfetch-1.0-py3-none-any.whl", hash = "sha256:cb916b707601e69a07721aabc8f3f6659be3a6893bc1ff5c6f9e02241df2da32"}, + {file = "httpx2_jsfetch-1.0.tar.gz", hash = "sha256:70a0e3eabfef7cce5ad9c629f7d01ca05e418f586646f4ddf14782e4c1454c60"}, ] [[package]] @@ -389,6 +395,18 @@ files = [ {file = "pytest_asyncio-1.4.0.tar.gz", hash = "sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42"}, ] +[[package]] +name = "truststore" +version = "0.10.5" +requires_python = ">=3.10" +summary = "Verify certificates using native system trust stores" +groups = ["default"] +marker = "sys_platform != \"emscripten\"" +files = [ + {file = "truststore-0.10.5-py3-none-any.whl", hash = "sha256:9aaaedaefaf06d8b206278cf8b5012bc897f485a874503501e12d776df78951c"}, + {file = "truststore-0.10.5.tar.gz", hash = "sha256:30d36967ccaded5cbb38d602c433f53600036c79d502f4533a49b60a03bbefcd"}, +] + [[package]] name = "typing-extensions" version = "4.15.0" diff --git a/integration-tests/pdm.minimal.lock b/integration-tests/pdm.minimal.lock index 52a719b9f..c4891f66f 100644 --- a/integration-tests/pdm.minimal.lock +++ b/integration-tests/pdm.minimal.lock @@ -4,8 +4,8 @@ [metadata] groups = ["default", "dev"] strategy = ["direct_minimal_versions", "inherit_metadata"] -lock_version = "4.5.0" -content_hash = "sha256:eaf8c822d09eaa6cb6b1cb2ac7deb1746c24e404459a1a79f5c35df71b8883c7" +lock_version = "4.5.1" +content_hash = "sha256:983ad25626318f7e3eeb05fa1d4bc900f68d6b56a86faa1c565f00d47f53b582" [[metadata.targets]] requires_python = "~=3.11" @@ -16,6 +16,7 @@ version = "4.13.0" requires_python = ">=3.10" summary = "High-level concurrency and networking framework on top of asyncio or Trio" groups = ["default"] +marker = "sys_platform != \"emscripten\"" dependencies = [ "exceptiongroup>=1.0.2; python_version < \"3.11\"", "idna>=2.8", @@ -37,17 +38,6 @@ files = [ {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, ] -[[package]] -name = "certifi" -version = "2026.5.20" -requires_python = ">=3.7" -summary = "Python package for providing Mozilla's CA Bundle." -groups = ["default"] -files = [ - {file = "certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897"}, - {file = "certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d"}, -] - [[package]] name = "colorama" version = "0.4.6" @@ -62,61 +52,72 @@ files = [ [[package]] name = "h11" -version = "0.14.0" -requires_python = ">=3.7" +version = "0.16.0" +requires_python = ">=3.8" summary = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" groups = ["default"] -dependencies = [ - "typing-extensions; python_version < \"3.8\"", -] +marker = "sys_platform != \"emscripten\"" files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, + {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, + {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, ] [[package]] -name = "httpcore" -version = "0.16.3" -requires_python = ">=3.7" +name = "httpcore2" +version = "2.16.0" +requires_python = ">=3.11" summary = "A minimal low-level HTTP client." groups = ["default"] +marker = "sys_platform != \"emscripten\"" dependencies = [ - "anyio<5.0,>=3.0", - "certifi", - "h11<0.15,>=0.13", - "sniffio==1.*", + "h11>=0.16", + "truststore>=0.10", ] files = [ - {file = "httpcore-0.16.3-py3-none-any.whl", hash = "sha256:da1fb708784a938aa084bde4feb8317056c55037247c787bd7e19eb2c2949dc0"}, - {file = "httpcore-0.16.3.tar.gz", hash = "sha256:c5d6f04e2fc530f39e0c077e6a30caa53f1451096120f1f38b954afd0b17c0cb"}, + {file = "httpcore2-2.16.0-py3-none-any.whl", hash = "sha256:5c4358319f2602d984ad93182c9fee5160f22e9da7babdda870a5e7c4e2dc34f"}, + {file = "httpcore2-2.16.0.tar.gz", hash = "sha256:c72cd0413563b17e1cd8354677dff887466f8ec2551679759e93126534428643"}, ] [[package]] -name = "httpx" -version = "0.23.1" -requires_python = ">=3.7" +name = "httpx2" +version = "2.16.0" +requires_python = ">=3.11" summary = "The next generation HTTP client." groups = ["default"] dependencies = [ - "certifi", - "httpcore<0.17.0,>=0.15.0", - "rfc3986[idna2008]<2,>=1.3", - "sniffio", + "anyio>=4.10; sys_platform != \"emscripten\"", + "httpcore2==2.16.0; sys_platform != \"emscripten\"", + "httpx2-jsfetch; sys_platform == \"emscripten\" and python_version >= \"3.12\"", + "idna>=3.18", + "truststore>=0.10; sys_platform != \"emscripten\"", + "typing-extensions>=4.5.0; python_version < \"3.13\"", +] +files = [ + {file = "httpx2-2.16.0-py3-none-any.whl", hash = "sha256:fd2c5d7909e8d86fe92d53020c310ca0e4e431b838c207c5754b9bbf0308d49a"}, + {file = "httpx2-2.16.0.tar.gz", hash = "sha256:0d54c98128e8f2ff7fbbde0fca8c359e5f032edeaaaac443cdb7f31f685bcd7f"}, ] + +[[package]] +name = "httpx2-jsfetch" +version = "1.0" +requires_python = ">=3.12" +summary = "httpx2 transports for Emscripten/Pyodide, backed by the JavaScript fetch API." +groups = ["default"] +marker = "sys_platform == \"emscripten\" and python_version >= \"3.12\"" files = [ - {file = "httpx-0.23.1-py3-none-any.whl", hash = "sha256:0b9b1f0ee18b9978d637b0776bfd7f54e2ca278e063e3586d8f01cda89e042a8"}, - {file = "httpx-0.23.1.tar.gz", hash = "sha256:202ae15319be24efe9a8bd4ed4360e68fde7b38bcc2ce87088d416f026667d19"}, + {file = "httpx2_jsfetch-1.0-py3-none-any.whl", hash = "sha256:cb916b707601e69a07721aabc8f3f6659be3a6893bc1ff5c6f9e02241df2da32"}, + {file = "httpx2_jsfetch-1.0.tar.gz", hash = "sha256:70a0e3eabfef7cce5ad9c629f7d01ca05e418f586646f4ddf14782e4c1454c60"}, ] [[package]] name = "idna" -version = "3.17" +version = "3.20" requires_python = ">=3.9" summary = "Internationalized Domain Names in Applications (IDNA)" groups = ["default"] files = [ - {file = "idna-3.17-py3-none-any.whl", hash = "sha256:466e48829084efe2548012b855df21540b96f2e20e51bd124c851536556a592c"}, - {file = "idna-3.17.tar.gz", hash = "sha256:5eb0cb53bc467c12eadcf6de83163ad8527cec9416f44b9b61b19caedad2b87f"}, + {file = "idna-3.20-py3-none-any.whl", hash = "sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c"}, + {file = "idna-3.20.tar.gz", hash = "sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44"}, ] [[package]] @@ -228,39 +229,15 @@ files = [ ] [[package]] -name = "rfc3986" -version = "1.5.0" -summary = "Validating URI References per RFC 3986" -groups = ["default"] -files = [ - {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"}, - {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"}, -] - -[[package]] -name = "rfc3986" -version = "1.5.0" -extras = ["idna2008"] -summary = "Validating URI References per RFC 3986" -groups = ["default"] -dependencies = [ - "idna", - "rfc3986==1.5.0", -] -files = [ - {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"}, - {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"}, -] - -[[package]] -name = "sniffio" -version = "1.3.1" -requires_python = ">=3.7" -summary = "Sniff out which async library your code is running under" +name = "truststore" +version = "0.10.5" +requires_python = ">=3.10" +summary = "Verify certificates using native system trust stores" groups = ["default"] +marker = "sys_platform != \"emscripten\"" files = [ - {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, - {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, + {file = "truststore-0.10.5-py3-none-any.whl", hash = "sha256:9aaaedaefaf06d8b206278cf8b5012bc897f485a874503501e12d776df78951c"}, + {file = "truststore-0.10.5.tar.gz", hash = "sha256:30d36967ccaded5cbb38d602c433f53600036c79d502f4533a49b60a03bbefcd"}, ] [[package]] diff --git a/integration-tests/pyproject.toml b/integration-tests/pyproject.toml index 0811b4b42..b5770786e 100644 --- a/integration-tests/pyproject.toml +++ b/integration-tests/pyproject.toml @@ -6,7 +6,7 @@ authors = [] readme = "README.md" requires-python = ">=3.11,<4.0" dependencies = [ - "httpx>=0.23.1,<0.29.0", + "httpx2>=2.16.0,<3", "attrs>=22.2.0", ] diff --git a/openapi_python_client/__init__.py b/openapi_python_client/__init__.py index c3b766338..868a00967 100644 --- a/openapi_python_client/__init__.py +++ b/openapi_python_client/__init__.py @@ -10,8 +10,7 @@ from subprocess import CalledProcessError from typing import Any -import httpcore -import httpx +import httpx2 as httpx from jinja2 import BaseLoader, ChoiceLoader, Environment, FileSystemLoader, PackageLoader from ruamel.yaml import YAML from ruamel.yaml.error import YAMLError @@ -362,7 +361,7 @@ def _get_document(*, source: str | Path, timeout: int) -> dict[str, Any] | Gener else: # pragma: no cover content_type = mimetypes.guess_type(source, strict=True)[0] - except (httpx.HTTPError, httpcore.NetworkError): + except (httpx.HTTPError, httpx.NetworkError): return GeneratorError(header="Could not get OpenAPI document from provided URL") else: yaml_bytes = source.read_bytes() diff --git a/openapi_python_client/templates/client.py.jinja b/openapi_python_client/templates/client.py.jinja index a8c4ac5c1..b38fe38d8 100644 --- a/openapi_python_client/templates/client.py.jinja +++ b/openapi_python_client/templates/client.py.jinja @@ -2,7 +2,7 @@ import ssl from typing import Any, Self from attrs import define, field, evolve -import httpx +import httpx2 as httpx {% set attrs_info = { diff --git a/openapi_python_client/templates/endpoint_module.py.jinja b/openapi_python_client/templates/endpoint_module.py.jinja index 97f30a2b8..7e0e3e9ad 100644 --- a/openapi_python_client/templates/endpoint_module.py.jinja +++ b/openapi_python_client/templates/endpoint_module.py.jinja @@ -2,7 +2,7 @@ from http import HTTPStatus from typing import Any, cast from urllib.parse import quote -import httpx +import httpx2 as httpx from ...client import AuthenticatedClient, Client from ...types import Response, UNSET diff --git a/openapi_python_client/templates/pyproject_pdm.toml.jinja b/openapi_python_client/templates/pyproject_pdm.toml.jinja index e3f664f08..e773e5e6f 100644 --- a/openapi_python_client/templates/pyproject_pdm.toml.jinja +++ b/openapi_python_client/templates/pyproject_pdm.toml.jinja @@ -6,7 +6,7 @@ authors = [] readme = "README.md" requires-python = ">=3.11" dependencies = [ - "httpx>=0.23.1,<0.29.0", + "httpx2>=2.16.0,<3", "attrs>=22.2.0", ] diff --git a/openapi_python_client/templates/pyproject_poetry.toml.jinja b/openapi_python_client/templates/pyproject_poetry.toml.jinja index 8dc24f621..885f3d016 100644 --- a/openapi_python_client/templates/pyproject_poetry.toml.jinja +++ b/openapi_python_client/templates/pyproject_poetry.toml.jinja @@ -11,7 +11,7 @@ include = ["{{ package_name }}/py.typed"] [tool.poetry.dependencies] python = "^3.11" -httpx = ">=0.23.1,<0.29.0" +httpx2 = ">=2.16.0,<3" attrs = ">=22.2.0" [build-system] diff --git a/openapi_python_client/templates/pyproject_uv.toml.jinja b/openapi_python_client/templates/pyproject_uv.toml.jinja index c56e203d8..05ab6db7c 100644 --- a/openapi_python_client/templates/pyproject_uv.toml.jinja +++ b/openapi_python_client/templates/pyproject_uv.toml.jinja @@ -6,7 +6,7 @@ authors = [] requires-python = ">=3.11" readme = "README.md" dependencies = [ - "httpx>=0.23.1,<0.29.0", + "httpx2>=2.16.0,<3", "attrs>=22.2.0", ] diff --git a/pdm.lock b/pdm.lock index 4311788d7..3dacf0135 100644 --- a/pdm.lock +++ b/pdm.lock @@ -4,8 +4,8 @@ [metadata] groups = ["default", "dev"] strategy = ["inherit_metadata"] -lock_version = "4.5.0" -content_hash = "sha256:175e4c79af4623cfe2ff416ec1f952a29b9e4dc783133f62fa873455512ea5ca" +lock_version = "4.5.1" +content_hash = "sha256:ad81b43280d6a2622197e8479e5bbf338675678e0444f09462431bd9dfefdce7" [[metadata.targets]] requires_python = "~=3.11" @@ -41,6 +41,7 @@ version = "4.14.0" requires_python = ">=3.10" summary = "High-level concurrency and networking framework on top of asyncio or Trio" groups = ["default"] +marker = "sys_platform != \"emscripten\"" dependencies = [ "exceptiongroup>=1.0.2; python_version < \"3.11\"", "idna>=2.8", @@ -104,17 +105,6 @@ files = [ {file = "attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32"}, ] -[[package]] -name = "certifi" -version = "2026.6.17" -requires_python = ">=3.7" -summary = "Python package for providing Mozilla's CA Bundle." -groups = ["default"] -files = [ - {file = "certifi-2026.6.17-py3-none-any.whl", hash = "sha256:2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db"}, - {file = "certifi-2026.6.17.tar.gz", hash = "sha256:024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432"}, -] - [[package]] name = "colorama" version = "0.4.6" @@ -310,41 +300,57 @@ version = "0.16.0" requires_python = ">=3.8" summary = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" groups = ["default"] +marker = "sys_platform != \"emscripten\"" files = [ {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, ] [[package]] -name = "httpcore" -version = "1.0.9" -requires_python = ">=3.8" +name = "httpcore2" +version = "2.16.0" +requires_python = ">=3.11" summary = "A minimal low-level HTTP client." groups = ["default"] +marker = "sys_platform != \"emscripten\"" dependencies = [ - "certifi", "h11>=0.16", + "truststore>=0.10", ] files = [ - {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, - {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, + {file = "httpcore2-2.16.0-py3-none-any.whl", hash = "sha256:5c4358319f2602d984ad93182c9fee5160f22e9da7babdda870a5e7c4e2dc34f"}, + {file = "httpcore2-2.16.0.tar.gz", hash = "sha256:c72cd0413563b17e1cd8354677dff887466f8ec2551679759e93126534428643"}, ] [[package]] -name = "httpx" -version = "0.28.1" -requires_python = ">=3.8" +name = "httpx2" +version = "2.16.0" +requires_python = ">=3.11" summary = "The next generation HTTP client." groups = ["default"] dependencies = [ - "anyio", - "certifi", - "httpcore==1.*", - "idna", + "anyio>=4.10; sys_platform != \"emscripten\"", + "httpcore2==2.16.0; sys_platform != \"emscripten\"", + "httpx2-jsfetch; sys_platform == \"emscripten\" and python_version >= \"3.12\"", + "idna>=3.18", + "truststore>=0.10; sys_platform != \"emscripten\"", + "typing-extensions>=4.5.0; python_version < \"3.13\"", ] files = [ - {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, - {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, + {file = "httpx2-2.16.0-py3-none-any.whl", hash = "sha256:fd2c5d7909e8d86fe92d53020c310ca0e4e431b838c207c5754b9bbf0308d49a"}, + {file = "httpx2-2.16.0.tar.gz", hash = "sha256:0d54c98128e8f2ff7fbbde0fca8c359e5f032edeaaaac443cdb7f31f685bcd7f"}, +] + +[[package]] +name = "httpx2-jsfetch" +version = "1.0" +requires_python = ">=3.12" +summary = "httpx2 transports for Emscripten/Pyodide, backed by the JavaScript fetch API." +groups = ["default"] +marker = "sys_platform == \"emscripten\" and python_version >= \"3.12\"" +files = [ + {file = "httpx2_jsfetch-1.0-py3-none-any.whl", hash = "sha256:cb916b707601e69a07721aabc8f3f6659be3a6893bc1ff5c6f9e02241df2da32"}, + {file = "httpx2_jsfetch-1.0.tar.gz", hash = "sha256:70a0e3eabfef7cce5ad9c629f7d01ca05e418f586646f4ddf14782e4c1454c60"}, ] [[package]] @@ -1019,6 +1025,18 @@ files = [ {file = "syrupy-5.3.2.tar.gz", hash = "sha256:d4c9d4badb165a5694dcd869812717d899a8aa0b6f14f842437cb57c4ce09b3a"}, ] +[[package]] +name = "truststore" +version = "0.10.5" +requires_python = ">=3.10" +summary = "Verify certificates using native system trust stores" +groups = ["default"] +marker = "sys_platform != \"emscripten\"" +files = [ + {file = "truststore-0.10.5-py3-none-any.whl", hash = "sha256:9aaaedaefaf06d8b206278cf8b5012bc897f485a874503501e12d776df78951c"}, + {file = "truststore-0.10.5.tar.gz", hash = "sha256:30d36967ccaded5cbb38d602c433f53600036c79d502f4533a49b60a03bbefcd"}, +] + [[package]] name = "typer" version = "0.27.0" diff --git a/pdm.minimal.lock b/pdm.minimal.lock index ee5d2ee21..3b4c4dc8f 100644 --- a/pdm.minimal.lock +++ b/pdm.minimal.lock @@ -4,8 +4,8 @@ [metadata] groups = ["default", "dev"] strategy = ["direct_minimal_versions", "inherit_metadata"] -lock_version = "4.5.0" -content_hash = "sha256:175e4c79af4623cfe2ff416ec1f952a29b9e4dc783133f62fa873455512ea5ca" +lock_version = "4.5.1" +content_hash = "sha256:ad81b43280d6a2622197e8479e5bbf338675678e0444f09462431bd9dfefdce7" [[metadata.targets]] requires_python = "~=3.11" @@ -27,6 +27,7 @@ version = "4.14.2" requires_python = ">=3.10" summary = "High-level concurrency and networking framework on top of asyncio or Trio" groups = ["default"] +marker = "sys_platform != \"emscripten\"" dependencies = [ "exceptiongroup>=1.0.2; python_version < \"3.11\"", "idna>=2.8", @@ -48,17 +49,6 @@ files = [ {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, ] -[[package]] -name = "certifi" -version = "2026.7.22" -requires_python = ">=3.7" -summary = "Python package for providing Mozilla's CA Bundle." -groups = ["default"] -files = [ - {file = "certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775"}, - {file = "certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55"}, -] - [[package]] name = "click" version = "8.4.2" @@ -214,50 +204,61 @@ files = [ [[package]] name = "h11" -version = "0.14.0" -requires_python = ">=3.7" +version = "0.16.0" +requires_python = ">=3.8" summary = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" groups = ["default"] -dependencies = [ - "typing-extensions; python_version < \"3.8\"", -] +marker = "sys_platform != \"emscripten\"" files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, + {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, + {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, ] [[package]] -name = "httpcore" -version = "0.16.3" -requires_python = ">=3.7" +name = "httpcore2" +version = "2.16.0" +requires_python = ">=3.11" summary = "A minimal low-level HTTP client." groups = ["default"] +marker = "sys_platform != \"emscripten\"" dependencies = [ - "anyio<5.0,>=3.0", - "certifi", - "h11<0.15,>=0.13", - "sniffio==1.*", + "h11>=0.16", + "truststore>=0.10", ] files = [ - {file = "httpcore-0.16.3-py3-none-any.whl", hash = "sha256:da1fb708784a938aa084bde4feb8317056c55037247c787bd7e19eb2c2949dc0"}, - {file = "httpcore-0.16.3.tar.gz", hash = "sha256:c5d6f04e2fc530f39e0c077e6a30caa53f1451096120f1f38b954afd0b17c0cb"}, + {file = "httpcore2-2.16.0-py3-none-any.whl", hash = "sha256:5c4358319f2602d984ad93182c9fee5160f22e9da7babdda870a5e7c4e2dc34f"}, + {file = "httpcore2-2.16.0.tar.gz", hash = "sha256:c72cd0413563b17e1cd8354677dff887466f8ec2551679759e93126534428643"}, ] [[package]] -name = "httpx" -version = "0.23.1" -requires_python = ">=3.7" +name = "httpx2" +version = "2.16.0" +requires_python = ">=3.11" summary = "The next generation HTTP client." groups = ["default"] dependencies = [ - "certifi", - "httpcore<0.17.0,>=0.15.0", - "rfc3986[idna2008]<2,>=1.3", - "sniffio", + "anyio>=4.10; sys_platform != \"emscripten\"", + "httpcore2==2.16.0; sys_platform != \"emscripten\"", + "httpx2-jsfetch; sys_platform == \"emscripten\" and python_version >= \"3.12\"", + "idna>=3.18", + "truststore>=0.10; sys_platform != \"emscripten\"", + "typing-extensions>=4.5.0; python_version < \"3.13\"", +] +files = [ + {file = "httpx2-2.16.0-py3-none-any.whl", hash = "sha256:fd2c5d7909e8d86fe92d53020c310ca0e4e431b838c207c5754b9bbf0308d49a"}, + {file = "httpx2-2.16.0.tar.gz", hash = "sha256:0d54c98128e8f2ff7fbbde0fca8c359e5f032edeaaaac443cdb7f31f685bcd7f"}, ] + +[[package]] +name = "httpx2-jsfetch" +version = "1.0" +requires_python = ">=3.12" +summary = "httpx2 transports for Emscripten/Pyodide, backed by the JavaScript fetch API." +groups = ["default"] +marker = "sys_platform == \"emscripten\" and python_version >= \"3.12\"" files = [ - {file = "httpx-0.23.1-py3-none-any.whl", hash = "sha256:0b9b1f0ee18b9978d637b0776bfd7f54e2ca278e063e3586d8f01cda89e042a8"}, - {file = "httpx-0.23.1.tar.gz", hash = "sha256:202ae15319be24efe9a8bd4ed4360e68fde7b38bcc2ce87088d416f026667d19"}, + {file = "httpx2_jsfetch-1.0-py3-none-any.whl", hash = "sha256:cb916b707601e69a07721aabc8f3f6659be3a6893bc1ff5c6f9e02241df2da32"}, + {file = "httpx2_jsfetch-1.0.tar.gz", hash = "sha256:70a0e3eabfef7cce5ad9c629f7d01ca05e418f586646f4ddf14782e4c1454c60"}, ] [[package]] @@ -641,31 +642,6 @@ files = [ {file = "python-multipart-0.0.1.tar.gz", hash = "sha256:ae940d053341378e53937d6e7f2081d26b4435dbd53dcd901be73ef3d6ff70be"}, ] -[[package]] -name = "rfc3986" -version = "1.5.0" -summary = "Validating URI References per RFC 3986" -groups = ["default"] -files = [ - {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"}, - {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"}, -] - -[[package]] -name = "rfc3986" -version = "1.5.0" -extras = ["idna2008"] -summary = "Validating URI References per RFC 3986" -groups = ["default"] -dependencies = [ - "idna", - "rfc3986==1.5.0", -] -files = [ - {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"}, - {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"}, -] - [[package]] name = "rich" version = "15.0.0" @@ -783,17 +759,6 @@ files = [ {file = "shellingham-1.3.2.tar.gz", hash = "sha256:576c1982bea0ba82fb46c36feb951319d7f42214a82634233f58b40d858a751e"}, ] -[[package]] -name = "sniffio" -version = "1.3.1" -requires_python = ">=3.7" -summary = "Sniff out which async library your code is running under" -groups = ["default"] -files = [ - {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, - {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, -] - [[package]] name = "sortedcontainers" version = "2.4.0" @@ -818,6 +783,18 @@ files = [ {file = "syrupy-4.6.1.tar.gz", hash = "sha256:37a835c9ce7857eeef86d62145885e10b3cb9615bc6abeb4ce404b3f18e1bb36"}, ] +[[package]] +name = "truststore" +version = "0.10.5" +requires_python = ">=3.10" +summary = "Verify certificates using native system trust stores" +groups = ["default"] +marker = "sys_platform != \"emscripten\"" +files = [ + {file = "truststore-0.10.5-py3-none-any.whl", hash = "sha256:9aaaedaefaf06d8b206278cf8b5012bc897f485a874503501e12d776df78951c"}, + {file = "truststore-0.10.5.tar.gz", hash = "sha256:30d36967ccaded5cbb38d602c433f53600036c79d502f4533a49b60a03bbefcd"}, +] + [[package]] name = "typer" version = "0.16.1" diff --git a/pyproject.toml b/pyproject.toml index 91d4bf1fb..49970cf0e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ dependencies = [ "shellingham>=1.3.2,<2.0.0", "pydantic>=2.10,<3.0.0", "attrs>=22.2.0", - "httpx>=0.23.1,<0.29.0", + "httpx2>=2.16.0,<3", "ruamel.yaml>=0.18.6,<0.20.0", "ruff>=0.2", ]