Change how services are provided so that they don't go via "extensions"
This commit is contained in:
parent
7b6d351282
commit
72ece8af72
3 changed files with 25 additions and 16 deletions
35
src/main.py
35
src/main.py
|
|
@ -1,8 +1,10 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
from src.services.notifications import NotificationService, get_notification_service
|
from src.services.notifications import NotificationService, get_notification_service
|
||||||
from src.services.email import get_service as get_email_service
|
from src.services.email import EmailService, get_email_service
|
||||||
from src.services.users import get_service as get_user_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.db import get_database
|
||||||
from src.infra.users import UserRepoImpl
|
from src.infra.users import UserRepoImpl
|
||||||
from waitress import serve
|
from waitress import serve
|
||||||
|
|
@ -15,20 +17,31 @@ from src.config import parse_config, Config
|
||||||
logger = logging.getLogger(__name__)
|
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:
|
def create_app(name: str, config: Config) -> Flask:
|
||||||
logging.basicConfig(level=config.logging.level, format=('%(asctime)s %(levelname)s [%(name)s] %(message)s'))
|
logging.basicConfig(level=config.logging.level, format=('%(asctime)s %(levelname)s [%(name)s] %(message)s'))
|
||||||
|
|
||||||
app = Flask(name)
|
app = MyFlask(name)
|
||||||
|
|
||||||
email_service = get_email_service(config.email)
|
|
||||||
notification_service = make_notification_service(email_service)
|
|
||||||
database = get_database(config.database)
|
database = get_database(config.database)
|
||||||
user_repo = UserRepoImpl(database)
|
user_repo = UserRepoImpl(database)
|
||||||
user_service = get_user_service(user_repo)
|
email_service = get_email_service(config.email)
|
||||||
|
app.services = AppServices(
|
||||||
app.extensions['email'] = email_service
|
users=UserService(user_repo),
|
||||||
app.extensions['notifications'] = notification_service
|
auth=AuthService(config.auth),
|
||||||
app.extensions['user_service'] = user_service
|
email=email_service,
|
||||||
|
notifications=get_notification_service(email_service),
|
||||||
|
)
|
||||||
|
|
||||||
if config.host:
|
if config.host:
|
||||||
app.config['SERVER_NAME'] = config.host
|
app.config['SERVER_NAME'] = config.host
|
||||||
|
|
|
||||||
|
|
@ -42,5 +42,5 @@ class BirdEmailServiceImpl(EmailService):
|
||||||
return response.ok
|
return response.ok
|
||||||
|
|
||||||
|
|
||||||
def get_service(config: EmailConfig) -> EmailService:
|
def get_email_service(config: EmailConfig) -> EmailService:
|
||||||
return BirdEmailServiceImpl(config)
|
return BirdEmailServiceImpl(config)
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,3 @@ class UserService:
|
||||||
user = self._repo.get_user_by_id(user_id)
|
user = self._repo.get_user_by_id(user_id)
|
||||||
if user:
|
if user:
|
||||||
return user.to_profile()
|
return user.to_profile()
|
||||||
|
|
||||||
|
|
||||||
def get_service(repo: UserRepo) -> UserService:
|
|
||||||
return UserService(repo)
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue