Added first controls

This commit is contained in:
2025-11-26 20:53:12 +01:00
parent 459c89bae2
commit ce5328fe34
68 changed files with 37849 additions and 87048 deletions

View File

@@ -9,6 +9,8 @@ from starlette.responses import Response
from myfasthtml.auth.routes import setup_auth_routes
from myfasthtml.auth.utils import create_auth_beforeware
from myfasthtml.core.AuthProxy import AuthProxy
from myfasthtml.core.instances import RootInstance
from myfasthtml.core.utils import utils_app
logger = logging.getLogger("MyFastHtml")
@@ -30,8 +32,10 @@ def get_asset_content(filename):
def create_app(daisyui: Optional[bool] = True,
vis: Optional[bool] = True,
protect_routes: Optional[bool] = True,
mount_auth_app: Optional[bool] = False,
base_url: Optional[str] = None,
**kwargs) -> Any:
"""
Creates and configures a FastHtml application with optional support for daisyUI themes and
@@ -39,22 +43,20 @@ def create_app(daisyui: Optional[bool] = True,
:param daisyui: Flag to enable or disable inclusion of daisyUI-related assets for styling.
Defaults to False.
:type daisyui: Optional[bool]
:param protect_routes: Flag to enable or disable routes protection based on authentication.
Defaults to True.
:type protect_routes: Optional[bool]
:param mount_auth_app: Flag to enable or disable mounting of authentication routes.
Defaults to False.
:type mount_auth_app: Optional[bool]
:param base_url: Url to use for the application (used by the auth APIs)
:param kwargs: Arbitrary keyword arguments forwarded to the application initialization logic.
:return: A tuple containing the FastHtml application instance and the associated router.
:rtype: Any
"""
hdrs = [Link(href="/myfasthtml/myfasthtml.css", rel="stylesheet", type="text/css")]
hdrs = [
Link(href="/myfasthtml/myfasthtml.css", rel="stylesheet", type="text/css"),
Script(src="/myfasthtml/myfasthtml.js"),
]
if daisyui:
hdrs += [
@@ -63,15 +65,21 @@ def create_app(daisyui: Optional[bool] = True,
Script(src="/myfasthtml/tailwindcss-browser@4.js"),
]
if vis:
hdrs += [
Script(src="/myfasthtml/vis-network.min.js"),
]
beforeware = create_auth_beforeware() if protect_routes else None
app, rt = fasthtml.fastapp.fast_app(before=beforeware, hdrs=tuple(hdrs), **kwargs)
# remove the global static files routes
static_route_exts_get = app.routes.pop(0)
original_routes = app.routes[:]
app.routes.clear()
# Serve assets
@app.get("/myfasthtml/{filename:path}.{ext:static}")
def serve_asset(filename: str, ext: str):
def serve_assets(filename: str, ext: str):
path = filename + "." + ext
try:
content = get_asset_content(path)
@@ -86,13 +94,17 @@ def create_app(daisyui: Optional[bool] = True,
return Response(f"Asset not found: {path}", status_code=404)
# and put it back after the myfasthtml static files routes
app.routes.append(static_route_exts_get)
for r in original_routes:
app.routes.append(r)
# route the commands and the bindings
app.mount("/myfasthtml", utils_app)
if mount_auth_app:
# Setup authentication routes
setup_auth_routes(app, rt)
setup_auth_routes(app, rt, base_url=base_url)
# create the AuthProxy instance
AuthProxy(RootInstance, base_url) # using the auto register mechanism to expose it
return app, rt