beerds/server/main.py

55 lines
1.8 KiB
Python

import asyncio
import os
from pathlib import Path
import inject
from litestar import (
Litestar,
)
from litestar.contrib.jinja import JinjaTemplateEngine
from litestar.static_files import create_static_files_router
from litestar.template.config import TemplateConfig
from server.config import get_app_config
from server.infra.db import AsyncDB
from server.infra.web import BreedsController, DescriptionController, SeoController, VoteController
from server.modules.attachments import AtachmentService, DBAttachmentRepository, S3StorageDriver
from server.modules.descriptions import CharactersService, PGCharactersRepository
from server.modules.rate import PGVoteRepository, VotesService
from server.modules.recognizer import RecognizerRepository, RecognizerService
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
loop = asyncio.new_event_loop()
def inject_config(binder: inject.Binder):
"""initialization inject_config for server FastApi"""
cnf = get_app_config()
db = AsyncDB(cnf)
loop.run_until_complete(db.connect())
attach_service = AtachmentService(S3StorageDriver(cnf=cnf), DBAttachmentRepository(db))
binder.bind(RecognizerService, RecognizerService(RecognizerRepository(), attach_service))
binder.bind(CharactersService, CharactersService(PGCharactersRepository(db)))
binder.bind(VotesService, VotesService(PGVoteRepository(db)))
binder.bind(AtachmentService, attach_service)
inject.configure(inject_config)
app = Litestar(
debug=True,
route_handlers=[
BreedsController,
DescriptionController,
SeoController,
VoteController,
create_static_files_router(path="/static", directories=["server/static"]),
],
template_config=TemplateConfig(
directory=Path("server/templates"),
engine=JinjaTemplateEngine,
),
)