Files
soul_diary/soul_diary/ui/web/service.py

44 lines
1.1 KiB
Python

from typing import Any
import flet
import flet_fastapi
import uvicorn
from facet import ServiceMixin
from soul_diary.ui.app.models import BackendType
from soul_diary.ui.app import SoulDiaryApp
from .settings import WebSettings
class UvicornServer(uvicorn.Server):
def install_signal_handlers(self):
pass
class WebService(ServiceMixin):
def __init__(self, port: int = 8000, backend_data: dict[str, Any] | None = None):
self._port = port
self._backend_data = backend_data
@property
def port(self) -> int:
return self._port
async def start(self):
app = flet_fastapi.app(
SoulDiaryApp(
backend=BackendType.SOUL,
backend_data=self._backend_data,
).run,
web_renderer=flet.WebRenderer.HTML,
)
config = uvicorn.Config(app=app, host="0.0.0.0", port=self._port)
server = UvicornServer(config)
self.add_task(server.serve())
def get_service() -> WebService:
settings = WebSettings()
return WebService(port=settings.port, backend_data=settings.backend_data)