This commit is contained in:
letmetry-oss 2026-03-16 14:10:51 +05:30 committed by GitHub
commit e8c8e29660
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 15 additions and 1 deletions

View File

@ -225,7 +225,7 @@ def jsonable_encoder(
exclude = set(exclude) # type: ignore[assignment] # ty: ignore[unused-ignore-comment]
if isinstance(obj, BaseModel):
obj_dict = obj.model_dump(
mode="json",
mode="python",
include=include,
exclude=exclude,
by_alias=by_alias,
@ -237,6 +237,7 @@ def jsonable_encoder(
obj_dict,
exclude_none=exclude_none,
exclude_defaults=exclude_defaults,
custom_encoder=custom_encoder,
sqlalchemy_safe=sqlalchemy_safe,
)
if dataclasses.is_dataclass(obj):

View File

@ -225,6 +225,19 @@ def test_custom_encoders():
assert encoded_instance2["dt_field"] == instance["dt_field"].isoformat()
def test_custom_encoders_applied_to_model_dump_python_values():
class ModelWithDecimal(BaseModel):
value: Decimal
instance = ModelWithDecimal(value=Decimal("1.23"))
encoded_instance = jsonable_encoder(
instance, custom_encoder={Decimal: lambda o: f"{o} custom"}
)
assert encoded_instance == {"value": "1.23 custom"}
def test_custom_enum_encoders():
def custom_enum_encoder(v: Enum):
return v.value.lower()