pythonasyncioapiasyncfastapiframeworkjsonjson-schemaopenapiopenapi3pydanticpython-typespython3redocreststarletteswaggerswagger-uiuvicornweb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.3 KiB
73 lines
2.3 KiB
from typing import AsyncGenerator, Generator
|
|
|
|
from fastapi import Depends, FastAPI, Response
|
|
from fastapi.testclient import TestClient
|
|
|
|
app = FastAPI()
|
|
|
|
|
|
def dependency_gen(value: str) -> Generator[str, None, None]:
|
|
response: Response = yield
|
|
assert isinstance(response, Response)
|
|
assert response.status_code == 200
|
|
assert response.body == b'"response_get_dependency_gen"'
|
|
response.headers["X-Test"] = value
|
|
|
|
|
|
async def dependency_async_gen(value: str) -> AsyncGenerator[str, None]:
|
|
response = yield
|
|
assert isinstance(response, Response)
|
|
assert response.status_code == 200
|
|
assert response.body == b'"response_get_dependency_async_gen"'
|
|
response.headers["X-Test"] = value
|
|
|
|
|
|
async def sub_dependency_async_gen(value: str) -> AsyncGenerator[str, None]:
|
|
response = yield
|
|
assert isinstance(response, Response)
|
|
response.status_code = 201
|
|
assert response.body == b'"response_get_sub_dependency_async_gen"'
|
|
response.headers["X-Test"] = value
|
|
|
|
|
|
async def parent_dependency(result=Depends(sub_dependency_async_gen)):
|
|
return result
|
|
|
|
|
|
@app.get("/dependency-gen", dependencies=[Depends(dependency_gen)])
|
|
async def get_dependency_gen():
|
|
return "response_get_dependency_gen"
|
|
|
|
|
|
@app.get("/dependency-async-gen", dependencies=[Depends(dependency_async_gen)])
|
|
async def get_dependency_async_gen():
|
|
return "response_get_dependency_async_gen"
|
|
|
|
|
|
@app.get("/sub-dependency-gen", dependencies=[Depends(parent_dependency)])
|
|
async def get_sub_dependency_gen():
|
|
return "response_get_sub_dependency_async_gen"
|
|
|
|
|
|
client = TestClient(app)
|
|
|
|
|
|
def test_dependency_gen():
|
|
response = client.get("/dependency-gen", params={"value": "test"})
|
|
assert response.status_code == 200
|
|
assert response.content == b'"response_get_dependency_gen"'
|
|
assert response.headers["X-Test"] == "test"
|
|
|
|
|
|
def test_dependency_async_gen():
|
|
response = client.get("/dependency-async-gen", params={"value": "test"})
|
|
assert response.status_code == 200
|
|
assert response.content == b'"response_get_dependency_async_gen"'
|
|
assert response.headers["X-Test"] == "test"
|
|
|
|
|
|
def test_sub_dependency_gen():
|
|
response = client.get("/sub-dependency-gen", params={"value": "test"})
|
|
assert response.status_code == 201
|
|
assert response.content == b'"response_get_sub_dependency_async_gen"'
|
|
assert response.headers["X-Test"] == "test"
|
|
|