Skip to content

lang_tools.webapp.routers.pages_router

HTML page routes.

Serves server-rendered Jinja2 templates for the browser UI.

Functions:

  • dashboard

    Render authenticated dashboard.

  • error_page

    Render a generic error page.

  • landing

    Render public landing page or redirect authenticated users.

  • user_card_partial

    Return user card HTML fragment for HTMX swap.

dashboard async

dashboard(
    request: Request,
    user: Annotated[SessionData, Depends(get_current_user)],
) -> HTMLResponse

Render authenticated dashboard.

Parameters:

  • request (Request) –

    Incoming request.

  • user (Annotated[SessionData, Depends(get_current_user)]) –

    Authenticated user session.

Returns:

  • HTMLResponse

    Dashboard page HTML.

Source code in src/lang_tools/webapp/routers/pages_router.py
@router.get("/dashboard", response_class=HTMLResponse, include_in_schema=False)
async def dashboard(
    request: Request,
    user: Annotated[SessionData, Depends(get_current_user)],
) -> HTMLResponse:
    """Render authenticated dashboard.

    Args:
        request: Incoming request.
        user: Authenticated user session.

    Returns:
        Dashboard page HTML.
    """
    templates = request.app.state.templates
    return templates.TemplateResponse(
        request,
        "pages/dashboard.html",
        {"user": user, "active_page": "dashboard"},
    )

error_page async

error_page(
    request: Request,
    status_code: int,
    user: Annotated[
        SessionData | None, Depends(get_optional_user)
    ],
) -> HTMLResponse

Render a generic error page.

Parameters:

  • request (Request) –

    Incoming request.

  • status_code (int) –

    HTTP status code to display.

  • user (Annotated[SessionData | None, Depends(get_optional_user)]) –

    Current user session, if any.

Returns:

  • HTMLResponse

    Error page HTML.

Source code in src/lang_tools/webapp/routers/pages_router.py
@router.get(
    "/error/{status_code}",
    response_class=HTMLResponse,
    include_in_schema=False,
)
async def error_page(
    request: Request,
    status_code: int,
    user: Annotated[SessionData | None, Depends(get_optional_user)],
) -> HTMLResponse:
    """Render a generic error page.

    Args:
        request: Incoming request.
        status_code: HTTP status code to display.
        user: Current user session, if any.

    Returns:
        Error page HTML.
    """
    messages: dict[int, str] = {
        400: "Bad request.",
        401: "You need to log in to access this page.",
        403: "You don't have permission to view this page.",
        404: "The page you're looking for doesn't exist.",
        500: "Something went wrong on our end.",
    }
    message = messages.get(status_code, "An unexpected error occurred.")

    templates = request.app.state.templates
    return templates.TemplateResponse(
        request,
        "pages/error.html",
        {
            "user": user,
            "status_code": status_code,
            "message": message,
        },
        status_code=status_code,
    )

landing async

landing(
    request: Request,
    user: Annotated[
        SessionData | None, Depends(get_optional_user)
    ],
    error: Annotated[str | None, Query()] = None,
) -> HTMLResponse | RedirectResponse

Render public landing page or redirect authenticated users.

Parameters:

  • request (Request) –

    Incoming request.

  • user (Annotated[SessionData | None, Depends(get_optional_user)]) –

    Current user session, if any.

  • error (Annotated[str | None, Query()], default: None ) –

    OAuth error code from callback redirect.

Returns:

  • HTMLResponse | RedirectResponse

    Landing page HTML or redirect to dashboard.

Source code in src/lang_tools/webapp/routers/pages_router.py
@router.get(
    "/",
    response_model=None,
    response_class=HTMLResponse,
    include_in_schema=False,
)
async def landing(
    request: Request,
    user: Annotated[SessionData | None, Depends(get_optional_user)],
    error: Annotated[str | None, Query()] = None,
) -> HTMLResponse | RedirectResponse:
    """Render public landing page or redirect authenticated users.

    Args:
        request: Incoming request.
        user: Current user session, if any.
        error: OAuth error code from callback redirect.

    Returns:
        Landing page HTML or redirect to dashboard.
    """
    if user is not None:
        return RedirectResponse(url="/dashboard", status_code=302)

    flash = None
    if error:
        flash = {
            "type": "danger",
            "message": _ERROR_MESSAGES.get(error, f"An error occurred: {error}"),
        }

    templates = request.app.state.templates
    return templates.TemplateResponse(
        request,
        "pages/landing.html",
        {"user": None, "flash": flash, "active_page": "landing"},
    )

user_card_partial async

user_card_partial(
    request: Request,
    user: Annotated[SessionData, Depends(get_current_user)],
) -> HTMLResponse

Return user card HTML fragment for HTMX swap.

Parameters:

  • request (Request) –

    Incoming request.

  • user (Annotated[SessionData, Depends(get_current_user)]) –

    Authenticated user session.

Returns:

  • HTMLResponse

    User card partial HTML (no base layout).

Source code in src/lang_tools/webapp/routers/pages_router.py
@router.get(
    "/pages/partials/user-card",
    response_class=HTMLResponse,
    include_in_schema=False,
)
async def user_card_partial(
    request: Request,
    user: Annotated[SessionData, Depends(get_current_user)],
) -> HTMLResponse:
    """Return user card HTML fragment for HTMX swap.

    Args:
        request: Incoming request.
        user: Authenticated user session.

    Returns:
        User card partial HTML (no base layout).
    """
    templates = request.app.state.templates
    return templates.TemplateResponse(
        request,
        "partials/user_card.html",
        {"user": user},
    )