diff --git a/fastapi/sse.py b/fastapi/sse.py index 55d668b4bd..fc0c31f140 100644 --- a/fastapi/sse.py +++ b/fastapi/sse.py @@ -264,9 +264,7 @@ def get_sse_data_type(annotation: Any) -> Any | None: if annotation is ServerSentEvent: return None meta = getattr(annotation, "__pydantic_generic_metadata__", None) - if not meta: - return None - args = meta.get("args", ()) + args = meta.get("args", ()) if meta else () if not args or isinstance(args[0], TypeVar): return None return args[0] diff --git a/tests/test_sse.py b/tests/test_sse.py index bc464c464e..8866a669e1 100644 --- a/tests/test_sse.py +++ b/tests/test_sse.py @@ -340,6 +340,15 @@ def test_get_sse_data_type_non_sse(): assert get_sse_data_type(None) is None +def test_get_sse_data_type_subclass_no_type_param(): + """get_sse_data_type returns None for a plain ServerSentEvent subclass.""" + + class MyEvent(ServerSentEvent): + pass + + assert get_sse_data_type(MyEvent) is None + + def test_generic_sse_construction_validates_data(): """ServerSentEvent[Item] requires data to be an Item.""" item = Item(name="Foo", description=None)