Skip to content

Commit 6f56a0a

Browse files
committed
Simplify application structure
1 parent aa7317c commit 6f56a0a

24 files changed

+62
-96
lines changed

src/newsfeed/__main__.py

+7-33
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,15 @@
11
"""Main module."""
22

3-
from aiohttp import web
4-
5-
from .containers import Container
6-
from . import webapi
7-
8-
9-
def main() -> None:
10-
container = Container()
11-
12-
container.config.from_yaml('config/newsfeed.yml')
13-
container.config.from_yaml('config/newsfeed.local.yml')
14-
container.config.logging.from_yaml('config/logging.yml')
15-
container.config.logging.from_yaml('config/logging.local.yml')
16-
17-
container.configure_logging()
18-
container.configure_event_loop()
3+
import os
194

20-
container.wire(packages=[webapi])
21-
22-
web_app = webapi.app.create_app()
23-
event_processor = container.event_processor_service()
5+
from aiohttp import web
246

25-
@web_app.on_startup.append
26-
async def _on_startup(_: web.Application) -> None:
27-
event_processor.start_processing()
7+
from .app import create_app
288

29-
@web_app.on_cleanup.append
30-
async def _on_cleanup(_: web.Application) -> None:
31-
event_processor.stop_processing()
329

10+
if __name__ == '__main__':
11+
app = create_app()
3312
web.run_app(
34-
web_app,
35-
port=int(container.config.webapi.port()),
36-
print=lambda *_: None,
13+
app,
14+
port=int(os.getenv('PORT', 8000)),
3715
)
38-
39-
40-
if __name__ == '__main__':
41-
main()

src/newsfeed/app.py

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
"""Application module."""
2+
3+
from aiohttp import web
4+
5+
from .containers import Container
6+
from .routes import setup_routes
7+
from . import handlers
8+
9+
10+
def create_app() -> web.Application:
11+
container = Container()
12+
13+
container.config.from_yaml('config/newsfeed.yml')
14+
container.config.from_yaml('config/newsfeed.local.yml')
15+
container.config.logging.from_yaml('config/logging.yml')
16+
container.config.logging.from_yaml('config/logging.local.yml')
17+
18+
container.configure_logging()
19+
container.configure_event_loop()
20+
21+
container.wire(packages=[handlers])
22+
23+
app = web.Application()
24+
app.container = container
25+
setup_routes(app)
26+
27+
event_processor = container.event_processor_service()
28+
29+
@app.on_startup.append
30+
async def _on_startup(_: web.Application) -> None:
31+
event_processor.start_processing()
32+
33+
@app.on_cleanup.append
34+
async def _on_cleanup(_: web.Application) -> None:
35+
event_processor.stop_processing()
36+
37+
return app

src/newsfeed/containers.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
from dependency_injector import containers, providers
66

7-
from newsfeed import core, infrastructure, domain
7+
from newsfeed import infrastructure, domain
8+
from .loop import configure_event_loop
89

910

1011
class Container(containers.DeclarativeContainer):
@@ -17,7 +18,7 @@ class Container(containers.DeclarativeContainer):
1718
)
1819

1920
configure_event_loop = providers.Callable(
20-
core.loop.configure_event_loop,
21+
configure_event_loop,
2122
enable_uvloop=config.enable_uvloop,
2223
)
2324

src/newsfeed/core/__init__.py

-3
This file was deleted.

src/newsfeed/handlers/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""API handlers package."""

src/newsfeed/webapi/handlers/events.py src/newsfeed/handlers/events.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
"""Event handlers."""
1+
"""Event API handlers."""
22

33
from typing import Dict, List, Tuple, Union, Any
44

src/newsfeed/webapi/handlers/misc.py src/newsfeed/handlers/misc.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
"""Miscellaneous handlers."""
1+
"""Miscellaneous API handlers."""
22

33
import copy
44
from typing import Dict, Any, AnyStr

src/newsfeed/webapi/handlers/subscriptions.py src/newsfeed/handlers/subscriptions.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
"""Subscription handlers."""
1+
"""Subscription API handlers."""
22

33
from typing import Dict, Union
44

File renamed without changes.
File renamed without changes.

src/newsfeed/webapi/__init__.py

-3
This file was deleted.

src/newsfeed/webapi/app.py

-11
This file was deleted.

src/newsfeed/webapi/handlers/__init__.py

-1
This file was deleted.

tests/unit/api/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""API tests."""
File renamed without changes.
File renamed without changes.

tests/unit/conftest.py

+9-37
Original file line numberDiff line numberDiff line change
@@ -2,49 +2,21 @@
22

33
from pytest import fixture
44

5-
from newsfeed.containers import Container
6-
from newsfeed import webapi
5+
from newsfeed.app import create_app
76

87

98
@fixture
10-
def config():
11-
return {
12-
'infrastructure': {
13-
'event_queue': {
14-
'max_size': 1,
15-
},
16-
'event_storage': {
17-
'max_newsfeeds': 3,
18-
'max_events_per_newsfeed': 5,
19-
},
20-
'subscription_storage': {
21-
'max_newsfeeds': 3,
22-
'max_subscriptions_per_newsfeed': 5,
23-
},
24-
},
25-
'domain': {
26-
'newsfeed_id_length': 16,
27-
'processor_concurrency': 1,
28-
},
29-
'webapi': {
30-
'base_path': '/',
31-
},
32-
}
9+
def app():
10+
app = create_app()
11+
yield app
12+
app.container.unwire()
3313

3414

3515
@fixture
36-
def container(config):
37-
container = Container(config=config)
38-
container.wire(packages=[webapi])
39-
yield container
40-
container.unwire()
16+
def container(app):
17+
return app.container
4118

4219

4320
@fixture
44-
def web_app(container):
45-
return webapi.app.create_app()
46-
47-
48-
@fixture
49-
async def web_client(aiohttp_client, web_app):
50-
return await aiohttp_client(web_app)
21+
async def web_client(aiohttp_client, app):
22+
return await aiohttp_client(app)

tests/unit/domain/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""Domain tests."""

tests/unit/domain_model/__init__.py

-1
This file was deleted.

tests/unit/webapi/__init__.py

-1
This file was deleted.

tests/unit/webapi/handlers/__init__.py

-1
This file was deleted.

0 commit comments

Comments
 (0)