mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-01-30 03:04:16 +03:00
Update FastAPI example
This commit is contained in:
parent
d37ae8e7db
commit
950d5a5e6e
|
@ -10,6 +10,7 @@ follows `Semantic versioning`_
|
|||
Develop
|
||||
-------
|
||||
- Improve ``FastAPI`` integration: handle ``Depends(Provide[...])``.
|
||||
- Update ``FastAPI`` example.
|
||||
|
||||
4.4.0
|
||||
-----
|
||||
|
|
|
@ -113,9 +113,9 @@ The output should be something like:
|
|||
giphynavigator/__init__.py 0 0 100%
|
||||
giphynavigator/application.py 13 0 100%
|
||||
giphynavigator/containers.py 6 0 100%
|
||||
giphynavigator/endpoints.py 6 0 100%
|
||||
giphynavigator/endpoints.py 20 0 100%
|
||||
giphynavigator/giphy.py 14 9 36%
|
||||
giphynavigator/services.py 9 1 89%
|
||||
giphynavigator/tests.py 38 0 100%
|
||||
---------------------------------------------------
|
||||
TOTAL 86 10 88%
|
||||
TOTAL 100 10 90%
|
||||
|
|
|
@ -14,7 +14,7 @@ def create_app() -> FastAPI:
|
|||
|
||||
app = FastAPI()
|
||||
app.container = container
|
||||
app.add_api_route('/', endpoints.index)
|
||||
app.include_router(endpoints.router)
|
||||
return app
|
||||
|
||||
|
||||
|
|
|
@ -1,17 +1,42 @@
|
|||
"""Endpoints module."""
|
||||
|
||||
from typing import Optional, List
|
||||
|
||||
from fastapi import APIRouter, Depends
|
||||
from pydantic import BaseModel
|
||||
from dependency_injector.wiring import inject, Provide
|
||||
|
||||
from .services import SearchService
|
||||
from .containers import Container
|
||||
|
||||
|
||||
class Gif(BaseModel):
|
||||
url: str
|
||||
|
||||
|
||||
class Response(BaseModel):
|
||||
query: str
|
||||
limit: int
|
||||
gifs: List[Gif]
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get('/', response_model=Response)
|
||||
@inject
|
||||
async def index(
|
||||
query: str = Provide[Container.config.default.query],
|
||||
limit: int = Provide[Container.config.default.limit.as_int()],
|
||||
search_service=Provide[Container.search_service],
|
||||
query: Optional[str] = None,
|
||||
limit: Optional[str] = None,
|
||||
default_query: str = Depends(Provide[Container.config.default.query]),
|
||||
default_limit: int = Depends(Provide[Container.config.default.limit.as_int()]),
|
||||
search_service: SearchService = Depends(Provide[Container.search_service]),
|
||||
):
|
||||
query = query or default_query
|
||||
limit = limit or default_limit
|
||||
|
||||
gifs = await search_service.search(query, limit)
|
||||
|
||||
return {
|
||||
'query': query,
|
||||
'limit': limit,
|
||||
|
|
Loading…
Reference in New Issue
Block a user