Source code for httk.serve.web.model.errors

[docs] class WebError(Exception): def __init__(self, message: str, *, status_code: int = 500) -> None: super().__init__(message)
[docs] self.status_code = status_code
[docs] class NotFoundError(WebError): def __init__(self, message: str = "Not Found") -> None: super().__init__(message, status_code=404)
[docs] class FunctionInjectionError(WebError): def __init__(self, message: str) -> None: super().__init__(message, status_code=500)
[docs] class WidgetError(WebError): """Base error for a widget invocation with source-aware diagnostics."""
[docs] phase = "widget"
def __init__( self, message: str, *, source_path: object | None = None, line: int | None = None, column: int | None = None, snippet: str | None = None, widget_name: str | None = None, widget_id: str | None = None, correction: str | None = None, ) -> None: details: list[str] = [f"Widget {self.phase} error"] if source_path is not None: location = str(source_path) if line is not None: location += f":{line}" if column is not None: location += f":{column}" details.append(location) if widget_name: details.append(f"widget={widget_name}") if widget_id: details.append(f"id={widget_id}") details.append(message) if snippet: details.append(f"source: {snippet}") if correction: details.append(f"Fix: {correction}") super().__init__("; ".join(details), status_code=500)
[docs] class WidgetParseError(WidgetError):
[docs] phase = "parse"
[docs] class WidgetDiscoveryError(WidgetError):
[docs] phase = "discovery"
[docs] class WidgetValidationError(WidgetError):
[docs] phase = "validation"
[docs] class WidgetRenderingError(WidgetError):
[docs] phase = "rendering"