Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions src/openai/_compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,19 +142,21 @@ def model_dump(
by_alias: bool | None = None,
) -> dict[str, Any]:
if (not PYDANTIC_V1) or hasattr(model, "model_dump"):
return model.model_dump(
kwargs: dict[str, Any] = dict(
mode=mode,
exclude=exclude,
exclude_unset=exclude_unset,
exclude_defaults=exclude_defaults,
# warnings are not supported in Pydantic v1
warnings=True if PYDANTIC_V1 else warnings,
by_alias=by_alias,
)
if by_alias is not None:
kwargs["by_alias"] = by_alias
return model.model_dump(**kwargs)
return cast(
"dict[str, Any]",
model.dict( # pyright: ignore[reportDeprecated, reportUnnecessaryCast]
exclude=exclude, exclude_unset=exclude_unset, exclude_defaults=exclude_defaults, by_alias=bool(by_alias)
exclude=exclude, exclude_unset=exclude_unset, exclude_defaults=exclude_defaults, by_alias=bool(by_alias) if by_alias is not None else by_alias
),
)

Expand Down
14 changes: 14 additions & 0 deletions tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,20 @@ def test_unknown_fields() -> None:
assert model_dump(m2) == {"foo": "foo", "unknown": {"foo_bar": True}}


def test_model_dump_by_alias_none() -> None:
"""Ensure model_dump does not crash when by_alias defaults to None (GH-2921)."""
m = BasicModel.construct(foo="hello")
# by_alias=None is the default — must not raise TypeError
result = model_dump(m)
assert result == {"foo": "hello"}
# Explicit by_alias=None must also work
result = model_dump(m, by_alias=None)
assert result == {"foo": "hello"}
# Explicit by_alias=True/False must still be forwarded
result = model_dump(m, by_alias=False)
assert result == {"foo": "hello"}


def test_strict_validation_unknown_fields() -> None:
class Model(BaseModel):
foo: str
Expand Down