From 2bd775988f77df397aee3a1caf4de90146b7f363 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Fri, 5 Apr 2019 13:54:00 +0400 Subject: [PATCH] :sparkles: Add/refactor addditional responses, tests, docs --- .../tutorial/additional-responses/image01.png | Bin 0 -> 82427 bytes .../tutorial/bigger-applications/image01.png | Bin 61037 -> 77899 bytes docs/src/additional_responses/tutorial001.py | 23 + docs/src/additional_responses/tutorial002.py | 28 ++ docs/src/additional_responses/tutorial003.py | 37 ++ docs/src/additional_responses/tutorial004.py | 30 ++ docs/src/bigger_applications/app/main.py | 7 +- .../bigger_applications/app/routers/items.py | 13 +- docs/tutorial/additional-responses.md | 235 +++++++++ docs/tutorial/bigger-applications.md | 32 +- fastapi/applications.py | 47 +- fastapi/openapi/models.py | 23 - fastapi/openapi/utils.py | 50 +- fastapi/routing.py | 93 ++-- fastapi/utils.py | 6 +- mkdocs.yml | 1 + tests/test_additional_response_extra.py | 52 ++ tests/test_additional_responses.py | 471 ------------------ .../test_additional_responses/__init__.py | 0 .../test_tutorial001.py | 116 +++++ .../test_tutorial002.py | 115 +++++ .../test_tutorial003.py | 117 +++++ .../test_tutorial004.py | 118 +++++ .../test_bigger_applications/test_main.py | 49 +- 24 files changed, 1057 insertions(+), 606 deletions(-) create mode 100644 docs/img/tutorial/additional-responses/image01.png create mode 100644 docs/src/additional_responses/tutorial001.py create mode 100644 docs/src/additional_responses/tutorial002.py create mode 100644 docs/src/additional_responses/tutorial003.py create mode 100644 docs/src/additional_responses/tutorial004.py create mode 100644 docs/tutorial/additional-responses.md create mode 100644 tests/test_additional_response_extra.py delete mode 100644 tests/test_additional_responses.py create mode 100644 tests/test_tutorial/test_additional_responses/__init__.py create mode 100644 tests/test_tutorial/test_additional_responses/test_tutorial001.py create mode 100644 tests/test_tutorial/test_additional_responses/test_tutorial002.py create mode 100644 tests/test_tutorial/test_additional_responses/test_tutorial003.py create mode 100644 tests/test_tutorial/test_additional_responses/test_tutorial004.py diff --git a/docs/img/tutorial/additional-responses/image01.png b/docs/img/tutorial/additional-responses/image01.png new file mode 100644 index 0000000000000000000000000000000000000000..b69b9c7df2c98ef6c472ee5e7339ed82d5219111 GIT binary patch literal 82427 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

X-b=bXBX=Qd#9!2SzGqQ0f>?OMSefN+Z^KYZ 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

*F- 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�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 J-Pvom{{tDV4Ltw= diff --git a/docs/src/additional_responses/tutorial001.py b/docs/src/additional_responses/tutorial001.py new file mode 100644 index 0000000000..dfb0fc91e4 --- /dev/null +++ b/docs/src/additional_responses/tutorial001.py @@ -0,0 +1,23 @@ +from fastapi import FastAPI +from pydantic import BaseModel +from starlette.responses import JSONResponse + + +class Item(BaseModel): + id: str + value: str + + +class Message(BaseModel): + message: str + + +app = FastAPI() + + +@app.get("/items/{item_id}", response_model=Item, responses={404: {"model": Message}}) +async def read_item(item_id: str): + if item_id == "foo": + return {"id": "foo", "value": "there goes my hero"} + else: + return JSONResponse(status_code=404, content={"message": "Item not found"}) diff --git a/docs/src/additional_responses/tutorial002.py b/docs/src/additional_responses/tutorial002.py new file mode 100644 index 0000000000..bb19c89389 --- /dev/null +++ b/docs/src/additional_responses/tutorial002.py @@ -0,0 +1,28 @@ +from fastapi import FastAPI +from pydantic import BaseModel +from starlette.responses import FileResponse + + +class Item(BaseModel): + id: str + value: str + + +app = FastAPI() + + +@app.get( + "/items/{item_id}", + response_model=Item, + responses={ + 200: { + "content": {"image/png": {}}, + "description": "Return the JSON item or an image.", + } + }, +) +async def read_item(item_id: str, img: bool = None): + if img: + return FileResponse("image.png", media_type="image/png") + else: + return {"id": "foo", "value": "there goes my hero"} diff --git a/docs/src/additional_responses/tutorial003.py b/docs/src/additional_responses/tutorial003.py new file mode 100644 index 0000000000..bca3ba93ee --- /dev/null +++ b/docs/src/additional_responses/tutorial003.py @@ -0,0 +1,37 @@ +from fastapi import FastAPI +from pydantic import BaseModel +from starlette.responses import JSONResponse + + +class Item(BaseModel): + id: str + value: str + + +class Message(BaseModel): + message: str + + +app = FastAPI() + + +@app.get( + "/items/{item_id}", + response_model=Item, + responses={ + 404: {"model": Message, "description": "The item was not found"}, + 200: { + "description": "Item requested by ID", + "content": { + "application/json": { + "example": {"id": "bar", "value": "The bar tenders"} + } + }, + }, + }, +) +async def read_item(item_id: str): + if item_id == "foo": + return {"id": "foo", "value": "there goes my hero"} + else: + return JSONResponse(status_code=404, content={"message": "Item not found"}) diff --git a/docs/src/additional_responses/tutorial004.py b/docs/src/additional_responses/tutorial004.py new file mode 100644 index 0000000000..f7314ba8e1 --- /dev/null +++ b/docs/src/additional_responses/tutorial004.py @@ -0,0 +1,30 @@ +from fastapi import FastAPI +from pydantic import BaseModel +from starlette.responses import FileResponse + + +class Item(BaseModel): + id: str + value: str + + +responses = { + 404: {"description": "Item not found"}, + 302: {"description": "The item was moved"}, + 403: {"description": "Not enough privileges"}, +} + + +app = FastAPI() + + +@app.get( + "/items/{item_id}", + response_model=Item, + responses={**responses, 200: {"content": {"image/png": {}}}}, +) +async def read_item(item_id: str, img: bool = None): + if img: + return FileResponse("image.png", media_type="image/png") + else: + return {"id": "foo", "value": "there goes my hero"} diff --git a/docs/src/bigger_applications/app/main.py b/docs/src/bigger_applications/app/main.py index 4a12da4343..2cebd4244a 100644 --- a/docs/src/bigger_applications/app/main.py +++ b/docs/src/bigger_applications/app/main.py @@ -5,4 +5,9 @@ from .routers import items, users app = FastAPI() app.include_router(users.router) -app.include_router(items.router, prefix="/items", tags=["items"]) +app.include_router( + items.router, + prefix="/items", + tags=["items"], + responses={404: {"description": "Not found"}}, +) diff --git a/docs/src/bigger_applications/app/routers/items.py b/docs/src/bigger_applications/app/routers/items.py index 46a241902b..de5d9b645b 100644 --- a/docs/src/bigger_applications/app/routers/items.py +++ b/docs/src/bigger_applications/app/routers/items.py @@ -1,4 +1,4 @@ -from fastapi import APIRouter +from fastapi import APIRouter, HTTPException router = APIRouter() @@ -11,3 +11,14 @@ async def read_items(): @router.get("/{item_id}") async def read_item(item_id: str): return {"name": "Fake Specific Item", "item_id": item_id} + + +@router.put( + "/{item_id}", + tags=["custom"], + responses={403: {"description": "Operation forbidden"}}, +) +async def update_item(item_id: str): + if item_id != "foo": + raise HTTPException(status_code=403, detail="You can only update the item: foo") + return {"item_id": item_id, "name": "The Fighters"} diff --git a/docs/tutorial/additional-responses.md b/docs/tutorial/additional-responses.md new file mode 100644 index 0000000000..a74e431f8b --- /dev/null +++ b/docs/tutorial/additional-responses.md @@ -0,0 +1,235 @@ +!!! warning + This is a rather advanced topic. + + If you are starting with **FastAPI**, you might not need this. + +You can declare additional responses, with additional status codes, media types, descriptions, etc. + +Those additional responses will be included in the OpenAPI schema, so they will also appear in the API docs. + +But for those additional responses you have to make sure you return a `Response` like `JSONResponse` directly, with your status code and content. + +## Additional Response with `model` + +You can pass to your *path operation decorators* a parameter `responses`. + +It receives a `dict`, the keys are status codes for each response, like `200`, and the values are other `dict`s with the information for each of them. + +Each of those response `dict`s can have a key `model`, containing a Pydantic model, just like `response_model`. + +**FastAPI** will take that model, generate its JSON Schema and include it in the correct place in OpenAPI. + +For example, to declare another response with a status code `404` and a Pydantic model `Message`, you can write: + + +```Python hl_lines="18 23" +{!./src/additional_responses/tutorial001.py!} +``` + +!!! note + Have in mind that you have to return the `JSONResponse` directly. + +!!! info + The `model` key is not part of OpenAPI. + + **FastAPI** will take the Pydantic model from there, generate the `JSON Schema`, and put it in the correct place. + + The correct place is: + + * In the key `content`, that has as value another JSON object (`dict`) that contains: + * A key with the media type, e.g. `application/json`, that contains as value another JSON object, that contains: + * A key `schema`, that has as the value the JSON Schema from the model, here's the correct place. + * **FastAPI** adds a reference here to the global JSON Schemas in another place in your OpenAPI instead of including it directly. This way, other applications and clients can use those JSON Schemas directly, provide better code generation tools, etc. + +The generated responses in the OpenAPI for this *path operation* will be: + +```JSON hl_lines="3 4 5 6 7 8 9 10 11 12" +{ + "responses": { + "404": { + "description": "Additional Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Message" + } + } + } + }, + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Item" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } +} +``` + +The schemas are referenced to another place inside the OpenAPI schema: + +```JSON hl_lines="4 5 6 7 8 9 10 11 12 13 14 15 16" +{ + "components": { + "schemas": { + "Message": { + "title": "Message", + "required": [ + "message" + ], + "type": "object", + "properties": { + "message": { + "title": "Message", + "type": "string" + } + } + }, + "Item": { + "title": "Item", + "required": [ + "id", + "value" + ], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "value": { + "title": "Value", + "type": "string" + } + } + }, + "ValidationError": { + "title": "ValidationError", + "required": [ + "loc", + "msg", + "type" + ], + "type": "object", + "properties": { + "loc": { + "title": "Location", + "type": "array", + "items": { + "type": "string" + } + }, + "msg": { + "title": "Message", + "type": "string" + }, + "type": { + "title": "Error Type", + "type": "string" + } + } + }, + "HTTPValidationError": { + "title": "HTTPValidationError", + "type": "object", + "properties": { + "detail": { + "title": "Detail", + "type": "array", + "items": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + } + } +} +``` + +## Additional media types for the main response + +You can use this same `responses` parameter to add different media types for the same main response. + +For example, you can add an additional media type of `image/png`, declaring that your *path operation* can return a JSON object (with media type `application/json`) or a PNG image: + +```Python hl_lines="17 18 19 20 21 22 23 24 28" +{!./src/additional_responses/tutorial002.py!} +``` + +!!! note + Notice that you have to return the image using a `FileResponse` directly. + +## Combining information + +You can also combine response information from multiple places, including the `response_model`, `status_code`, and `responses` parameters. + +You can declare a `response_model`, using the default status code `200` (or a custom one if you need), and then declare additional information for that same response in `responses`, directly in the OpenAPI schema. + +**FastAPI** will keep the additional information from `responses`, and combine it with the JSON Schema from your model. + +For example, you can declare a response with a status code `404` that uses a Pydantic model and has a custom `description`. + +And a response with a status code `200` that uses your `response_model`, but includes a custom `example`: + +```Python hl_lines="20 21 22 23 24 25 26 27 28 29 30 31" +{!./src/additional_responses/tutorial003.py!} +``` + +It will all be combined and included in your OpenAPI, and shown in the API docs: + + + + +## Combine predefined responses and custom ones + +You might want to have some predefined responses that apply to many *path operations*, but you want to combine them with custom responses needed by each *path operation*. + +For those cases, you can use the Python technique of "unpacking" a `dict` with `**dict_to_unpack`: + +```Python +old_dict = { + "old key": "old value", + "second old key": "second old value", +} +new_dict = {**old_dict, "new key": "new value"} +``` + +Here, `new_dict` will contain all the key-value pairs from `old_dict` plus the new key-value pair: + +```Python +{ + "old key": "old value", + "second old key": "second old value", + "new key": "new value", +} +``` + +You can use that technique to re-use some predefined responses in your *path operations* and combine them with additional custom ones. + +For example: + +```Python hl_lines="11 12 13 14 15 24" +{!./src/additional_responses/tutorial004.py!} +``` + +## More information about OpenAPI responses + +To see what exactly you can include in the responses, you can check these sections in the OpenAPI specification: + +* OpenAPI Responses Object, it includes the `Response Object`. +* OpenAPI Response Object, you can include anything from this directly in each response inside your `responses` parameter. Including `description`, `headers`, `content` (inside of this is that you declare different media types and JSON Schemas), and `links`. diff --git a/docs/tutorial/bigger-applications.md b/docs/tutorial/bigger-applications.md index 611c848bd4..3bf406f3af 100644 --- a/docs/tutorial/bigger-applications.md +++ b/docs/tutorial/bigger-applications.md @@ -103,7 +103,17 @@ But let's say that this time we are more lazy. And we don't want to have to explicitly type `/items/` and `tags=["items"]` in every *path operation* (we will be able to do it later): -```Python hl_lines="6 11 16" +```Python hl_lines="6 11" +{!./src/bigger_applications/app/routers/items.py!} +``` + +### Add some custom `tags` and `responses` + +We are not adding the prefix `/items/` nor the `tags=["items"]` to add them later. + +But we can add custom `tags` and `responses` that will be applied to a specific *path operation*: + +```Python hl_lines="18 19" {!./src/bigger_applications/app/routers/items.py!} ``` @@ -192,7 +202,7 @@ So, to be able to use both of them in the same file, we import the submodules di Now, let's include the `router` from the submodule `users`: -```Python hl_lines="8" +```Python hl_lines="7" {!./src/bigger_applications/app/main.py!} ``` @@ -217,7 +227,7 @@ It will include all the routes from that router as part of it. So it won't affect performance. -### Include an `APIRouter` with a prefix +### Include an `APIRouter` with a `prefix`, `tags`, and `responses` Now, let's include the router form the `items` submodule. @@ -237,9 +247,11 @@ async def read_item(item_id: str): So, the prefix in this case would be `/items`. -And we can also add a list of `tags` that will be applied to all the *path operations* included in this router: +We can also add a list of `tags` that will be applied to all the *path operations* included in this router. + +And we can add predefined `responses` that will be included in all the *path operations* too. -```Python hl_lines="9" +```Python hl_lines="8 9 10 11 12 13" {!./src/bigger_applications/app/main.py!} ``` @@ -250,12 +262,18 @@ The end result is that the item paths are now: ...as we intended. -And they are marked with a list of tags that contain a single string `"items"`. +They will be marked with a list of tags that contain a single string `"items"`. + +The *path operation* that declared a `"custom"` tag will have both tags, `items` and `custom`. These "tags" are especially useful for the automatic interactive documentation systems (using OpenAPI). +And all of them will include the the predefined `responses`. + +The *path operation* that declared a custom `403` response will have both the predefined responses (`404`) and the `403` declared in it directly. + !!! check - The `prefix` and `tags` parameters are (as in many other cases) just a feature from **FastAPI** to help you avoid code duplication. + The `prefix`, `tags`, and `responses` parameters are (as in many other cases) just a feature from **FastAPI** to help you avoid code duplication. !!! tip diff --git a/fastapi/applications.py b/fastapi/applications.py index 9e9cf71264..b8387babd6 100644 --- a/fastapi/applications.py +++ b/fastapi/applications.py @@ -1,8 +1,7 @@ -from typing import Any, Callable, Dict, List, Optional, Type +from typing import Any, Callable, Dict, List, Optional, Type, Union from fastapi import routing from fastapi.openapi.docs import get_redoc_html, get_swagger_ui_html -from fastapi.openapi.models import AdditionalResponse from fastapi.openapi.utils import get_openapi from pydantic import BaseModel from starlette.applications import Starlette @@ -115,7 +114,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, methods: List[str] = None, operation_id: str = None, @@ -132,7 +131,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=methods, operation_id=operation_id, @@ -151,7 +150,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, methods: List[str] = None, operation_id: str = None, @@ -169,7 +168,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=methods, operation_id=operation_id, @@ -187,10 +186,10 @@ class FastAPI(Starlette): *, prefix: str = "", tags: List[str] = None, - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, ) -> None: self.router.include_router( - router, prefix=prefix, tags=tags, additional_responses=additional_responses + router, prefix=prefix, tags=tags, responses=responses or {} ) def get( @@ -203,7 +202,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -218,7 +217,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, operation_id=operation_id, include_in_schema=include_in_schema, @@ -236,7 +235,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -251,7 +250,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, operation_id=operation_id, include_in_schema=include_in_schema, @@ -269,7 +268,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -284,7 +283,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, operation_id=operation_id, include_in_schema=include_in_schema, @@ -302,7 +301,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -317,7 +316,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, operation_id=operation_id, include_in_schema=include_in_schema, @@ -335,7 +334,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -350,7 +349,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, operation_id=operation_id, include_in_schema=include_in_schema, @@ -368,7 +367,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -383,7 +382,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, operation_id=operation_id, include_in_schema=include_in_schema, @@ -401,7 +400,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -416,7 +415,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, operation_id=operation_id, include_in_schema=include_in_schema, @@ -434,7 +433,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -449,7 +448,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, operation_id=operation_id, include_in_schema=include_in_schema, diff --git a/fastapi/openapi/models.py b/fastapi/openapi/models.py index 1be51a1a58..6572c7c072 100644 --- a/fastapi/openapi/models.py +++ b/fastapi/openapi/models.py @@ -3,7 +3,6 @@ from enum import Enum from typing import Any, Dict, List, Optional, Union from pydantic import BaseModel, Schema as PSchema -from pydantic.fields import Field from pydantic.types import UrlStr try: @@ -344,28 +343,6 @@ class Tag(BaseModel): externalDocs: Optional[ExternalDocumentation] = None -class BaseAdditionalResponse(BaseModel): - description: str - content_type: Optional[str] = None - - -class AdditionalResponse(BaseAdditionalResponse): - status_code: int = PSchema( - ..., ge=100, le=540, title="Status Code", description="HTTP status code" - ) - # NOTE: waiting for pydantic to allow `typing.Type[BasicModel]` type - # so, going for `Any` and extra validation on - # routing methods - models: List[Any] = PSchema([], title="Additional Response Models") - - -class AdditionalResponseDescription(BaseAdditionalResponse): - schema_field: Optional[Field] = None - - class Config: - arbitrary_types_allowed = True - - class OpenAPI(BaseModel): openapi: str info: Info diff --git a/fastapi/openapi/utils.py b/fastapi/openapi/utils.py index 9b0e4ed30d..78175d841d 100644 --- a/fastapi/openapi/utils.py +++ b/fastapi/openapi/utils.py @@ -178,6 +178,23 @@ def get_openapi_path( definitions[ "HTTPValidationError" ] = validation_error_response_definition + if route.responses: + for (additional_status_code, response) in route.responses.items(): + assert isinstance( + response, dict + ), "An additional response must be a dict" + field = route.response_fields.get(additional_status_code) + if field: + response_schema, _ = field_schema( + field, model_name_map=model_name_map, ref_prefix=REF_PREFIX + ) + response.setdefault("content", {}).setdefault( + "application/json", {} + )["schema"] = response_schema + response.setdefault("description", "Additional Response") + operation.setdefault("responses", {})[ + str(additional_status_code) + ] = response status_code = str(route.status_code) response_schema = {"type": "string"} if lenient_issubclass(route.content_type, JSONResponse): @@ -189,13 +206,14 @@ def get_openapi_path( ) else: response_schema = {} - content = {route.content_type.media_type: {"schema": response_schema}} - operation["responses"] = { - status_code: { - "description": route.response_description, - "content": content, - } - } + operation.setdefault("responses", {}).setdefault(status_code, {})[ + "description" + ] = route.response_description + operation.setdefault("responses", {}).setdefault( + status_code, {} + ).setdefault("content", {}).setdefault(route.content_type.media_type, {})[ + "schema" + ] = response_schema if all_route_params or route.body_field: operation["responses"][str(HTTP_422_UNPROCESSABLE_ENTITY)] = { "description": "Validation Error", @@ -205,24 +223,6 @@ def get_openapi_path( } }, } - for add_response_code, add_response in route.additional_responses.items(): - add_response_schema: Dict[str, Any] = {} - if ( - add_response.content_type or route.content_type.media_type - ) == "application/json" and add_response.schema_field is not None: - add_response_schema, _ = field_schema( - add_response.schema_field, - model_name_map=model_name_map, - ref_prefix=REF_PREFIX, - ) - add_content = { - add_response.content_type - or route.content_type.media_type: {"schema": add_response_schema} - } - operation["responses"][str(add_response_code)] = { - "description": add_response.description, - "content": add_content, - } path[method.lower()] = operation return path, security_schemes, definitions diff --git a/fastapi/routing.py b/fastapi/routing.py index 9dfd316aba..cc6cac79b8 100644 --- a/fastapi/routing.py +++ b/fastapi/routing.py @@ -7,7 +7,6 @@ from fastapi import params from fastapi.dependencies.models import Dependant from fastapi.dependencies.utils import get_body_field, get_dependant, solve_dependencies from fastapi.encoders import jsonable_encoder -from fastapi.openapi.models import AdditionalResponse, AdditionalResponseDescription from fastapi.utils import UnconstrainedConfig from pydantic import BaseModel, Schema from pydantic.error_wrappers import ErrorWrapper, ValidationError @@ -105,7 +104,7 @@ class APIRoute(routing.Route): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, name: str = None, methods: List[str] = None, @@ -139,35 +138,30 @@ class APIRoute(routing.Route): self.summary = summary self.description = description or self.endpoint.__doc__ self.response_description = response_description - self.additional_responses: Dict[int, AdditionalResponseDescription] = {} - existed_codes = [self.status_code, 422] - for add_response in additional_responses: - assert ( - add_response.status_code not in existed_codes - ), f"(Duplicated Status Code): Response with status code [{add_response.status_code}] already defined!" - existed_codes.append(add_response.status_code) - response_models: List[Any] = [m for m in add_response.models] - schema_field = None - if ( - add_response.content_type == "application/json" - or lenient_issubclass(content_type, JSONResponse) - and len(response_models) - ): - schema_field = Field( - name=f"Additional_response_{add_response.status_code}", - type_=Union[tuple(response_models)], - class_validators=[], + self.responses = responses or {} + response_fields = {} + for additional_status_code, response in self.responses.items(): + assert isinstance(response, dict), "An additional response must be a dict" + model = response.get("model") + if model: + assert lenient_issubclass( + model, BaseModel + ), "A response model must be a Pydantic model" + response_name = f"Response_{additional_status_code}_{self.name}" + response_field = Field( + name=response_name, + type_=model, + class_validators=None, default=None, required=False, model_config=UnconstrainedConfig, schema=Schema(None), ) - add_resp_description = AdditionalResponseDescription( - description=add_response.description, - content_type=add_response.content_type, - schema_field=schema_field, - ) - self.additional_responses[add_response.status_code] = add_resp_description + response_fields[additional_status_code] = response_field + if response_fields: + self.response_fields: Dict[Union[int, str], Field] = response_fields + else: + self.response_fields = {} self.deprecated = deprecated if methods is None: methods = ["GET"] @@ -205,7 +199,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, methods: List[str] = None, operation_id: str = None, @@ -222,7 +216,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=methods, operation_id=operation_id, @@ -242,7 +236,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, methods: List[str] = None, operation_id: str = None, @@ -260,7 +254,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=methods, operation_id=operation_id, @@ -278,7 +272,7 @@ class APIRouter(routing.Router): *, prefix: str = "", tags: List[str] = None, - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, ) -> None: if prefix: assert prefix.startswith("/"), "A path prefix must start with '/'" @@ -287,6 +281,9 @@ class APIRouter(routing.Router): ), "A path prefix must not end with '/', as the routes will start with '/'" for route in router.routes: if isinstance(route, APIRoute): + if responses is None: + responses = {} + responses = {**responses, **route.responses} self.add_api_route( prefix + route.path, route.endpoint, @@ -296,7 +293,7 @@ class APIRouter(routing.Router): summary=route.summary, description=route.description, response_description=route.response_description, - additional_responses=additional_responses, + responses=responses, deprecated=route.deprecated, methods=route.methods, operation_id=route.operation_id, @@ -323,7 +320,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -338,7 +335,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=["GET"], operation_id=operation_id, @@ -357,7 +354,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -372,7 +369,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=["PUT"], operation_id=operation_id, @@ -391,7 +388,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -406,7 +403,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=["POST"], operation_id=operation_id, @@ -425,7 +422,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -440,7 +437,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=["DELETE"], operation_id=operation_id, @@ -459,7 +456,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -474,7 +471,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=["OPTIONS"], operation_id=operation_id, @@ -493,7 +490,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -508,7 +505,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=["HEAD"], operation_id=operation_id, @@ -527,7 +524,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -542,7 +539,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=["PATCH"], operation_id=operation_id, @@ -561,7 +558,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -576,7 +573,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=["TRACE"], operation_id=operation_id, diff --git a/fastapi/utils.py b/fastapi/utils.py index d0ffbb5d80..8eacb83d1e 100644 --- a/fastapi/utils.py +++ b/fastapi/utils.py @@ -30,10 +30,8 @@ def get_flat_models_from_routes( body_fields_from_routes.append(route.body_field) if route.response_field: responses_from_routes.append(route.response_field) - if route.additional_responses: - for _, add_response in route.additional_responses.items(): - if add_response.schema_field is not None: - responses_from_routes.append(add_response.schema_field) + if route.response_fields: + responses_from_routes.extend(route.response_fields.values()) flat_models = get_flat_models_from_fields( body_fields_from_routes + responses_from_routes ) diff --git a/mkdocs.yml b/mkdocs.yml index 2760194af8..e453323e83 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -44,6 +44,7 @@ nav: - Path Operation Configuration: 'tutorial/path-operation-configuration.md' - Path Operation Advanced Configuration: 'tutorial/path-operation-advanced-configuration.md' - Custom Response: 'tutorial/custom-response.md' + - Additional Responses: 'tutorial/additional-responses.md' - Dependencies: - First Steps: 'tutorial/dependencies/first-steps.md' - Classes as Dependencies: 'tutorial/dependencies/classes-as-dependencies.md' diff --git a/tests/test_additional_response_extra.py b/tests/test_additional_response_extra.py new file mode 100644 index 0000000000..45afcc0e5c --- /dev/null +++ b/tests/test_additional_response_extra.py @@ -0,0 +1,52 @@ +from fastapi import APIRouter, FastAPI +from starlette.testclient import TestClient + +router = APIRouter() + +sub_router = APIRouter() + +app = FastAPI() + + +@sub_router.get("/") +def read_item(): + return {"id": "foo"} + + +router.include_router(sub_router, prefix="/items") + +app.include_router(router) + + +openapi_schema = { + "openapi": "3.0.2", + "info": {"title": "Fast API", "version": "0.1.0"}, + "paths": { + "/items/": { + "get": { + "responses": { + "200": { + "description": "Successful Response", + "content": {"application/json": {"schema": {}}}, + } + }, + "summary": "Read Item Get", + "operationId": "read_item_items__get", + } + } + }, +} + +client = TestClient(app) + + +def test_openapi_schema(): + response = client.get("/openapi.json") + assert response.status_code == 200 + assert response.json() == openapi_schema + + +def test_path_operation(): + response = client.get("/items/") + assert response.status_code == 200 + assert response.json() == {"id": "foo"} diff --git a/tests/test_additional_responses.py b/tests/test_additional_responses.py deleted file mode 100644 index fa46d3ccbb..0000000000 --- a/tests/test_additional_responses.py +++ /dev/null @@ -1,471 +0,0 @@ -import pytest -from fastapi import FastAPI -from fastapi.openapi.models import AdditionalResponse -from pydantic import BaseModel -from starlette.responses import JSONResponse -from starlette.testclient import TestClient - -app = FastAPI() - - -class Item(BaseModel): - name: str - price: float = None - - -class Response400(BaseModel): - """HTTP 4xx Response Schema""" - - title: str - detail: str - error_code: int # functional error ref - - -response_403 = AdditionalResponse( - status_code=403, description="Forbidden", models=[Response400] -) - -additional_responses = [response_403] - - -@app.api_route( - "/items/{item_id}", methods=["GET"], additional_responses=additional_responses -) -def get_items(item_id: str): - return {"item_id": item_id} - - -def get_not_decorated(item_id: str): - return {"item_id": item_id} - - -app.add_api_route( - "/items-not-decorated/{item_id}", - get_not_decorated, - additional_responses=additional_responses, -) - - -@app.delete("/items/{item_id}", additional_responses=additional_responses) -def delete_item(item_id: str, item: Item): - return {"item_id": item_id, "item": item} - - -@app.head("/items/{item_id}", additional_responses=additional_responses) -def head_item(item_id: str): - return JSONResponse(headers={"x-fastapi-item-id": item_id}) - - -@app.options("/items/{item_id}", additional_responses=additional_responses) -def options_item(item_id: str): - return JSONResponse(headers={"x-fastapi-item-id": item_id}) - - -@app.patch("/items/{item_id}", additional_responses=additional_responses) -def patch_item(item_id: str, item: Item): - return {"item_id": item_id, "item": item} - - -@app.trace("/items/{item_id}", additional_responses=additional_responses) -def trace_item(item_id: str): - return JSONResponse(media_type="message/http") - - -client = TestClient(app) - -openapi_schema = { - "openapi": "3.0.2", - "info": {"title": "Fast API", "version": "0.1.0"}, - "paths": { - "/items/{item_id}": { - "get": { - "responses": { - "200": { - "description": "Successful Response", - "content": {"application/json": {"schema": {}}}, - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Response400"} - } - }, - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - }, - }, - }, - "summary": "Get Items Get", - "operationId": "get_items_items__item_id__get", - "parameters": [ - { - "required": True, - "schema": {"title": "Item_Id", "type": "string"}, - "name": "item_id", - "in": "path", - } - ], - }, - "delete": { - "responses": { - "200": { - "description": "Successful Response", - "content": {"application/json": {"schema": {}}}, - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Response400"} - } - }, - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - }, - }, - }, - "summary": "Delete Item Delete", - "operationId": "delete_item_items__item_id__delete", - "parameters": [ - { - "required": True, - "schema": {"title": "Item_Id", "type": "string"}, - "name": "item_id", - "in": "path", - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Item"} - } - }, - "required": True, - }, - }, - "options": { - "responses": { - "200": { - "description": "Successful Response", - "content": {"application/json": {"schema": {}}}, - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Response400"} - } - }, - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Response400"} - } - }, - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - }, - }, - }, - "summary": "Options Item Options", - "operationId": "options_item_items__item_id__options", - "parameters": [ - { - "required": True, - "schema": {"title": "Item_Id", "type": "string"}, - "name": "item_id", - "in": "path", - } - ], - }, - "head": { - "responses": { - "200": { - "description": "Successful Response", - "content": {"application/json": {"schema": {}}}, - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Response400"} - } - }, - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - }, - }, - }, - "summary": "Head Item Head", - "operationId": "head_item_items__item_id__head", - "parameters": [ - { - "required": True, - "schema": {"title": "Item_Id", "type": "string"}, - "name": "item_id", - "in": "path", - } - ], - }, - "patch": { - "responses": { - "200": { - "description": "Successful Response", - "content": {"application/json": {"schema": {}}}, - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Response400"} - } - }, - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - }, - }, - }, - "summary": "Patch Item Patch", - "operationId": "patch_item_items__item_id__patch", - "parameters": [ - { - "required": True, - "schema": {"title": "Item_Id", "type": "string"}, - "name": "item_id", - "in": "path", - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Item"} - } - }, - "required": True, - }, - }, - "trace": { - "responses": { - "200": { - "description": "Successful Response", - "content": {"application/json": {"schema": {}}}, - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Response400"} - } - }, - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - }, - }, - }, - "summary": "Trace Item Trace", - "operationId": "trace_item_items__item_id__trace", - "parameters": [ - { - "required": True, - "schema": {"title": "Item_Id", "type": "string"}, - "name": "item_id", - "in": "path", - } - ], - }, - }, - "/items-not-decorated/{item_id}": { - "get": { - "responses": { - "200": { - "description": "Successful Response", - "content": {"application/json": {"schema": {}}}, - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Response400"} - } - }, - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - }, - }, - }, - "summary": "Get Not Decorated Get", - "operationId": "get_not_decorated_items-not-decorated__item_id__get", - "parameters": [ - { - "required": True, - "schema": {"title": "Item_Id", "type": "string"}, - "name": "item_id", - "in": "path", - } - ], - } - }, - }, - "components": { - "schemas": { - "Item": { - "title": "Item", - "required": ["name"], - "type": "object", - "properties": { - "name": {"title": "Name", "type": "string"}, - "price": {"title": "Price", "type": "number"}, - }, - }, - "Response400": { - "title": "Response400", - "description": "HTTP 4xx Response Schema", - "required": ["title", "detail", "error_code"], - "type": "object", - "properties": { - "title": {"title": "Title", "type": "string"}, - "detail": {"title": "Detail", "type": "string"}, - "error_code": {"title": "Error_Code", "type": "integer"}, - }, - }, - "ValidationError": { - "title": "ValidationError", - "required": ["loc", "msg", "type"], - "type": "object", - "properties": { - "loc": { - "title": "Location", - "type": "array", - "items": {"type": "string"}, - }, - "msg": {"title": "Message", "type": "string"}, - "type": {"title": "Error Type", "type": "string"}, - }, - }, - "HTTPValidationError": { - "title": "HTTPValidationError", - "type": "object", - "properties": { - "detail": { - "title": "Detail", - "type": "array", - "items": {"$ref": "#/components/schemas/ValidationError"}, - } - }, - }, - } - }, -} - - -def test_uncompatible_response_model_undecorated(): - app = FastAPI() - - class NotBaseModel: - pass - - response_403 = AdditionalResponse( - status_code=403, description="Forbidden", models=[NotBaseModel] - ) - with pytest.raises(RuntimeError): - app.add_api_route("/", get_not_decorated, additional_responses=[response_403]) - - -def test_openapi_schema(): - response = client.get("/openapi.json") - assert response.status_code == 200 - assert response.json() == openapi_schema - - -def test_get_api_route(): - response = client.get("/items/foo") - assert response.status_code == 200 - assert response.json() == {"item_id": "foo"} - - -def test_get_api_route_not_decorated(): - response = client.get("/items-not-decorated/foo") - assert response.status_code == 200 - assert response.json() == {"item_id": "foo"} - - -def test_delete(): - response = client.delete("/items/foo", json={"name": "Foo"}) - assert response.status_code == 200 - assert response.json() == {"item_id": "foo", "item": {"name": "Foo", "price": None}} - - -def test_head(): - response = client.head("/items/foo") - assert response.status_code == 200 - assert response.headers["x-fastapi-item-id"] == "foo" - - -def test_options(): - response = client.options("/items/foo") - assert response.status_code == 200 - assert response.headers["x-fastapi-item-id"] == "foo" - - -def test_patch(): - response = client.patch("/items/foo", json={"name": "Foo"}) - assert response.status_code == 200 - assert response.json() == {"item_id": "foo", "item": {"name": "Foo", "price": None}} - - -def test_trace(): - response = client.request("trace", "/items/foo") - assert response.status_code == 200 - assert response.headers["content-type"] == "message/http" diff --git a/tests/test_tutorial/test_additional_responses/__init__.py b/tests/test_tutorial/test_additional_responses/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/test_tutorial/test_additional_responses/test_tutorial001.py b/tests/test_tutorial/test_additional_responses/test_tutorial001.py new file mode 100644 index 0000000000..e1ec1ed8cd --- /dev/null +++ b/tests/test_tutorial/test_additional_responses/test_tutorial001.py @@ -0,0 +1,116 @@ +from starlette.testclient import TestClient + +from additional_responses.tutorial001 import app + +client = TestClient(app) + +openapi_schema = { + "openapi": "3.0.2", + "info": {"title": "Fast API", "version": "0.1.0"}, + "paths": { + "/items/{item_id}": { + "get": { + "responses": { + "404": { + "description": "Additional Response", + "content": { + "application/json": { + "schema": {"$ref": "#/components/schemas/Message"} + } + }, + }, + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {"$ref": "#/components/schemas/Item"} + } + }, + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + }, + }, + "summary": "Read Item Get", + "operationId": "read_item_items__item_id__get", + "parameters": [ + { + "required": True, + "schema": {"title": "Item_Id", "type": "string"}, + "name": "item_id", + "in": "path", + } + ], + } + } + }, + "components": { + "schemas": { + "Item": { + "title": "Item", + "required": ["id", "value"], + "type": "object", + "properties": { + "id": {"title": "Id", "type": "string"}, + "value": {"title": "Value", "type": "string"}, + }, + }, + "Message": { + "title": "Message", + "required": ["message"], + "type": "object", + "properties": {"message": {"title": "Message", "type": "string"}}, + }, + "ValidationError": { + "title": "ValidationError", + "required": ["loc", "msg", "type"], + "type": "object", + "properties": { + "loc": { + "title": "Location", + "type": "array", + "items": {"type": "string"}, + }, + "msg": {"title": "Message", "type": "string"}, + "type": {"title": "Error Type", "type": "string"}, + }, + }, + "HTTPValidationError": { + "title": "HTTPValidationError", + "type": "object", + "properties": { + "detail": { + "title": "Detail", + "type": "array", + "items": {"$ref": "#/components/schemas/ValidationError"}, + } + }, + }, + } + }, +} + + +def test_openapi_schema(): + response = client.get("/openapi.json") + assert response.status_code == 200 + assert response.json() == openapi_schema + + +def test_path_operation(): + response = client.get("/items/foo") + assert response.status_code == 200 + assert response.json() == {"id": "foo", "value": "there goes my hero"} + + +def test_path_operation_not_found(): + response = client.get("/items/bar") + assert response.status_code == 404 + assert response.json() == {"message": "Item not found"} diff --git a/tests/test_tutorial/test_additional_responses/test_tutorial002.py b/tests/test_tutorial/test_additional_responses/test_tutorial002.py new file mode 100644 index 0000000000..b45a148d4b --- /dev/null +++ b/tests/test_tutorial/test_additional_responses/test_tutorial002.py @@ -0,0 +1,115 @@ +import os +import shutil + +from starlette.testclient import TestClient + +from additional_responses.tutorial002 import app + +client = TestClient(app) + +openapi_schema = { + "openapi": "3.0.2", + "info": {"title": "Fast API", "version": "0.1.0"}, + "paths": { + "/items/{item_id}": { + "get": { + "responses": { + "200": { + "description": "Successful Response", + "content": { + "image/png": {}, + "application/json": { + "schema": {"$ref": "#/components/schemas/Item"} + }, + }, + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + }, + }, + "summary": "Read Item Get", + "operationId": "read_item_items__item_id__get", + "parameters": [ + { + "required": True, + "schema": {"title": "Item_Id", "type": "string"}, + "name": "item_id", + "in": "path", + }, + { + "required": False, + "schema": {"title": "Img", "type": "boolean"}, + "name": "img", + "in": "query", + }, + ], + } + } + }, + "components": { + "schemas": { + "Item": { + "title": "Item", + "required": ["id", "value"], + "type": "object", + "properties": { + "id": {"title": "Id", "type": "string"}, + "value": {"title": "Value", "type": "string"}, + }, + }, + "ValidationError": { + "title": "ValidationError", + "required": ["loc", "msg", "type"], + "type": "object", + "properties": { + "loc": { + "title": "Location", + "type": "array", + "items": {"type": "string"}, + }, + "msg": {"title": "Message", "type": "string"}, + "type": {"title": "Error Type", "type": "string"}, + }, + }, + "HTTPValidationError": { + "title": "HTTPValidationError", + "type": "object", + "properties": { + "detail": { + "title": "Detail", + "type": "array", + "items": {"$ref": "#/components/schemas/ValidationError"}, + } + }, + }, + } + }, +} + + +def test_openapi_schema(): + response = client.get("/openapi.json") + assert response.status_code == 200 + assert response.json() == openapi_schema + + +def test_path_operation(): + response = client.get("/items/foo") + assert response.status_code == 200 + assert response.json() == {"id": "foo", "value": "there goes my hero"} + + +def test_path_operation_img(): + shutil.copy("./docs/img/favicon.png", "./image.png") + response = client.get("/items/foo?img=1") + assert response.status_code == 200 + assert response.headers["Content-Type"] == "image/png" + assert len(response.content) + os.remove("./image.png") diff --git a/tests/test_tutorial/test_additional_responses/test_tutorial003.py b/tests/test_tutorial/test_additional_responses/test_tutorial003.py new file mode 100644 index 0000000000..09dc8fd3c7 --- /dev/null +++ b/tests/test_tutorial/test_additional_responses/test_tutorial003.py @@ -0,0 +1,117 @@ +from starlette.testclient import TestClient + +from additional_responses.tutorial003 import app + +client = TestClient(app) + +openapi_schema = { + "openapi": "3.0.2", + "info": {"title": "Fast API", "version": "0.1.0"}, + "paths": { + "/items/{item_id}": { + "get": { + "responses": { + "404": { + "description": "The item was not found", + "content": { + "application/json": { + "schema": {"$ref": "#/components/schemas/Message"} + } + }, + }, + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {"$ref": "#/components/schemas/Item"}, + "example": {"id": "bar", "value": "The bar tenders"}, + } + }, + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + }, + }, + "summary": "Read Item Get", + "operationId": "read_item_items__item_id__get", + "parameters": [ + { + "required": True, + "schema": {"title": "Item_Id", "type": "string"}, + "name": "item_id", + "in": "path", + } + ], + } + } + }, + "components": { + "schemas": { + "Item": { + "title": "Item", + "required": ["id", "value"], + "type": "object", + "properties": { + "id": {"title": "Id", "type": "string"}, + "value": {"title": "Value", "type": "string"}, + }, + }, + "Message": { + "title": "Message", + "required": ["message"], + "type": "object", + "properties": {"message": {"title": "Message", "type": "string"}}, + }, + "ValidationError": { + "title": "ValidationError", + "required": ["loc", "msg", "type"], + "type": "object", + "properties": { + "loc": { + "title": "Location", + "type": "array", + "items": {"type": "string"}, + }, + "msg": {"title": "Message", "type": "string"}, + "type": {"title": "Error Type", "type": "string"}, + }, + }, + "HTTPValidationError": { + "title": "HTTPValidationError", + "type": "object", + "properties": { + "detail": { + "title": "Detail", + "type": "array", + "items": {"$ref": "#/components/schemas/ValidationError"}, + } + }, + }, + } + }, +} + + +def test_openapi_schema(): + response = client.get("/openapi.json") + assert response.status_code == 200 + assert response.json() == openapi_schema + + +def test_path_operation(): + response = client.get("/items/foo") + assert response.status_code == 200 + assert response.json() == {"id": "foo", "value": "there goes my hero"} + + +def test_path_operation_not_found(): + response = client.get("/items/bar") + assert response.status_code == 404 + assert response.json() == {"message": "Item not found"} diff --git a/tests/test_tutorial/test_additional_responses/test_tutorial004.py b/tests/test_tutorial/test_additional_responses/test_tutorial004.py new file mode 100644 index 0000000000..91b5ca9593 --- /dev/null +++ b/tests/test_tutorial/test_additional_responses/test_tutorial004.py @@ -0,0 +1,118 @@ +import os +import shutil + +from starlette.testclient import TestClient + +from additional_responses.tutorial004 import app + +client = TestClient(app) + +openapi_schema = { + "openapi": "3.0.2", + "info": {"title": "Fast API", "version": "0.1.0"}, + "paths": { + "/items/{item_id}": { + "get": { + "responses": { + "404": {"description": "Item not found"}, + "302": {"description": "The item was moved"}, + "403": {"description": "Not enough privileges"}, + "200": { + "description": "Successful Response", + "content": { + "image/png": {}, + "application/json": { + "schema": {"$ref": "#/components/schemas/Item"} + }, + }, + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + }, + }, + "summary": "Read Item Get", + "operationId": "read_item_items__item_id__get", + "parameters": [ + { + "required": True, + "schema": {"title": "Item_Id", "type": "string"}, + "name": "item_id", + "in": "path", + }, + { + "required": False, + "schema": {"title": "Img", "type": "boolean"}, + "name": "img", + "in": "query", + }, + ], + } + } + }, + "components": { + "schemas": { + "Item": { + "title": "Item", + "required": ["id", "value"], + "type": "object", + "properties": { + "id": {"title": "Id", "type": "string"}, + "value": {"title": "Value", "type": "string"}, + }, + }, + "ValidationError": { + "title": "ValidationError", + "required": ["loc", "msg", "type"], + "type": "object", + "properties": { + "loc": { + "title": "Location", + "type": "array", + "items": {"type": "string"}, + }, + "msg": {"title": "Message", "type": "string"}, + "type": {"title": "Error Type", "type": "string"}, + }, + }, + "HTTPValidationError": { + "title": "HTTPValidationError", + "type": "object", + "properties": { + "detail": { + "title": "Detail", + "type": "array", + "items": {"$ref": "#/components/schemas/ValidationError"}, + } + }, + }, + } + }, +} + + +def test_openapi_schema(): + response = client.get("/openapi.json") + assert response.status_code == 200 + assert response.json() == openapi_schema + + +def test_path_operation(): + response = client.get("/items/foo") + assert response.status_code == 200 + assert response.json() == {"id": "foo", "value": "there goes my hero"} + + +def test_path_operation_img(): + shutil.copy("./docs/img/favicon.png", "./image.png") + response = client.get("/items/foo?img=1") + assert response.status_code == 200 + assert response.headers["Content-Type"] == "image/png" + assert len(response.content) + os.remove("./image.png") diff --git a/tests/test_tutorial/test_bigger_applications/test_main.py b/tests/test_tutorial/test_bigger_applications/test_main.py index eb68c44929..fd11a77a91 100644 --- a/tests/test_tutorial/test_bigger_applications/test_main.py +++ b/tests/test_tutorial/test_bigger_applications/test_main.py @@ -69,10 +69,11 @@ openapi_schema = { "/items/": { "get": { "responses": { + "404": {"description": "Not found"}, "200": { "description": "Successful Response", "content": {"application/json": {"schema": {}}}, - } + }, }, "tags": ["items"], "summary": "Read Items Get", @@ -82,6 +83,7 @@ openapi_schema = { "/items/{item_id}": { "get": { "responses": { + "404": {"description": "Not found"}, "200": { "description": "Successful Response", "content": {"application/json": {"schema": {}}}, @@ -108,7 +110,38 @@ openapi_schema = { "in": "path", } ], - } + }, + "put": { + "responses": { + "404": {"description": "Not found"}, + "403": {"description": "Operation forbidden"}, + "200": { + "description": "Successful Response", + "content": {"application/json": {"schema": {}}}, + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + }, + }, + "tags": ["custom", "items"], + "summary": "Update Item Put", + "operationId": "update_item_items__item_id__put", + "parameters": [ + { + "required": True, + "schema": {"title": "Item_Id", "type": "string"}, + "name": "item_id", + "in": "path", + } + ], + }, }, }, "components": { @@ -158,3 +191,15 @@ def test_get_path(path, expected_status, expected_response): response = client.get(path) assert response.status_code == expected_status assert response.json() == expected_response + + +def test_put(): + response = client.put("/items/foo") + assert response.status_code == 200 + assert response.json() == {"item_id": "foo", "name": "The Fighters"} + + +def test_put_forbidden(): + response = client.put("/items/bar") + assert response.status_code == 403 + assert response.json() == {"detail": "You can only update the item: foo"} -- 2.47.3