From 2ec5db843feed7b676b5ab783250a4b15dde8c55 Mon Sep 17 00:00:00 2001 From: Sajid Ali Date: Fri, 26 Jun 2026 14:41:22 -0400 Subject: [PATCH] wip: default to httpx2 --- .changeset/default_to_httpx2.md | 6 ++ .../README.md | 2 +- .../my_test_api_client/client.py | 2 +- .../pyproject.toml | 2 +- .../test_path_parameters.py | 2 +- end_to_end_tests/golden-record/README.md | 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 +- end_to_end_tests/golden-record/pyproject.toml | 2 +- .../literal-enums-golden-record/README.md | 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 +- .../pyproject.toml | 2 +- .../metadata_snapshots/pdm.pyproject.toml | 2 +- .../metadata_snapshots/poetry.pyproject.toml | 2 +- .../metadata_snapshots/uv.pyproject.toml | 2 +- .../test-3-1-golden-record/README.md | 2 +- .../test-3-1-golden-record/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 +- integration-tests/README.md | 2 +- .../api/body/post_body_multipart.py | 2 +- .../api/parameters/post_parameters_header.py | 2 +- integration-tests/integration_tests/client.py | 2 +- integration-tests/pyproject.toml | 2 +- openapi_python_client/__init__.py | 9 +-- openapi_python_client/cli.py | 9 ++- openapi_python_client/config.py | 17 +++++- openapi_python_client/parser/responses.py | 2 +- .../templates/README.md.jinja | 6 +- .../templates/client.py.jinja | 4 ++ .../templates/endpoint_module.py.jinja | 4 ++ .../templates/pyproject_pdm.toml.jinja | 4 ++ .../templates/pyproject_poetry.toml.jinja | 4 ++ .../templates/pyproject_uv.toml.jinja | 4 ++ pdm.lock | 59 ++++++++++--------- pyproject.toml | 2 +- tests/conftest.py | 3 +- 92 files changed, 171 insertions(+), 118 deletions(-) create mode 100644 .changeset/default_to_httpx2.md diff --git a/.changeset/default_to_httpx2.md b/.changeset/default_to_httpx2.md new file mode 100644 index 000000000..38eda431b --- /dev/null +++ b/.changeset/default_to_httpx2.md @@ -0,0 +1,6 @@ +--- +default: major +--- + +# Default to using httpx2 +# New configuration parameter to set httpx version via the CLI diff --git a/end_to_end_tests/docstrings-on-attributes-golden-record/README.md b/end_to_end_tests/docstrings-on-attributes-golden-record/README.md index 79b20f411..c2e107433 100644 --- a/end_to_end_tests/docstrings-on-attributes-golden-record/README.md +++ b/end_to_end_tests/docstrings-on-attributes-golden-record/README.md @@ -99,7 +99,7 @@ client = Client( You can even set the httpx client directly, but beware that this will override any existing settings (e.g., base_url): ```python -import httpx +import httpx2 as httpx from my_test_api_client import Client client = Client( diff --git a/end_to_end_tests/docstrings-on-attributes-golden-record/my_test_api_client/client.py b/end_to_end_tests/docstrings-on-attributes-golden-record/my_test_api_client/client.py index 190510bac..17d773c13 100644 --- a/end_to_end_tests/docstrings-on-attributes-golden-record/my_test_api_client/client.py +++ b/end_to_end_tests/docstrings-on-attributes-golden-record/my_test_api_client/client.py @@ -1,7 +1,7 @@ import ssl from typing import Any -import httpx +import httpx2 as httpx from attrs import define, evolve, field diff --git a/end_to_end_tests/docstrings-on-attributes-golden-record/pyproject.toml b/end_to_end_tests/docstrings-on-attributes-golden-record/pyproject.toml index f2498ce1a..9ff3c47fd 100644 --- a/end_to_end_tests/docstrings-on-attributes-golden-record/pyproject.toml +++ b/end_to_end_tests/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.5.0" attrs = ">=22.2.0" [build-system] 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 694788d96..0405649ae 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 import pytest from end_to_end_tests.functional_tests.helpers import ( diff --git a/end_to_end_tests/golden-record/README.md b/end_to_end_tests/golden-record/README.md index 79b20f411..c2e107433 100644 --- a/end_to_end_tests/golden-record/README.md +++ b/end_to_end_tests/golden-record/README.md @@ -99,7 +99,7 @@ client = Client( You can even set the httpx client directly, but beware that this will override any existing settings (e.g., base_url): ```python -import httpx +import httpx2 as httpx from my_test_api_client import Client client = Client( diff --git a/end_to_end_tests/golden-record/my_test_api_client/api/bodies/json_like.py b/end_to_end_tests/golden-record/my_test_api_client/api/bodies/json_like.py index 1a4fc2fd9..a856ef6bb 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/bodies/json_like.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/bodies/optional_body.py b/end_to_end_tests/golden-record/my_test_api_client/api/bodies/optional_body.py index 8402cf086..032e545a8 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/bodies/optional_body.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/bodies/post_bodies_multiple.py b/end_to_end_tests/golden-record/my_test_api_client/api/bodies/post_bodies_multiple.py index 9361e3f56..1f39fa374 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/bodies/post_bodies_multiple.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/bodies/refs.py b/end_to_end_tests/golden-record/my_test_api_client/api/bodies/refs.py index 2e224bc8c..afe7ffeca 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/bodies/refs.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/config/content_type_override.py b/end_to_end_tests/golden-record/my_test_api_client/api/config/content_type_override.py index be06459be..77c6e73d6 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/config/content_type_override.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/default/get_common_parameters.py b/end_to_end_tests/golden-record/my_test_api_client/api/default/get_common_parameters.py index c82055686..965193410 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/default/get_common_parameters.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/default/get_models_allof.py b/end_to_end_tests/golden-record/my_test_api_client/api/default/get_models_allof.py index 3558ef1be..ff23d9c5a 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/default/get_models_allof.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/default/get_models_oneof_with_required_const.py b/end_to_end_tests/golden-record/my_test_api_client/api/default/get_models_oneof_with_required_const.py index 73911b7cd..865c70e3e 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/default/get_models_oneof_with_required_const.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/default/post_common_parameters.py b/end_to_end_tests/golden-record/my_test_api_client/api/default/post_common_parameters.py index 27509b93a..46537b876 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/default/post_common_parameters.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/default/post_types_unions_duplicate_types.py b/end_to_end_tests/golden-record/my_test_api_client/api/default/post_types_unions_duplicate_types.py index f6eabc4a7..74622ccf7 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/default/post_types_unions_duplicate_types.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/default/reserved_parameters.py b/end_to_end_tests/golden-record/my_test_api_client/api/default/reserved_parameters.py index 687473903..21c566773 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/default/reserved_parameters.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/defaults/defaults_tests_defaults_post.py b/end_to_end_tests/golden-record/my_test_api_client/api/defaults/defaults_tests_defaults_post.py index 9990c8b5e..d9e7d49aa 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/defaults/defaults_tests_defaults_post.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/enums/bool_enum_tests_bool_enum_post.py b/end_to_end_tests/golden-record/my_test_api_client/api/enums/bool_enum_tests_bool_enum_post.py index 53b574ebd..ca1d0f69c 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/enums/bool_enum_tests_bool_enum_post.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/enums/int_enum_tests_int_enum_post.py b/end_to_end_tests/golden-record/my_test_api_client/api/enums/int_enum_tests_int_enum_post.py index 264c5af9e..a8fcba164 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/enums/int_enum_tests_int_enum_post.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/location/get_location_header_types.py b/end_to_end_tests/golden-record/my_test_api_client/api/location/get_location_header_types.py index 20c2db527..4de45b807 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/location/get_location_header_types.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/location/get_location_query_optionality.py b/end_to_end_tests/golden-record/my_test_api_client/api/location/get_location_query_optionality.py index 756e4a266..aa31044c0 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/location/get_location_query_optionality.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/naming/hyphen_in_path.py b/end_to_end_tests/golden-record/my_test_api_client/api/naming/hyphen_in_path.py index d30d3c1ae..9eea29d42 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/naming/hyphen_in_path.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/naming/mixed_case.py b/end_to_end_tests/golden-record/my_test_api_client/api/naming/mixed_case.py index 5945ad0de..796b4e314 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/naming/mixed_case.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/naming/post_naming_property_conflict_with_import.py b/end_to_end_tests/golden-record/my_test_api_client/api/naming/post_naming_property_conflict_with_import.py index 9e848f7af..def6a4c44 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/naming/post_naming_property_conflict_with_import.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/parameter_references/get_parameter_references_path_param.py b/end_to_end_tests/golden-record/my_test_api_client/api/parameter_references/get_parameter_references_path_param.py index 801929db9..0dd76a3ec 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/parameter_references/get_parameter_references_path_param.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/parameters/delete_common_parameters_overriding_param.py b/end_to_end_tests/golden-record/my_test_api_client/api/parameters/delete_common_parameters_overriding_param.py index 23c5b72da..4f487a60e 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/parameters/delete_common_parameters_overriding_param.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/parameters/get_common_parameters_overriding_param.py b/end_to_end_tests/golden-record/my_test_api_client/api/parameters/get_common_parameters_overriding_param.py index 3233fa605..c9ca4d16c 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/parameters/get_common_parameters_overriding_param.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/parameters/get_same_name_multiple_locations_param.py b/end_to_end_tests/golden-record/my_test_api_client/api/parameters/get_same_name_multiple_locations_param.py index dd11f68ca..81a6681d6 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/parameters/get_same_name_multiple_locations_param.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/parameters/multiple_path_parameters.py b/end_to_end_tests/golden-record/my_test_api_client/api/parameters/multiple_path_parameters.py index d683b856c..ced73f53a 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/parameters/multiple_path_parameters.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/responses/default_status_code.py b/end_to_end_tests/golden-record/my_test_api_client/api/responses/default_status_code.py index aa32c5393..354d006c6 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/responses/default_status_code.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/responses/post_responses_unions_simple_before_complex.py b/end_to_end_tests/golden-record/my_test_api_client/api/responses/post_responses_unions_simple_before_complex.py index 022f30062..3c0e8d621 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/responses/post_responses_unions_simple_before_complex.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/responses/reference_response.py b/end_to_end_tests/golden-record/my_test_api_client/api/responses/reference_response.py index 77429a73b..a130a39e1 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/responses/reference_response.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/responses/status_code_patterns.py b/end_to_end_tests/golden-record/my_test_api_client/api/responses/status_code_patterns.py index 796d3764f..b31ce155d 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/responses/status_code_patterns.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/responses/status_code_precedence.py b/end_to_end_tests/golden-record/my_test_api_client/api/responses/status_code_precedence.py index 11d832c87..8e00ec522 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/responses/status_code_precedence.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/responses/text_response.py b/end_to_end_tests/golden-record/my_test_api_client/api/responses/text_response.py index 0f56f8c77..93256e9cd 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/responses/text_response.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tag1/get_tag_with_number.py b/end_to_end_tests/golden-record/my_test_api_client/api/tag1/get_tag_with_number.py index 3ee534c8f..b9789bee3 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tag1/get_tag_with_number.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tag2/get_tag_with_number.py b/end_to_end_tests/golden-record/my_test_api_client/api/tag2/get_tag_with_number.py index 3ee534c8f..b9789bee3 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tag2/get_tag_with_number.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/callback_test.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/callback_test.py index e806fe60c..d70cd8010 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/callback_test.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/description_with_backslash.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/description_with_backslash.py index d9182317d..0120e9b63 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/description_with_backslash.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/get_basic_list_of_booleans.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/get_basic_list_of_booleans.py index 0a20d2f8f..3ab52337b 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/get_basic_list_of_booleans.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/get_basic_list_of_floats.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/get_basic_list_of_floats.py index 0beb7b1dd..b0294e160 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/get_basic_list_of_floats.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/get_basic_list_of_integers.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/get_basic_list_of_integers.py index c0ca1e8c7..6be0a9a89 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/get_basic_list_of_integers.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/get_basic_list_of_strings.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/get_basic_list_of_strings.py index 4cb0a1bef..1e9fb387c 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/get_basic_list_of_strings.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/get_user_list.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/get_user_list.py index 5fcbd86e1..751bb5420 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/get_user_list.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/json_body_tests_json_body_post.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/json_body_tests_json_body_post.py index 5be950c77..e64777632 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/json_body_tests_json_body_post.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/no_response_tests_no_response_get.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/no_response_tests_no_response_get.py index 34c4b54c0..730601dda 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/no_response_tests_no_response_get.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/octet_stream_tests_octet_stream_get.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/octet_stream_tests_octet_stream_get.py index c08c3caca..8dfc5b4ce 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/octet_stream_tests_octet_stream_get.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/octet_stream_tests_octet_stream_post.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/octet_stream_tests_octet_stream_post.py index 1dd936601..016caac55 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/octet_stream_tests_octet_stream_post.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/post_form_data.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/post_form_data.py index 5e1ba06ed..d0bea09f7 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/post_form_data.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/post_form_data_inline.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/post_form_data_inline.py index 168fd9c82..1522499ce 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/post_form_data_inline.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/post_tests_json_body_string.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/post_tests_json_body_string.py index 498d0572e..145eda63e 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/post_tests_json_body_string.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/test_inline_objects.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/test_inline_objects.py index ea2e45c94..683e96094 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/test_inline_objects.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/token_with_cookie_auth_token_with_cookie_get.py b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/token_with_cookie_auth_token_with_cookie_get.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/unsupported_content_tests_unsupported_content_get.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/unsupported_content_tests_unsupported_content_get.py index 409f6147a..efc79e7f6 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/unsupported_content_tests_unsupported_content_get.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/tests/upload_file_tests_upload_post.py b/end_to_end_tests/golden-record/my_test_api_client/api/tests/upload_file_tests_upload_post.py index 6339d61f3..9dbccb2d8 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/tests/upload_file_tests_upload_post.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/api/true_/false_.py b/end_to_end_tests/golden-record/my_test_api_client/api/true_/false_.py index d7713f03f..2ae7f732f 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/api/true_/false_.py +++ b/end_to_end_tests/golden-record/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-record/my_test_api_client/client.py b/end_to_end_tests/golden-record/my_test_api_client/client.py index 1b7055ab8..fb8ba63ed 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/client.py +++ b/end_to_end_tests/golden-record/my_test_api_client/client.py @@ -1,7 +1,7 @@ import ssl from typing import Any -import httpx +import httpx2 as httpx from attrs import define, evolve, field diff --git a/end_to_end_tests/golden-record/pyproject.toml b/end_to_end_tests/golden-record/pyproject.toml index f2498ce1a..9ff3c47fd 100644 --- a/end_to_end_tests/golden-record/pyproject.toml +++ b/end_to_end_tests/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.5.0" attrs = ">=22.2.0" [build-system] diff --git a/end_to_end_tests/literal-enums-golden-record/README.md b/end_to_end_tests/literal-enums-golden-record/README.md index 2c6268349..f2173ab95 100644 --- a/end_to_end_tests/literal-enums-golden-record/README.md +++ b/end_to_end_tests/literal-enums-golden-record/README.md @@ -99,7 +99,7 @@ client = Client( You can even set the httpx client directly, but beware that this will override any existing settings (e.g., base_url): ```python -import httpx +import httpx2 as httpx from my_enum_api_client import Client client = Client( diff --git a/end_to_end_tests/literal-enums-golden-record/my_enum_api_client/api/enums/bool_enum_tests_bool_enum_post.py b/end_to_end_tests/literal-enums-golden-record/my_enum_api_client/api/enums/bool_enum_tests_bool_enum_post.py index 53b574ebd..ca1d0f69c 100644 --- a/end_to_end_tests/literal-enums-golden-record/my_enum_api_client/api/enums/bool_enum_tests_bool_enum_post.py +++ b/end_to_end_tests/literal-enums-golden-record/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/literal-enums-golden-record/my_enum_api_client/api/enums/int_enum_tests_int_enum_post.py b/end_to_end_tests/literal-enums-golden-record/my_enum_api_client/api/enums/int_enum_tests_int_enum_post.py index f936104b5..3585dab0d 100644 --- a/end_to_end_tests/literal-enums-golden-record/my_enum_api_client/api/enums/int_enum_tests_int_enum_post.py +++ b/end_to_end_tests/literal-enums-golden-record/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/literal-enums-golden-record/my_enum_api_client/api/tests/get_user_list.py b/end_to_end_tests/literal-enums-golden-record/my_enum_api_client/api/tests/get_user_list.py index 15b821528..7319d2644 100644 --- a/end_to_end_tests/literal-enums-golden-record/my_enum_api_client/api/tests/get_user_list.py +++ b/end_to_end_tests/literal-enums-golden-record/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/literal-enums-golden-record/my_enum_api_client/api/tests/post_user_list.py b/end_to_end_tests/literal-enums-golden-record/my_enum_api_client/api/tests/post_user_list.py index 911d81248..32305c8a5 100644 --- a/end_to_end_tests/literal-enums-golden-record/my_enum_api_client/api/tests/post_user_list.py +++ b/end_to_end_tests/literal-enums-golden-record/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/literal-enums-golden-record/my_enum_api_client/client.py b/end_to_end_tests/literal-enums-golden-record/my_enum_api_client/client.py index 1b7055ab8..fb8ba63ed 100644 --- a/end_to_end_tests/literal-enums-golden-record/my_enum_api_client/client.py +++ b/end_to_end_tests/literal-enums-golden-record/my_enum_api_client/client.py @@ -1,7 +1,7 @@ import ssl from typing import Any -import httpx +import httpx2 as httpx from attrs import define, evolve, field diff --git a/end_to_end_tests/literal-enums-golden-record/pyproject.toml b/end_to_end_tests/literal-enums-golden-record/pyproject.toml index a7b5ed278..911a71786 100644 --- a/end_to_end_tests/literal-enums-golden-record/pyproject.toml +++ b/end_to_end_tests/literal-enums-golden-record/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.5.0" attrs = ">=22.2.0" [build-system] diff --git a/end_to_end_tests/metadata_snapshots/pdm.pyproject.toml b/end_to_end_tests/metadata_snapshots/pdm.pyproject.toml index c5262ff1e..3c998dc48 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.5.0", "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..84470ddd6 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.5.0" 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 26153e44a..60960fed0 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.5.0", "attrs>=22.2.0", ] diff --git a/end_to_end_tests/test-3-1-golden-record/README.md b/end_to_end_tests/test-3-1-golden-record/README.md index dbe8a5c1e..3fbf89f83 100644 --- a/end_to_end_tests/test-3-1-golden-record/README.md +++ b/end_to_end_tests/test-3-1-golden-record/README.md @@ -99,7 +99,7 @@ client = Client( You can even set the httpx client directly, but beware that this will override any existing settings (e.g., base_url): ```python -import httpx +import httpx2 as httpx from test_3_1_features_client import Client client = Client( diff --git a/end_to_end_tests/test-3-1-golden-record/pyproject.toml b/end_to_end_tests/test-3-1-golden-record/pyproject.toml index 39efe0b62..84470ddd6 100644 --- a/end_to_end_tests/test-3-1-golden-record/pyproject.toml +++ b/end_to_end_tests/test-3-1-golden-record/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.5.0" attrs = ">=22.2.0" [build-system] diff --git a/end_to_end_tests/test-3-1-golden-record/test_3_1_features_client/api/const/post_const_path.py b/end_to_end_tests/test-3-1-golden-record/test_3_1_features_client/api/const/post_const_path.py index bf3472121..0343dc23b 100644 --- a/end_to_end_tests/test-3-1-golden-record/test_3_1_features_client/api/const/post_const_path.py +++ b/end_to_end_tests/test-3-1-golden-record/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/test-3-1-golden-record/test_3_1_features_client/api/prefix_items/post_prefix_items.py b/end_to_end_tests/test-3-1-golden-record/test_3_1_features_client/api/prefix_items/post_prefix_items.py index 5b114873e..5e073ee78 100644 --- a/end_to_end_tests/test-3-1-golden-record/test_3_1_features_client/api/prefix_items/post_prefix_items.py +++ b/end_to_end_tests/test-3-1-golden-record/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/test-3-1-golden-record/test_3_1_features_client/client.py b/end_to_end_tests/test-3-1-golden-record/test_3_1_features_client/client.py index 1b7055ab8..fb8ba63ed 100644 --- a/end_to_end_tests/test-3-1-golden-record/test_3_1_features_client/client.py +++ b/end_to_end_tests/test-3-1-golden-record/test_3_1_features_client/client.py @@ -1,7 +1,7 @@ import ssl from typing import Any -import httpx +import httpx2 as httpx from attrs import define, evolve, field diff --git a/integration-tests/README.md b/integration-tests/README.md index f92972290..d3853c6ff 100644 --- a/integration-tests/README.md +++ b/integration-tests/README.md @@ -99,7 +99,7 @@ client = Client( You can even set the httpx client directly, but beware that this will override any existing settings (e.g., base_url): ```python -import httpx +import httpx2 as httpx from integration_tests import Client client = Client( 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 1b7055ab8..fb8ba63ed 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 -import httpx +import httpx2 as httpx from attrs import define, evolve, field diff --git a/integration-tests/pyproject.toml b/integration-tests/pyproject.toml index 0811b4b42..f08392378 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.5.0", "attrs>=22.2.0", ] diff --git a/openapi_python_client/__init__.py b/openapi_python_client/__init__.py index cb19d2947..e7925f558 100644 --- a/openapi_python_client/__init__.py +++ b/openapi_python_client/__init__.py @@ -10,8 +10,8 @@ from subprocess import CalledProcessError from typing import Any -import httpcore -import httpx +import httpcore2 +import httpx2 from jinja2 import BaseLoader, ChoiceLoader, Environment, FileSystemLoader, PackageLoader from ruamel.yaml import YAML from ruamel.yaml.error import YAMLError @@ -19,6 +19,7 @@ from openapi_python_client import utils from .config import Config, MetaType +from .config import HTTPXVersion as HTTPXVersion from .parser import GeneratorData, import_string_from_class from .parser.errors import ErrorLevel, GeneratorError from .parser.properties import LiteralEnumProperty @@ -346,14 +347,14 @@ def _get_document(*, source: str | Path, timeout: int) -> dict[str, Any] | Gener content_type: str | None if isinstance(source, str): try: - response = httpx.get(source, timeout=timeout) + response = httpx2.get(source, timeout=timeout) yaml_bytes = response.content if "content-type" in response.headers: content_type = response.headers["content-type"].split(";")[0] else: # pragma: no cover content_type = mimetypes.guess_type(source, strict=True)[0] - except (httpx.HTTPError, httpcore.NetworkError): + except (httpx2.HTTPError, httpcore2.NetworkError): return GeneratorError(header="Could not get OpenAPI document from provided URL") else: yaml_bytes = source.read_bytes() diff --git a/openapi_python_client/cli.py b/openapi_python_client/cli.py index 3972703ae..a216c2390 100644 --- a/openapi_python_client/cli.py +++ b/openapi_python_client/cli.py @@ -5,7 +5,7 @@ import typer -from openapi_python_client import MetaType, __version__ +from openapi_python_client import HTTPXVersion, MetaType, __version__ from openapi_python_client.config import Config, ConfigFile from openapi_python_client.parser.errors import ErrorLevel, GeneratorError, ParseError @@ -24,6 +24,7 @@ def _process_config( path: Path | None, config_path: Path | None, meta_type: MetaType, + httpx_version: HTTPXVersion, file_encoding: str, overwrite: bool, output_path: Path | None, @@ -54,7 +55,9 @@ def _process_config( except Exception as err: raise typer.BadParameter("Unable to parse config") from err - return Config.from_sources(config_file, meta_type, source, file_encoding, overwrite, output_path=output_path) + return Config.from_sources( + config_file, meta_type, httpx_version, source, file_encoding, overwrite, output_path=output_path + ) # noinspection PyUnusedLocal @@ -138,6 +141,7 @@ def generate( MetaType.POETRY, help="The type of metadata you want to generate.", ), + httpx_version: HTTPXVersion = typer.Option(HTTPXVersion.HTTPX2, help="Version of httpx to use"), file_encoding: str = typer.Option("utf-8", help="Encoding used when writing generated"), config_path: Path | None = typer.Option(None, "--config", help="Path to the config file to use"), fail_on_warning: bool = False, @@ -157,6 +161,7 @@ def generate( path=path, config_path=config_path, meta_type=meta, + httpx_version=httpx_version, file_encoding=file_encoding, overwrite=overwrite, output_path=output_path, diff --git a/openapi_python_client/config.py b/openapi_python_client/config.py index a30d2ddbf..cec786d95 100644 --- a/openapi_python_client/config.py +++ b/openapi_python_client/config.py @@ -1,6 +1,6 @@ import json import mimetypes -from enum import StrEnum +from enum import IntEnum, StrEnum from pathlib import Path from attr import define @@ -28,6 +28,18 @@ class MetaType(StrEnum): UV = "uv" +class HTTPXVersion(IntEnum): + """Version of HTTPX to use.""" + + HTTPX2 = 2 + HTTPX = 1 + + # default to httpx2 if not set + @classmethod + def _missing_(cls, value): + return cls.HTTPX2 + + class ConfigFile(BaseModel): """Contains any configurable values passed via a config file. @@ -65,6 +77,7 @@ class Config: """Contains all the config values for the generator, from files, defaults, and CLI arguments.""" meta_type: MetaType + httpx_version: HTTPXVersion class_overrides: dict[str, ClassOverride] project_name_override: str | None package_name_override: str | None @@ -86,6 +99,7 @@ class Config: def from_sources( config_file: ConfigFile, meta_type: MetaType, + httpx_version: HTTPXVersion, document_source: Path | str, file_encoding: str, overwrite: bool, @@ -106,6 +120,7 @@ def from_sources( config = Config( meta_type=meta_type, + httpx_version=httpx_version, class_overrides=config_file.class_overrides or {}, content_type_overrides=config_file.content_type_overrides or {}, project_name_override=config_file.project_name_override, diff --git a/openapi_python_client/parser/responses.py b/openapi_python_client/parser/responses.py index f05fbce75..7ab41d297 100644 --- a/openapi_python_client/parser/responses.py +++ b/openapi_python_client/parser/responses.py @@ -30,7 +30,7 @@ def __len__(self) -> int: class _ResponseSource(TypedDict): - """What data should be pulled from the httpx Response object""" + """What data should be pulled from the httpx(2) Response object""" attribute: str return_type: str diff --git a/openapi_python_client/templates/README.md.jinja b/openapi_python_client/templates/README.md.jinja index 98dcdf3a7..0fc4bf510 100644 --- a/openapi_python_client/templates/README.md.jinja +++ b/openapi_python_client/templates/README.md.jinja @@ -99,7 +99,11 @@ client = Client( You can even set the httpx client directly, but beware that this will override any existing settings (e.g., base_url): ```python +{% if config.httpx_version >1 %} +import httpx2 as httpx +{% else %} import httpx +{% endif %} from {{ package_name }} import Client client = Client( @@ -136,4 +140,4 @@ If you want to install this client into another project without publishing it (e 1. If that project is not using uv: 1. Build a wheel with `uv build --wheel`. 1. Install that wheel from the other project `pip install `. -{% endif %} \ No newline at end of file +{% endif %} diff --git a/openapi_python_client/templates/client.py.jinja b/openapi_python_client/templates/client.py.jinja index 90c90a210..de7df7288 100644 --- a/openapi_python_client/templates/client.py.jinja +++ b/openapi_python_client/templates/client.py.jinja @@ -2,7 +2,11 @@ import ssl from typing import Any from attrs import define, field, evolve +{% if config.httpx_version > 1 %} +import httpx2 as httpx +{% else %} import httpx +{% endif %} {% set attrs_info = { diff --git a/openapi_python_client/templates/endpoint_module.py.jinja b/openapi_python_client/templates/endpoint_module.py.jinja index 63e617778..12f44f590 100644 --- a/openapi_python_client/templates/endpoint_module.py.jinja +++ b/openapi_python_client/templates/endpoint_module.py.jinja @@ -2,7 +2,11 @@ from http import HTTPStatus from typing import Any, cast from urllib.parse import quote +{% if config.httpx_version > 1 %} +import httpx2 as httpx +{% else %} import httpx +{% endif %} 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 1ce8b3ac5..91c61958d 100644 --- a/openapi_python_client/templates/pyproject_pdm.toml.jinja +++ b/openapi_python_client/templates/pyproject_pdm.toml.jinja @@ -6,7 +6,11 @@ authors = [] readme = "README.md" requires-python = ">=3.11" dependencies = [ + {% if config.httpx_version > 1 %} + "httpx2>=2.5.0", + {% else %} "httpx>=0.23.1,<0.29.0", + {% endif %} "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 d06578b17..86b9f0763 100644 --- a/openapi_python_client/templates/pyproject_poetry.toml.jinja +++ b/openapi_python_client/templates/pyproject_poetry.toml.jinja @@ -11,7 +11,11 @@ include = ["{{ package_name }}/py.typed"] [tool.poetry.dependencies] python = "^3.11" +{% if config.httpx_version > 1 %} +httpx2 = ">=2.5.0" +{% else %} httpx = ">=0.23.1,<0.29.0" +{% endif %} 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 c14366320..b58f0c833 100644 --- a/openapi_python_client/templates/pyproject_uv.toml.jinja +++ b/openapi_python_client/templates/pyproject_uv.toml.jinja @@ -6,7 +6,11 @@ authors = [] requires-python = ">=3.11" readme = "README.md" dependencies = [ + {% if config.httpx_version > 1 %} + "httpx2>=2.5.0", + {% else %} "httpx>=0.23.1,<0.29.0", + {% endif %} "attrs>=22.2.0", ] diff --git a/pdm.lock b/pdm.lock index db1d32f23..9d0c866ea 100644 --- a/pdm.lock +++ b/pdm.lock @@ -5,7 +5,7 @@ groups = ["default", "dev"] strategy = ["inherit_metadata"] lock_version = "4.5.0" -content_hash = "sha256:5e4ec1b62724a3abfac73ca1f934560c05c04dd62f46592757671ed4fc3c1d3b" +content_hash = "sha256:938dc7583192e1a4dadd8fff6b5a773996c37a5fa0cac2550141cf3b002b3133" [[metadata.targets]] requires_python = "~=3.11" @@ -37,7 +37,7 @@ files = [ [[package]] name = "anyio" -version = "4.14.0" +version = "4.14.1" requires_python = ">=3.10" summary = "High-level concurrency and networking framework on top of asyncio or Trio" groups = ["default"] @@ -47,8 +47,8 @@ dependencies = [ "typing-extensions>=4.5; python_version < \"3.13\"", ] files = [ - {file = "anyio-4.14.0-py3-none-any.whl", hash = "sha256:dd9b7a2a9799ed6552fde617b2c5df02b7fdd7d88392fc48101e51bae46164d9"}, - {file = "anyio-4.14.0.tar.gz", hash = "sha256:b47c1f9ccf73e67021df785332508f99379c68fa7d0684e8e3492cb1d4b23f89"}, + {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, + {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, ] [[package]] @@ -104,17 +104,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" @@ -316,35 +305,36 @@ files = [ ] [[package]] -name = "httpcore" -version = "1.0.9" -requires_python = ">=3.8" +name = "httpcore2" +version = "2.5.0" +requires_python = ">=3.10" summary = "A minimal low-level HTTP client." groups = ["default"] 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.5.0-py3-none-any.whl", hash = "sha256:5ce35188de461d31e8d000bfb8ef8bf22c6c16587a211e5571deaa5e9bdf842a"}, + {file = "httpcore2-2.5.0.tar.gz", hash = "sha256:88aa170137c17328d5ac44234f9fd10706466d5fb347f3edac4d39b91137b09d"}, ] [[package]] -name = "httpx" -version = "0.28.1" -requires_python = ">=3.8" +name = "httpx2" +version = "2.5.0" +requires_python = ">=3.10" summary = "The next generation HTTP client." groups = ["default"] dependencies = [ "anyio", - "certifi", - "httpcore==1.*", - "idna", + "httpcore2==2.5.0", + "idna>=3.18", + "truststore>=0.10", + "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.5.0-py3-none-any.whl", hash = "sha256:3d2d4d9cf4b61f1a1f46a95947cfdb47e80cb56a2f91c6256ac8f58e4891df41"}, + {file = "httpx2-2.5.0.tar.gz", hash = "sha256:e2df9cb4611021527ff8a675b1c320b610a2ec397acc8d6fe6e91df2d9b33c29"}, ] [[package]] @@ -922,6 +912,17 @@ files = [ {file = "syrupy-5.3.2.tar.gz", hash = "sha256:d4c9d4badb165a5694dcd869812717d899a8aa0b6f14f842437cb57c4ce09b3a"}, ] +[[package]] +name = "truststore" +version = "0.10.4" +requires_python = ">=3.10" +summary = "Verify certificates using native system trust stores" +groups = ["default"] +files = [ + {file = "truststore-0.10.4-py3-none-any.whl", hash = "sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981"}, + {file = "truststore-0.10.4.tar.gz", hash = "sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301"}, +] + [[package]] name = "typer" version = "0.26.7" diff --git a/pyproject.toml b/pyproject.toml index b8cc67d1e..c1f826c2a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,9 +11,9 @@ 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", "ruamel.yaml>=0.18.6,<0.20.0", "ruff>=0.2", + "httpx2>=2.5.0", ] name = "openapi-python-client" version = "0.29.0" diff --git a/tests/conftest.py b/tests/conftest.py index 500ebf911..e32916afd 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -7,7 +7,7 @@ import pytest from mypy.semanal_shared import Protocol -from openapi_python_client import Config, MetaType, utils +from openapi_python_client import Config, HTTPXVersion, MetaType, utils from openapi_python_client import schema as oai from openapi_python_client.config import ConfigFile from openapi_python_client.parser.properties import ( @@ -39,6 +39,7 @@ def config() -> Config: return Config.from_sources( ConfigFile(), MetaType.POETRY, + HTTPXVersion.HTTPX2, document_source=Path("openapi.yaml"), file_encoding="utf-8", overwrite=False,