Skip to content

Commit f04a9a9

Browse files
committed
Fix
1 parent 0863bac commit f04a9a9

7 files changed

Lines changed: 27 additions & 9 deletions

File tree

docs/index.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,7 +1025,7 @@ <h3>Registering Models</h3>
10251025
file_name: str,
10261026
file_content: bytes,
10271027
obj: Model | None = None,
1028-
) -> None:
1028+
) -> str:
10291029
"""This method is used to upload files.
10301030

10311031
:params field_name: a name of field.
@@ -3550,7 +3550,7 @@ <h3>Methods and Attributes</h3>
35503550
"""
35513551
await self.orm_delete_obj(id)
35523552

3553-
async def get_file_url(self, field_name: str, value: str, obj: Model | None = None) -> str:
3553+
async def get_file_url(self, field_name: str, value: str, obj: Any | None = None) -> str:
35543554
"""Return the display URL for an uploaded file field.
35553555

35563556
Called during serialization for every ``UploadFile`` and ``UploadImage``
@@ -3587,7 +3587,7 @@ <h3>Methods and Attributes</h3>
35873587
field_name: str,
35883588
file_name: str,
35893589
file_content: bytes,
3590-
obj: Model | None = None,
3590+
obj: Any | None = None,
35913591
) -> str:
35923592
"""This method is used to upload files.
35933593

@@ -4233,7 +4233,7 @@ <h3>Registering Inlines</h3>
42334233
file_name: str,
42344234
file_content: bytes,
42354235
obj: Model | None = None,
4236-
) -> None:
4236+
) -> str:
42374237
"""This method is used to upload files.
42384238

42394239
:params field_name: a name of field.

examples/fastapi_tortoiseorm/example.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ async def upload_file(
115115
file_name: str,
116116
file_content: bytes,
117117
obj: Model | None = None,
118-
) -> None:
118+
) -> str:
119119
"""This method is used to upload files.
120120
121121
:params field_name: a name of field.

fastadmin/api/service.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,8 @@ async def upload_file(
355355
file_content,
356356
obj=obj,
357357
)
358+
except AdminApiException:
359+
raise
358360
except Exception as e:
359361
raise AdminApiException(500, detail=f"Error uploading file for {model}: {e}") from e
360362

fastadmin/models/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ async def delete_model(self, id: UUID | int | str) -> None:
547547
"""
548548
await self.orm_delete_obj(id)
549549

550-
async def get_file_url(self, field_name: str, value: str, obj: Model | None = None) -> str:
550+
async def get_file_url(self, field_name: str, value: str, obj: Any | None = None) -> str:
551551
"""Return the display URL for an uploaded file field.
552552
553553
Called during serialization for every ``UploadFile`` and ``UploadImage``
@@ -584,7 +584,7 @@ async def upload_file(
584584
field_name: str,
585585
file_name: str,
586586
file_content: bytes,
587-
obj: Model | None = None,
587+
obj: Any | None = None,
588588
) -> str:
589589
"""This method is used to upload files.
590590

fastadmin/models/orms/ponyorm.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ def orm_save_m2m_ids(self, obj: Any, field: str, ids: list[int | str | UUID]) ->
443443
@sync_to_async
444444
@db_session
445445
def serialize_obj_attributes(
446-
self, obj: Any, attributes_to_serizalize: list[ModelFieldWidgetSchema]
446+
self, obj: Any, attributes_to_serizalize: list[ModelFieldWidgetSchema], list_view: bool = False
447447
) -> dict[str, Any]:
448448
"""Serialize orm model obj attribute to dict.
449449

fastadmin/static/index.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/api/test_service.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,22 @@ async def test_upload_file_success_with_sync_upload_handler(monkeypatch):
559559
upload_mock.assert_called_once_with("file", "x.txt", b"content", obj=None)
560560

561561

562+
async def test_upload_file_404_when_id_provided_but_obj_not_found(monkeypatch):
563+
"""id supplied but orm_get_obj returns None — should raise 404, not 500."""
564+
monkeypatch.setattr("fastadmin.api.service.get_user_id_from_session_id", AsyncMock(return_value=1))
565+
admin_model = SimpleNamespace(
566+
set_context=Mock(),
567+
orm_get_obj=AsyncMock(return_value=None),
568+
upload_file=AsyncMock(return_value="/media/x.txt"),
569+
)
570+
monkeypatch.setattr("fastadmin.api.service.get_admin_or_admin_inline_model", lambda _model: admin_model)
571+
with pytest.raises(AdminApiException) as exc_info:
572+
await ApiService().upload_file("sid", "Event", "file", "x.txt", b"content", id=999)
573+
assert exc_info.value.status_code == 404
574+
assert "not found" in exc_info.value.detail
575+
admin_model.upload_file.assert_not_awaited()
576+
577+
562578
async def test_upload_file_500_upload_raises(monkeypatch):
563579
monkeypatch.setattr("fastadmin.api.service.get_user_id_from_session_id", AsyncMock(return_value=1))
564580
admin_model = SimpleNamespace(

0 commit comments

Comments
 (0)