Repository URL to install this package:
|
Version:
0.28.0.dev4956 ▾
|
import asyncio
import logging
from typing import Any, Optional, Union
import uvicorn
from flet.controls.types import RouteUrlStrategy, WebRenderer
import flet_web.fastapi
import flet_web.fastapi as flet_fastapi
logger = logging.getLogger(flet_fastapi.__name__)
class WebServerHandle:
def __init__(self, page_url: str, server: uvicorn.Server) -> None:
self.page_url = page_url
self.server = server
async def close(self):
logger.info("Closing Flet web server...")
await self.server.shutdown()
def get_fastapi_web_app(
main,
before_main,
page_name: str,
assets_dir: str,
upload_dir: str,
web_renderer: WebRenderer = WebRenderer.AUTO,
route_url_strategy: RouteUrlStrategy = RouteUrlStrategy.PATH,
no_cdn: bool = False,
):
web_path = f"/{page_name.strip('/')}"
app = flet_web.fastapi.FastAPI()
app.mount(
web_path,
flet_web.fastapi.app(
main,
before_main=before_main,
upload_dir=upload_dir,
assets_dir=assets_dir,
web_renderer=web_renderer,
route_url_strategy=route_url_strategy,
no_cdn=no_cdn,
),
)
return app
async def serve_fastapi_web_app(
main,
before_main,
host: str,
url_host: str,
port: int,
page_name: str,
assets_dir: str,
upload_dir: str,
web_renderer: WebRenderer = WebRenderer.AUTO,
route_url_strategy: RouteUrlStrategy = RouteUrlStrategy.PATH,
no_cdn: bool = False,
blocking: bool = False,
on_startup: Optional[Any] = None,
log_level: Optional[Union[str, int]] = None,
):
web_path = f"/{page_name.strip('/')}"
page_url = f"http://{url_host}:{port}{web_path if web_path != '/' else ''}"
def startup():
if on_startup:
on_startup(page_url)
app = flet_web.fastapi.FastAPI(on_startup=[startup])
app.mount(
web_path,
flet_web.fastapi.app(
main,
before_main=before_main,
upload_dir=upload_dir,
assets_dir=assets_dir,
web_renderer=web_renderer,
route_url_strategy=route_url_strategy,
no_cdn=no_cdn,
),
)
config = uvicorn.Config(app, host=host, port=port, log_level=log_level)
server = uvicorn.Server(config)
if blocking:
await server.serve()
else:
asyncio.create_task(server.serve())
return WebServerHandle(page_url=page_url, server=server)