Browse Source

Refine dataclass check

Change the `dataclasses.is_dataclass` overload used from
```
@overload
def is_dataclass(obj: object) -> TypeIs[DataclassInstance | type[DataclassInstance]]: ...
```
to
```
@overload
def is_dataclass(obj: type) -> TypeIs[type[DataclassInstance]]: ...
```

This fixes the following mypy errors:
```
fastapi/encoders.py:244: error: Argument 1 to "asdict" has incompatible type "DataclassInstance | type[DataclassInstance]"; expected "DataclassInstance"  [arg-type]
fastapi/routing.py:122: error: Argument 1 to "asdict" has incompatible type "DataclassInstance | type[DataclassInstance]"; expected "DataclassInstance"  [arg-type]
Found 2 errors in 2 files (checked 44 source files)
```
pull/12970/head
Tamir Duberstein 7 months ago
parent
commit
cfdb9476d4
Failed to extract signature
  1. 2
      fastapi/encoders.py
  2. 2
      fastapi/routing.py

2
fastapi/encoders.py

@ -240,7 +240,7 @@ def jsonable_encoder(
custom_encoder=encoders, custom_encoder=encoders,
sqlalchemy_safe=sqlalchemy_safe, sqlalchemy_safe=sqlalchemy_safe,
) )
if dataclasses.is_dataclass(obj): if dataclasses.is_dataclass(type(obj)):
obj_dict = dataclasses.asdict(obj) obj_dict = dataclasses.asdict(obj)
return jsonable_encoder( return jsonable_encoder(
obj_dict, obj_dict,

2
fastapi/routing.py

@ -118,7 +118,7 @@ def _prepare_response_content(
) )
for k, v in res.items() for k, v in res.items()
} }
elif dataclasses.is_dataclass(res): elif dataclasses.is_dataclass(type(res)):
return dataclasses.asdict(res) return dataclasses.asdict(res)
return res return res

Loading…
Cancel
Save