From 6646cb49398227766dfa0721eb316f4ab930055f Mon Sep 17 00:00:00 2001 From: svlandeg Date: Tue, 17 Mar 2026 15:20:48 +0100 Subject: [PATCH] add tests for both Color types --- fastapi/encoders.py | 3 ++- tests/test_jsonable_encoder.py | 35 ++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/fastapi/encoders.py b/fastapi/encoders.py index d34cd00976..43f24101b6 100644 --- a/fastapi/encoders.py +++ b/fastapi/encoders.py @@ -32,6 +32,7 @@ from ._compat import ( ) try: + # pydantic.color.Color is deprecated since v2.0b3, but supporting for bwd-compat from pydantic.color import Color # ty: ignore[deprecated] except ImportError: # pragma: no cover @@ -39,8 +40,8 @@ except ImportError: # pragma: no cover pass -# pydantic.color.Color is deprecated since v2.0b3 -> supporting the new one as well try: + # Supporting the new Color format for newer versions of Pydantic from pydantic_extra_types.color import Color as PyExtraColor except ImportError: # pragma: no cover diff --git a/tests/test_jsonable_encoder.py b/tests/test_jsonable_encoder.py index 595202beaf..c92cd8c7b8 100644 --- a/tests/test_jsonable_encoder.py +++ b/tests/test_jsonable_encoder.py @@ -311,3 +311,38 @@ def test_encode_deque_encodes_child_models(): def test_encode_pydantic_undefined(): data = {"value": Undefined} assert jsonable_encoder(data) == {"value": None} + + +@pytest.mark.filterwarnings("ignore::pydantic.warnings.PydanticDeprecatedSince20") +def test_deprecated_color(): + try: + from pydantic.color import Color + # from pydantic_extra_types.color import Color as ExtraColor + + class ModelWithColors(BaseModel): + color: Color + model_config = {"arbitrary_types_allowed": True} + + obj = ModelWithColors(color=Color("blue")) + encoded = jsonable_encoder(obj) + assert encoded == {"color": "blue"} + + except ImportError: + pass + +def test_new_color(): + try: + from pydantic_extra_types.color import Color + + class ModelWithColors(BaseModel): + color: Color + model_config = {"arbitrary_types_allowed": True} + + obj = ModelWithColors(color=Color("blue")) + encoded = jsonable_encoder(obj) + assert encoded == {"color": "blue"} + + except ImportError: + pass + +