Skip to content

Commit 25a9b89

Browse files
committed
Organize main
1 parent 27460d3 commit 25a9b89

2 files changed

Lines changed: 28 additions & 21 deletions

File tree

src/python_template/api/main.py

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,30 @@
1616
)
1717
from python_template.common.application_environment import ApplicationEnvironment
1818

19-
openapi_url = (
20-
"/openapi.json"
21-
if ApplicationEnvironment.get_current() != ApplicationEnvironment.PRODUCTION
22-
else None
23-
)
24-
app = FastAPI(openapi_url=openapi_url)
25-
app.include_router(product_router)
2619

27-
services = ServiceCollection()
28-
application_settings = ApplicationSettings() # ty:ignore[missing-argument]
29-
services.add_singleton(ApplicationSettings, application_settings)
30-
add_observability(services, application_settings)
31-
add_sqlmodel(services)
32-
services.add_transient(EmailService)
33-
services.add_transient(PublishProductWorkflow)
34-
services.add_transient(DiscontinueProductWorkflow)
20+
def configure_services() -> ServiceCollection:
21+
services = ServiceCollection()
22+
application_settings = ApplicationSettings() # ty:ignore[missing-argument]
23+
services.add_singleton(ApplicationSettings, application_settings)
24+
add_observability(services, application_settings)
25+
add_sqlmodel(services)
26+
services.add_transient(EmailService)
27+
services.add_transient(PublishProductWorkflow)
28+
services.add_transient(DiscontinueProductWorkflow)
29+
return services
30+
31+
32+
def create_app() -> FastAPI:
33+
openapi_url = (
34+
"/openapi.json"
35+
if ApplicationEnvironment.get_current() != ApplicationEnvironment.PRODUCTION
36+
else None
37+
)
38+
app = FastAPI(openapi_url=openapi_url)
39+
app.include_router(product_router)
40+
return app
41+
42+
43+
app = create_app()
44+
services = configure_services()
3545
services.configure_fastapi(app)

tests/integration/api/conftest.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,13 @@
22

33
import pytest
44
from aspy_dependency_injection.service_provider import ServiceProvider
5-
from pytest_mock import MockerFixture
65

7-
from python_template.api.main import services
8-
from python_template.api.services.email_service import EmailService
6+
from python_template.api.main import configure_services
97

108

119
@pytest.fixture
12-
async def service_provider(mocker: MockerFixture) -> AsyncGenerator[ServiceProvider]:
13-
email_service_mock = mocker.create_autospec(EmailService, instance=True)
14-
services.add_singleton(EmailService, email_service_mock)
10+
async def service_provider() -> AsyncGenerator[ServiceProvider]:
11+
services = configure_services()
1512

1613
async with services.build_service_provider() as service_provider:
1714
yield service_provider

0 commit comments

Comments
 (0)