committed by
Matthew Batema
3 changed files with 90 additions and 1 deletions
@ -0,0 +1,63 @@ |
|||
import io |
|||
from typing import Any |
|||
|
|||
from fastapi import FastAPI, File, UploadFile |
|||
from fastapi.testclient import TestClient |
|||
from starlette.datastructures import UploadFile as StarletteUploadFile |
|||
|
|||
app = FastAPI() |
|||
|
|||
|
|||
@app.post("/uploadfile") |
|||
async def uploadfile(uploadfile: UploadFile = File(...)) -> dict[str, Any]: |
|||
return { |
|||
"filename": uploadfile.filename, |
|||
"is_fastapi_uploadfile": isinstance(uploadfile, UploadFile), |
|||
"is_starlette_uploadfile": isinstance(uploadfile, StarletteUploadFile), |
|||
"class": f"{uploadfile.__class__.__module__}.{uploadfile.__class__.__name__}", |
|||
} |
|||
|
|||
|
|||
@app.post("/uploadfiles") |
|||
async def uploadfiles( |
|||
uploadfiles: list[UploadFile] = File(...), |
|||
) -> list[dict[str, Any]]: |
|||
return [ |
|||
{ |
|||
"filename": uploadfile.filename, |
|||
"is_fastapi_uploadfile": isinstance(uploadfile, UploadFile), |
|||
"is_starlette_uploadfile": isinstance(uploadfile, StarletteUploadFile), |
|||
"class": f"{uploadfile.__class__.__module__}.{uploadfile.__class__.__name__}", |
|||
} |
|||
for uploadfile in uploadfiles |
|||
] |
|||
|
|||
|
|||
def test_uploadfile_type() -> None: |
|||
client = TestClient(app) |
|||
files = {"uploadfile": ("example.txt", io.BytesIO(b"test content"), "text/plain")} |
|||
response = client.post("/uploadfile/", files=files) |
|||
data = response.json() |
|||
|
|||
assert data["filename"] == "example.txt" |
|||
assert data["is_fastapi_uploadfile"] is True |
|||
assert data["is_starlette_uploadfile"] is True |
|||
assert data["class"].startswith("fastapi.") |
|||
|
|||
|
|||
def test_uploadfiles_type() -> None: |
|||
client = TestClient(app) |
|||
files = [ |
|||
("uploadfiles", ("example.txt", io.BytesIO(b"test content"), "text/plain")) |
|||
] |
|||
response = client.post("/uploadfiles/", files=files) |
|||
files_data = response.json() |
|||
|
|||
assert len(files_data) == 1 |
|||
|
|||
data = files_data[0] |
|||
|
|||
assert data["filename"] == "example.txt" |
|||
assert data["is_fastapi_uploadfile"] is True |
|||
assert data["is_starlette_uploadfile"] is True |
|||
assert data["class"].startswith("fastapi.") |
Loading…
Reference in new issue