Change how services are provided so that they don't go via "extensions"

This commit is contained in:
Campbell Alden 2026-08-02 22:50:47 +09:00
parent 7b6d351282
commit 72ece8af72
3 changed files with 25 additions and 16 deletions

View file

@ -1,8 +1,10 @@
#!/usr/bin/env python
from src.services.notifications import NotificationService, get_notification_service
from src.services.email import get_service as get_email_service
from src.services.users import get_service as get_user_service
from src.services.email import EmailService, get_email_service
from src.services.auth import AuthService
from src.services.users import UserService
from dataclasses import dataclass
from src.infra.db import get_database
from src.infra.users import UserRepoImpl
from waitress import serve
@ -15,20 +17,31 @@ from src.config import parse_config, Config
logger = logging.getLogger(__name__)
@dataclass
class AppServices:
users: UserService
auth: AuthService
email: EmailService
notifications: NotificationService
class MyFlask(Flask):
services: AppServices
def create_app(name: str, config: Config) -> Flask:
logging.basicConfig(level=config.logging.level, format=('%(asctime)s %(levelname)s [%(name)s] %(message)s'))
app = Flask(name)
email_service = get_email_service(config.email)
notification_service = make_notification_service(email_service)
app = MyFlask(name)
database = get_database(config.database)
user_repo = UserRepoImpl(database)
user_service = get_user_service(user_repo)
app.extensions['email'] = email_service
app.extensions['notifications'] = notification_service
app.extensions['user_service'] = user_service
email_service = get_email_service(config.email)
app.services = AppServices(
users=UserService(user_repo),
auth=AuthService(config.auth),
email=email_service,
notifications=get_notification_service(email_service),
)
if config.host:
app.config['SERVER_NAME'] = config.host

View file

@ -42,5 +42,5 @@ class BirdEmailServiceImpl(EmailService):
return response.ok
def get_service(config: EmailConfig) -> EmailService:
def get_email_service(config: EmailConfig) -> EmailService:
return BirdEmailServiceImpl(config)

View file

@ -96,7 +96,3 @@ class UserService:
user = self._repo.get_user_by_id(user_id)
if user:
return user.to_profile()
def get_service(repo: UserRepo) -> UserService:
return UserService(repo)