mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-02-12 01:20:51 +03:00
Update aiohttp example
This commit is contained in:
parent
170263de4d
commit
4fab71c35b
|
@ -9,7 +9,8 @@ follows `Semantic versioning`_
|
||||||
|
|
||||||
4.0.0
|
4.0.0
|
||||||
-----
|
-----
|
||||||
- Add wiring.
|
- Add ``wiring`` feature.
|
||||||
|
- Update ``aiohttp`` example.
|
||||||
|
|
||||||
3.44.0
|
3.44.0
|
||||||
------
|
------
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
Aiohttp Dependency Injection Example
|
Dependency Injector + Aiohttp Example
|
||||||
====================================
|
=====================================
|
||||||
|
|
||||||
Application ``giphynavigator`` is an `Aiohttp <https://docs.aiohttp.org/>`_ +
|
Application ``giphynavigator`` is an `Aiohttp <https://docs.aiohttp.org/>`_ +
|
||||||
`Dependency Injector <http://python-dependency-injector.ets-labs.org/>`_ application.
|
`Dependency Injector <http://python-dependency-injector.ets-labs.org/>`_ example application.
|
||||||
|
|
||||||
Run
|
Run
|
||||||
---
|
---
|
||||||
|
@ -107,11 +107,11 @@ The output should be something like:
|
||||||
---------------------------------------------------
|
---------------------------------------------------
|
||||||
giphynavigator/__init__.py 0 0 100%
|
giphynavigator/__init__.py 0 0 100%
|
||||||
giphynavigator/__main__.py 5 5 0%
|
giphynavigator/__main__.py 5 5 0%
|
||||||
giphynavigator/application.py 10 0 100%
|
giphynavigator/application.py 12 0 100%
|
||||||
giphynavigator/containers.py 10 0 100%
|
giphynavigator/containers.py 6 0 100%
|
||||||
giphynavigator/giphy.py 14 9 36%
|
giphynavigator/giphy.py 14 9 36%
|
||||||
giphynavigator/services.py 9 1 89%
|
giphynavigator/services.py 9 1 89%
|
||||||
giphynavigator/tests.py 35 0 100%
|
giphynavigator/tests.py 37 0 100%
|
||||||
giphynavigator/views.py 7 0 100%
|
giphynavigator/views.py 9 0 100%
|
||||||
---------------------------------------------------
|
---------------------------------------------------
|
||||||
TOTAL 90 15 83%
|
TOTAL 92 15 84%
|
5
examples/miniapps/aiohttp-giphynav/config.yml
Normal file
5
examples/miniapps/aiohttp-giphynav/config.yml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
giphy:
|
||||||
|
request_timeout: 10
|
||||||
|
default:
|
||||||
|
query: "Dependency Injector"
|
||||||
|
limit: 10
|
|
@ -2,20 +2,23 @@
|
||||||
|
|
||||||
from aiohttp import web
|
from aiohttp import web
|
||||||
|
|
||||||
from .containers import ApplicationContainer
|
from .containers import Container
|
||||||
|
from . import views
|
||||||
|
|
||||||
|
|
||||||
def create_app():
|
def create_app():
|
||||||
"""Create and return aiohttp application."""
|
"""Create and return aiohttp application."""
|
||||||
container = ApplicationContainer()
|
container = Container()
|
||||||
container.config.from_yaml('config.yml')
|
container.config.from_yaml('config.yml')
|
||||||
container.config.giphy.api_key.from_env('GIPHY_API_KEY')
|
container.config.giphy.api_key.from_env('GIPHY_API_KEY')
|
||||||
|
|
||||||
app: web.Application = container.app()
|
container.wire(modules=[views])
|
||||||
|
|
||||||
|
app = web.Application()
|
||||||
app.container = container
|
app.container = container
|
||||||
|
|
||||||
app.add_routes([
|
app.add_routes([
|
||||||
web.get('/', container.index_view.as_view()),
|
web.get('/', views.index),
|
||||||
])
|
])
|
||||||
|
|
||||||
return app
|
return app
|
|
@ -0,0 +1,21 @@
|
||||||
|
"""Containers module."""
|
||||||
|
|
||||||
|
from dependency_injector import containers, providers
|
||||||
|
|
||||||
|
from . import giphy, services
|
||||||
|
|
||||||
|
|
||||||
|
class Container(containers.DeclarativeContainer):
|
||||||
|
|
||||||
|
config = providers.Configuration()
|
||||||
|
|
||||||
|
giphy_client = providers.Factory(
|
||||||
|
giphy.GiphyClient,
|
||||||
|
api_key=config.giphy.api_key,
|
||||||
|
timeout=config.giphy.request_timeout,
|
||||||
|
)
|
||||||
|
|
||||||
|
search_service = providers.Factory(
|
||||||
|
services.SearchService,
|
||||||
|
giphy_client=giphy_client,
|
||||||
|
)
|
|
@ -10,7 +10,9 @@ from giphynavigator.giphy import GiphyClient
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def app():
|
def app():
|
||||||
return create_app()
|
app = create_app()
|
||||||
|
yield app
|
||||||
|
app.container.unwire()
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
@ -73,5 +75,5 @@ async def test_index_default_params(client, app):
|
||||||
|
|
||||||
assert response.status == 200
|
assert response.status == 200
|
||||||
data = await response.json()
|
data = await response.json()
|
||||||
assert data['query'] == app.container.config.search.default_query()
|
assert data['query'] == app.container.config.default.query()
|
||||||
assert data['limit'] == app.container.config.search.default_limit()
|
assert data['limit'] == app.container.config.default.limit()
|
|
@ -1,15 +1,17 @@
|
||||||
"""Views module."""
|
"""Views module."""
|
||||||
|
|
||||||
from aiohttp import web
|
from aiohttp import web
|
||||||
|
from dependency_injector.wiring import Provide
|
||||||
|
|
||||||
from .services import SearchService
|
from .services import SearchService
|
||||||
|
from .containers import Container
|
||||||
|
|
||||||
|
|
||||||
async def index(
|
async def index(
|
||||||
request: web.Request,
|
request: web.Request,
|
||||||
search_service: SearchService,
|
search_service: SearchService = Provide[Container.search_service],
|
||||||
default_query: str,
|
default_query: str = Provide[Container.config.default.query],
|
||||||
default_limit: int,
|
default_limit: int = Provide[Container.config.default.limit.as_int()],
|
||||||
) -> web.Response:
|
) -> web.Response:
|
||||||
query = request.query.get('query', default_query)
|
query = request.query.get('query', default_query)
|
||||||
limit = int(request.query.get('limit', default_limit))
|
limit = int(request.query.get('limit', default_limit))
|
|
@ -1,5 +0,0 @@
|
||||||
giphy:
|
|
||||||
request_timeout: 10
|
|
||||||
search:
|
|
||||||
default_query: "Dependency Injector"
|
|
||||||
default_limit: 10
|
|
|
@ -1,33 +0,0 @@
|
||||||
"""Application containers module."""
|
|
||||||
|
|
||||||
from dependency_injector import containers, providers
|
|
||||||
from dependency_injector.ext import aiohttp
|
|
||||||
from aiohttp import web
|
|
||||||
|
|
||||||
from . import giphy, services, views
|
|
||||||
|
|
||||||
|
|
||||||
class ApplicationContainer(containers.DeclarativeContainer):
|
|
||||||
"""Application container."""
|
|
||||||
|
|
||||||
app = aiohttp.Application(web.Application)
|
|
||||||
|
|
||||||
config = providers.Configuration()
|
|
||||||
|
|
||||||
giphy_client = providers.Factory(
|
|
||||||
giphy.GiphyClient,
|
|
||||||
api_key=config.giphy.api_key,
|
|
||||||
timeout=config.giphy.request_timeout,
|
|
||||||
)
|
|
||||||
|
|
||||||
search_service = providers.Factory(
|
|
||||||
services.SearchService,
|
|
||||||
giphy_client=giphy_client,
|
|
||||||
)
|
|
||||||
|
|
||||||
index_view = aiohttp.View(
|
|
||||||
views.index,
|
|
||||||
search_service=search_service,
|
|
||||||
default_query=config.search.default_query,
|
|
||||||
default_limit=config.search.default_limit,
|
|
||||||
)
|
|
Loading…
Reference in New Issue
Block a user