From 4fab71c35bfdd8be4a4574b2deb50e7c03f33584 Mon Sep 17 00:00:00 2001 From: Roman Mogylatov Date: Tue, 22 Sep 2020 21:47:44 -0400 Subject: [PATCH] Update aiohttp example --- docs/main/changelog.rst | 3 +- .../README.rst | 16 ++++----- examples/miniapps/aiohttp-giphynav/config.yml | 5 +++ .../giphynavigator/__init__.py | 0 .../giphynavigator/__main__.py | 0 .../giphynavigator/application.py | 11 ++++--- .../giphynavigator/containers.py | 21 ++++++++++++ .../giphynavigator/giphy.py | 0 .../giphynavigator/services.py | 0 .../giphynavigator/tests.py | 8 +++-- .../giphynavigator/views.py | 8 +++-- .../requirements.txt | 0 examples/miniapps/giphynav-aiohttp/config.yml | 5 --- .../giphynavigator/containers.py | 33 ------------------- 14 files changed, 53 insertions(+), 57 deletions(-) rename examples/miniapps/{giphynav-aiohttp => aiohttp-giphynav}/README.rst (89%) create mode 100644 examples/miniapps/aiohttp-giphynav/config.yml rename examples/miniapps/{giphynav-aiohttp => aiohttp-giphynav}/giphynavigator/__init__.py (100%) rename examples/miniapps/{giphynav-aiohttp => aiohttp-giphynav}/giphynavigator/__main__.py (100%) rename examples/miniapps/{giphynav-aiohttp => aiohttp-giphynav}/giphynavigator/application.py (62%) create mode 100644 examples/miniapps/aiohttp-giphynav/giphynavigator/containers.py rename examples/miniapps/{giphynav-aiohttp => aiohttp-giphynav}/giphynavigator/giphy.py (100%) rename examples/miniapps/{giphynav-aiohttp => aiohttp-giphynav}/giphynavigator/services.py (100%) rename examples/miniapps/{giphynav-aiohttp => aiohttp-giphynav}/giphynavigator/tests.py (90%) rename examples/miniapps/{giphynav-aiohttp => aiohttp-giphynav}/giphynavigator/views.py (59%) rename examples/miniapps/{giphynav-aiohttp => aiohttp-giphynav}/requirements.txt (100%) delete mode 100644 examples/miniapps/giphynav-aiohttp/config.yml delete mode 100644 examples/miniapps/giphynav-aiohttp/giphynavigator/containers.py diff --git a/docs/main/changelog.rst b/docs/main/changelog.rst index 1827833c..4973e63e 100644 --- a/docs/main/changelog.rst +++ b/docs/main/changelog.rst @@ -9,7 +9,8 @@ follows `Semantic versioning`_ 4.0.0 ----- -- Add wiring. +- Add ``wiring`` feature. +- Update ``aiohttp`` example. 3.44.0 ------ diff --git a/examples/miniapps/giphynav-aiohttp/README.rst b/examples/miniapps/aiohttp-giphynav/README.rst similarity index 89% rename from examples/miniapps/giphynav-aiohttp/README.rst rename to examples/miniapps/aiohttp-giphynav/README.rst index 9ac19d22..f18bc406 100644 --- a/examples/miniapps/giphynav-aiohttp/README.rst +++ b/examples/miniapps/aiohttp-giphynav/README.rst @@ -1,8 +1,8 @@ -Aiohttp Dependency Injection Example -==================================== +Dependency Injector + Aiohttp Example +===================================== Application ``giphynavigator`` is an `Aiohttp `_ + -`Dependency Injector `_ application. +`Dependency Injector `_ example application. Run --- @@ -107,11 +107,11 @@ The output should be something like: --------------------------------------------------- giphynavigator/__init__.py 0 0 100% giphynavigator/__main__.py 5 5 0% - giphynavigator/application.py 10 0 100% - giphynavigator/containers.py 10 0 100% + giphynavigator/application.py 12 0 100% + giphynavigator/containers.py 6 0 100% giphynavigator/giphy.py 14 9 36% giphynavigator/services.py 9 1 89% - giphynavigator/tests.py 35 0 100% - giphynavigator/views.py 7 0 100% + giphynavigator/tests.py 37 0 100% + giphynavigator/views.py 9 0 100% --------------------------------------------------- - TOTAL 90 15 83% + TOTAL 92 15 84% diff --git a/examples/miniapps/aiohttp-giphynav/config.yml b/examples/miniapps/aiohttp-giphynav/config.yml new file mode 100644 index 00000000..d1276f8c --- /dev/null +++ b/examples/miniapps/aiohttp-giphynav/config.yml @@ -0,0 +1,5 @@ +giphy: + request_timeout: 10 +default: + query: "Dependency Injector" + limit: 10 diff --git a/examples/miniapps/giphynav-aiohttp/giphynavigator/__init__.py b/examples/miniapps/aiohttp-giphynav/giphynavigator/__init__.py similarity index 100% rename from examples/miniapps/giphynav-aiohttp/giphynavigator/__init__.py rename to examples/miniapps/aiohttp-giphynav/giphynavigator/__init__.py diff --git a/examples/miniapps/giphynav-aiohttp/giphynavigator/__main__.py b/examples/miniapps/aiohttp-giphynav/giphynavigator/__main__.py similarity index 100% rename from examples/miniapps/giphynav-aiohttp/giphynavigator/__main__.py rename to examples/miniapps/aiohttp-giphynav/giphynavigator/__main__.py diff --git a/examples/miniapps/giphynav-aiohttp/giphynavigator/application.py b/examples/miniapps/aiohttp-giphynav/giphynavigator/application.py similarity index 62% rename from examples/miniapps/giphynav-aiohttp/giphynavigator/application.py rename to examples/miniapps/aiohttp-giphynav/giphynavigator/application.py index 0e446ab4..17703ca0 100644 --- a/examples/miniapps/giphynav-aiohttp/giphynavigator/application.py +++ b/examples/miniapps/aiohttp-giphynav/giphynavigator/application.py @@ -2,20 +2,23 @@ from aiohttp import web -from .containers import ApplicationContainer +from .containers import Container +from . import views def create_app(): """Create and return aiohttp application.""" - container = ApplicationContainer() + container = Container() container.config.from_yaml('config.yml') 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.add_routes([ - web.get('/', container.index_view.as_view()), + web.get('/', views.index), ]) return app diff --git a/examples/miniapps/aiohttp-giphynav/giphynavigator/containers.py b/examples/miniapps/aiohttp-giphynav/giphynavigator/containers.py new file mode 100644 index 00000000..730c162e --- /dev/null +++ b/examples/miniapps/aiohttp-giphynav/giphynavigator/containers.py @@ -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, + ) diff --git a/examples/miniapps/giphynav-aiohttp/giphynavigator/giphy.py b/examples/miniapps/aiohttp-giphynav/giphynavigator/giphy.py similarity index 100% rename from examples/miniapps/giphynav-aiohttp/giphynavigator/giphy.py rename to examples/miniapps/aiohttp-giphynav/giphynavigator/giphy.py diff --git a/examples/miniapps/giphynav-aiohttp/giphynavigator/services.py b/examples/miniapps/aiohttp-giphynav/giphynavigator/services.py similarity index 100% rename from examples/miniapps/giphynav-aiohttp/giphynavigator/services.py rename to examples/miniapps/aiohttp-giphynav/giphynavigator/services.py diff --git a/examples/miniapps/giphynav-aiohttp/giphynavigator/tests.py b/examples/miniapps/aiohttp-giphynav/giphynavigator/tests.py similarity index 90% rename from examples/miniapps/giphynav-aiohttp/giphynavigator/tests.py rename to examples/miniapps/aiohttp-giphynav/giphynavigator/tests.py index cdd68d54..7f9046e6 100644 --- a/examples/miniapps/giphynav-aiohttp/giphynavigator/tests.py +++ b/examples/miniapps/aiohttp-giphynav/giphynavigator/tests.py @@ -10,7 +10,9 @@ from giphynavigator.giphy import GiphyClient @pytest.fixture def app(): - return create_app() + app = create_app() + yield app + app.container.unwire() @pytest.fixture @@ -73,5 +75,5 @@ async def test_index_default_params(client, app): assert response.status == 200 data = await response.json() - assert data['query'] == app.container.config.search.default_query() - assert data['limit'] == app.container.config.search.default_limit() + assert data['query'] == app.container.config.default.query() + assert data['limit'] == app.container.config.default.limit() diff --git a/examples/miniapps/giphynav-aiohttp/giphynavigator/views.py b/examples/miniapps/aiohttp-giphynav/giphynavigator/views.py similarity index 59% rename from examples/miniapps/giphynav-aiohttp/giphynavigator/views.py rename to examples/miniapps/aiohttp-giphynav/giphynavigator/views.py index 7af5a0f5..5a628dae 100644 --- a/examples/miniapps/giphynav-aiohttp/giphynavigator/views.py +++ b/examples/miniapps/aiohttp-giphynav/giphynavigator/views.py @@ -1,15 +1,17 @@ """Views module.""" from aiohttp import web +from dependency_injector.wiring import Provide from .services import SearchService +from .containers import Container async def index( request: web.Request, - search_service: SearchService, - default_query: str, - default_limit: int, + search_service: SearchService = Provide[Container.search_service], + default_query: str = Provide[Container.config.default.query], + default_limit: int = Provide[Container.config.default.limit.as_int()], ) -> web.Response: query = request.query.get('query', default_query) limit = int(request.query.get('limit', default_limit)) diff --git a/examples/miniapps/giphynav-aiohttp/requirements.txt b/examples/miniapps/aiohttp-giphynav/requirements.txt similarity index 100% rename from examples/miniapps/giphynav-aiohttp/requirements.txt rename to examples/miniapps/aiohttp-giphynav/requirements.txt diff --git a/examples/miniapps/giphynav-aiohttp/config.yml b/examples/miniapps/giphynav-aiohttp/config.yml deleted file mode 100644 index e1a0a14b..00000000 --- a/examples/miniapps/giphynav-aiohttp/config.yml +++ /dev/null @@ -1,5 +0,0 @@ -giphy: - request_timeout: 10 -search: - default_query: "Dependency Injector" - default_limit: 10 diff --git a/examples/miniapps/giphynav-aiohttp/giphynavigator/containers.py b/examples/miniapps/giphynav-aiohttp/giphynavigator/containers.py deleted file mode 100644 index 5e56919f..00000000 --- a/examples/miniapps/giphynav-aiohttp/giphynavigator/containers.py +++ /dev/null @@ -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, - )