From c260bbe9f953f583ca67062d54580ddb6cb61f9b Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Tue, 26 Aug 2025 23:11:51 +0000 Subject: [PATCH] fix: Make FileUrl.media_type work correctly with inline-snapshot --- pydantic_ai_slim/pydantic_ai/messages.py | 42 +++++++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/pydantic_ai_slim/pydantic_ai/messages.py b/pydantic_ai_slim/pydantic_ai/messages.py index 268e5bc053..01dc44d55c 100644 --- a/pydantic_ai_slim/pydantic_ai/messages.py +++ b/pydantic_ai_slim/pydantic_ai/messages.py @@ -111,7 +111,7 @@ class FileUrl(ABC): """ _media_type: Annotated[str | None, pydantic.Field(alias='media_type', default=None, exclude=True)] = field( - compare=False + compare=False, default=None ) def __init__( @@ -163,8 +163,16 @@ def __init__( vendor_metadata: dict[str, Any] | None = None, media_type: str | None = None, kind: Literal['video-url'] = 'video-url', + *, + # Required for inline-snapshot which expects all dataclass `__init__` methods to take all field names as kwargs. + _media_type: str | None = None, ) -> None: - super().__init__(url=url, force_download=force_download, vendor_metadata=vendor_metadata, media_type=media_type) + super().__init__( + url=url, + force_download=force_download, + vendor_metadata=vendor_metadata, + media_type=media_type or _media_type, + ) self.kind = kind def _infer_media_type(self) -> VideoMediaType: @@ -226,8 +234,16 @@ def __init__( vendor_metadata: dict[str, Any] | None = None, media_type: str | None = None, kind: Literal['audio-url'] = 'audio-url', + *, + # Required for inline-snapshot which expects all dataclass `__init__` methods to take all field names as kwargs. + _media_type: str | None = None, ) -> None: - super().__init__(url=url, force_download=force_download, vendor_metadata=vendor_metadata, media_type=media_type) + super().__init__( + url=url, + force_download=force_download, + vendor_metadata=vendor_metadata, + media_type=media_type or _media_type, + ) self.kind = kind def _infer_media_type(self) -> AudioMediaType: @@ -276,8 +292,16 @@ def __init__( vendor_metadata: dict[str, Any] | None = None, media_type: str | None = None, kind: Literal['image-url'] = 'image-url', + *, + # Required for inline-snapshot which expects all dataclass `__init__` methods to take all field names as kwargs. + _media_type: str | None = None, ) -> None: - super().__init__(url=url, force_download=force_download, vendor_metadata=vendor_metadata, media_type=media_type) + super().__init__( + url=url, + force_download=force_download, + vendor_metadata=vendor_metadata, + media_type=media_type or _media_type, + ) self.kind = kind def _infer_media_type(self) -> ImageMediaType: @@ -321,8 +345,16 @@ def __init__( vendor_metadata: dict[str, Any] | None = None, media_type: str | None = None, kind: Literal['document-url'] = 'document-url', + *, + # Required for inline-snapshot which expects all dataclass `__init__` methods to take all field names as kwargs. + _media_type: str | None = None, ) -> None: - super().__init__(url=url, force_download=force_download, vendor_metadata=vendor_metadata, media_type=media_type) + super().__init__( + url=url, + force_download=force_download, + vendor_metadata=vendor_metadata, + media_type=media_type or _media_type, + ) self.kind = kind def _infer_media_type(self) -> str: