Browse Source

Merge b215bd7739 into 7b2631a88d

pull/5917/merge
Zakharov Denis 2 weeks ago
committed by GitHub
parent
commit
f7a2d90647
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 5
      fastapi/applications.py
  2. 4
      fastapi/openapi/utils.py
  3. 9
      tests/test_openapi_servers.py

5
fastapi/applications.py

@ -27,6 +27,7 @@ from fastapi.openapi.docs import (
get_swagger_ui_html, get_swagger_ui_html,
get_swagger_ui_oauth2_redirect_html, get_swagger_ui_oauth2_redirect_html,
) )
from fastapi.openapi.models import Server
from fastapi.openapi.utils import get_openapi from fastapi.openapi.utils import get_openapi
from fastapi.params import Depends from fastapi.params import Depends
from fastapi.types import DecoratedCallable, IncEx from fastapi.types import DecoratedCallable, IncEx
@ -286,7 +287,7 @@ class FastAPI(Starlette):
), ),
] = None, ] = None,
servers: Annotated[ servers: Annotated[
Optional[List[Dict[str, Union[str, Any]]]], Optional[List[Union[Dict[str, Union[str, Any]], Server]]],
Doc( Doc(
""" """
A `list` of `dict`s with connectivity information to a target server. A `list` of `dict`s with connectivity information to a target server.
@ -997,7 +998,7 @@ class FastAPI(Starlette):
def setup(self) -> None: def setup(self) -> None:
if self.openapi_url: if self.openapi_url:
urls = (server_data.get("url") for server_data in self.servers) urls = (dict(server_data).get("url") for server_data in self.servers)
server_urls = {url for url in urls if url} server_urls = {url for url in urls if url}
async def openapi(req: Request) -> JSONResponse: async def openapi(req: Request) -> JSONResponse:

4
fastapi/openapi/utils.py

@ -23,7 +23,7 @@ from fastapi.dependencies.utils import (
) )
from fastapi.encoders import jsonable_encoder from fastapi.encoders import jsonable_encoder
from fastapi.openapi.constants import METHODS_WITH_BODY, REF_PREFIX, REF_TEMPLATE from fastapi.openapi.constants import METHODS_WITH_BODY, REF_PREFIX, REF_TEMPLATE
from fastapi.openapi.models import OpenAPI from fastapi.openapi.models import OpenAPI, Server
from fastapi.params import Body, ParamTypes from fastapi.params import Body, ParamTypes
from fastapi.responses import Response from fastapi.responses import Response
from fastapi.types import ModelNameMap from fastapi.types import ModelNameMap
@ -484,7 +484,7 @@ def get_openapi(
routes: Sequence[BaseRoute], routes: Sequence[BaseRoute],
webhooks: Optional[Sequence[BaseRoute]] = None, webhooks: Optional[Sequence[BaseRoute]] = None,
tags: Optional[List[Dict[str, Any]]] = None, tags: Optional[List[Dict[str, Any]]] = None,
servers: Optional[List[Dict[str, Union[str, Any]]]] = None, servers: Optional[List[Union[Dict[str, Union[str, Any]], Server]]] = None,
terms_of_service: Optional[str] = None, terms_of_service: Optional[str] = None,
contact: Optional[Dict[str, Union[str, Any]]] = None, contact: Optional[Dict[str, Union[str, Any]]] = None,
license_info: Optional[Dict[str, Union[str, Any]]] = None, license_info: Optional[Dict[str, Union[str, Any]]] = None,

9
tests/test_openapi_servers.py

@ -1,14 +1,15 @@
from dirty_equals import IsOneOf from dirty_equals import IsOneOf
from fastapi import FastAPI from fastapi import FastAPI
from fastapi.openapi.models import Server
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
app = FastAPI( app = FastAPI(
servers=[ servers=[
{"url": "/", "description": "Default, relative server"}, {"url": "/", "description": "Default, relative server"},
{ Server(
"url": "http://staging.localhost.tiangolo.com:8000", url="http://staging.localhost.tiangolo.com:8000",
"description": "Staging but actually localhost still", description="Staging but actually localhost still",
}, ),
{"url": "https://prod.example.com"}, {"url": "https://prod.example.com"},
] ]
) )

Loading…
Cancel
Save