From b8ab9ebd5c343229b0d4a816de1a57c9de9850a8 Mon Sep 17 00:00:00 2001 From: Jonathan Goodson Date: Thu, 29 Oct 2026 14:29:15 -0400 Subject: [PATCH] switch from httpx to httpx2 Switches completely from httpx to httpx per https://github.com/openapi-generators/openapi-python-client/discussions/1455 Uses the 'import httpx2 as httpx' alias import and does not change the existing API. Makes minimal changes to the dependencies and lockfiles. Consumers of this package relying on the transitive httpx dependency will need to specify or migrate. The utilized version of httpx2 is API-compatible with httpx 0.28.1, any any future change to that can be dealt with when it happens. --- .changeset/switch_from_httpx_to_httpx2.md | 19 +++ .../test_path_parameters.py | 2 +- .../my_test_api_client/client.py | 2 +- .../pyproject.toml | 2 +- .../api/default/get_weird_responses.py | 2 +- .../api/default/misc_metadata_escapes.py | 2 +- .../api/default/non_string_example.py | 2 +- .../api/default/property_escapes.py | 2 +- .../api/printtag_escape/with_braces_path.py | 2 +- .../escapes-client/escapes_client/client.py | 2 +- .../escapes-client/pyproject.toml | 2 +- .../enums/bool_enum_tests_bool_enum_post.py | 2 +- .../api/enums/int_enum_tests_int_enum_post.py | 2 +- .../api/tests/get_user_list.py | 2 +- .../api/tests/post_user_list.py | 2 +- .../my_enum_api_client/client.py | 2 +- .../my-enum-api-client/pyproject.toml | 2 +- .../api/bodies/json_like.py | 2 +- .../api/bodies/optional_body.py | 2 +- .../api/bodies/post_bodies_multiple.py | 2 +- .../my_test_api_client/api/bodies/refs.py | 2 +- .../api/config/content_type_override.py | 2 +- .../api/default/get_common_parameters.py | 2 +- .../api/default/get_models_allof.py | 2 +- .../get_models_oneof_with_required_const.py | 2 +- .../api/default/post_common_parameters.py | 2 +- .../post_types_unions_duplicate_types.py | 2 +- .../api/default/reserved_parameters.py | 2 +- .../defaults/defaults_tests_defaults_post.py | 2 +- .../enums/bool_enum_tests_bool_enum_post.py | 2 +- .../api/enums/int_enum_tests_int_enum_post.py | 2 +- .../api/location/get_location_header_types.py | 2 +- .../get_location_query_optionality.py | 2 +- .../api/naming/hyphen_in_path.py | 2 +- .../api/naming/mixed_case.py | 2 +- ...st_naming_property_conflict_with_import.py | 2 +- .../get_parameter_references_path_param.py | 2 +- ...lete_common_parameters_overriding_param.py | 2 +- .../get_common_parameters_overriding_param.py | 2 +- .../get_same_name_multiple_locations_param.py | 2 +- .../parameters/multiple_path_parameters.py | 2 +- .../api/responses/default_status_code.py | 2 +- ..._responses_unions_simple_before_complex.py | 2 +- .../api/responses/reference_response.py | 2 +- .../api/responses/status_code_patterns.py | 2 +- .../api/responses/status_code_precedence.py | 2 +- .../api/responses/text_response.py | 2 +- .../api/tag1/get_tag_with_number.py | 2 +- .../api/tag2/get_tag_with_number.py | 2 +- .../api/tests/callback_test.py | 2 +- .../api/tests/description_with_backslash.py | 2 +- .../api/tests/get_basic_list_of_booleans.py | 2 +- .../api/tests/get_basic_list_of_floats.py | 2 +- .../api/tests/get_basic_list_of_integers.py | 2 +- .../api/tests/get_basic_list_of_strings.py | 2 +- .../api/tests/get_user_list.py | 2 +- .../tests/json_body_tests_json_body_post.py | 2 +- .../no_response_tests_no_response_get.py | 2 +- .../octet_stream_tests_octet_stream_get.py | 2 +- .../octet_stream_tests_octet_stream_post.py | 2 +- .../api/tests/post_form_data.py | 2 +- .../api/tests/post_form_data_inline.py | 2 +- .../api/tests/post_tests_json_body_string.py | 2 +- .../api/tests/test_inline_objects.py | 2 +- ..._with_cookie_auth_token_with_cookie_get.py | 2 +- ...d_content_tests_unsupported_content_get.py | 2 +- .../tests/upload_file_tests_upload_post.py | 2 +- .../my_test_api_client/api/true_/false_.py | 2 +- .../my_test_api_client/client.py | 2 +- .../my-test-api-client/pyproject.toml | 2 +- .../test-3-1-features-client/pyproject.toml | 2 +- .../api/const/post_const_path.py | 2 +- .../api/prefix_items/post_prefix_items.py | 2 +- .../test_3_1_features_client/client.py | 2 +- .../metadata_snapshots/pdm.pyproject.toml | 2 +- .../metadata_snapshots/poetry.pyproject.toml | 2 +- .../metadata_snapshots/uv.pyproject.toml | 2 +- .../api/body/post_body_multipart.py | 2 +- .../api/parameters/post_parameters_header.py | 2 +- integration-tests/integration_tests/client.py | 2 +- integration-tests/pdm.lock | 74 +++++++---- integration-tests/pdm.minimal.lock | 121 +++++++---------- integration-tests/pyproject.toml | 2 +- openapi_python_client/__init__.py | 5 +- .../templates/client.py.jinja | 2 +- .../templates/endpoint_module.py.jinja | 2 +- .../templates/pyproject_pdm.toml.jinja | 2 +- .../templates/pyproject_poetry.toml.jinja | 2 +- .../templates/pyproject_uv.toml.jinja | 2 +- pdm.lock | 74 +++++++---- pdm.minimal.lock | 125 +++++++----------- pyproject.toml | 2 +- 92 files changed, 299 insertions(+), 291 deletions(-) create mode 100644 .changeset/switch_from_httpx_to_httpx2.md 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", ]