loom.rest.model¶
Declarative REST interface model.
Defines the data structures that describe how UseCases are exposed over HTTP.
No FastAPI or transport-specific code lives here — this module is the
declaration layer; loom.rest.compiler validates and compiles it at
startup and loom.rest.router_runtime binds it to FastAPI.
Usage:
class UserRestInterface(RestInterface[User]):
prefix = "/users"
tags = ("Users",)
auto = True
include = ("create", "get", "list", "update")
routes = (
RestRoute(use_case=CreateUserUseCase, method="POST", path="/"),
RestRoute(use_case=GetUserUseCase, method="GET", path="/{user_id}"),
RestRoute(use_case=ListUsersUseCase, method="GET", path="/"),
RestRoute(
use_case=UpdateUserUseCase,
method="PATCH",
path="/{user_id}",
summary="Partial update user",
),
)
Functions
|
Return the concrete model type from |
Classes
|
Global REST API defaults applied when interface or route level is unset. |
Base class for declarative REST interface definitions. |
|
|
Declaration of a single HTTP endpoint bound to a UseCase. |
- class loom.rest.model.RestApiDefaults(pagination_mode=PaginationMode.OFFSET, allow_pagination_override=True, profile_default='default', allowed_profiles=<factory>)[source]¶
Bases:
objectGlobal REST API defaults applied when interface or route level is unset.
- Parameters:
pagination_mode (PaginationMode) – Default pagination strategy. Defaults to
PaginationMode.OFFSET.profile_default (str) – Default query profile name. Defaults to
"default".allowed_profiles (tuple[str, ...]) – Globally allowed profiles. Defaults to empty (no restriction imposed at global level).
allow_pagination_override (bool) – Whether query parameters may override the configured pagination mode. Defaults to
Truefor backwards compatibility.
Example:
defaults = RestApiDefaults( pagination_mode=PaginationMode.CURSOR, profile_default="summary", )
- class loom.rest.model.RestInterface[source]¶
Bases:
Generic[T]Base class for declarative REST interface definitions.
Subclass to expose one or more UseCases under a common HTTP prefix. All class attributes have sensible defaults; override only what differs.
- include¶
Whitelist of CRUD operation names to expose when
auto=True. Accepted values:"create","get","list","update","delete". Empty tuple means all operations are allowed.
- routes¶
Explicit route declarations. Custom routes always override auto-CRUD routes with the same
(method, path).- Type:
- pagination_mode¶
Default pagination strategy for list endpoints in this interface. Overridden per-route by
RestRoute.pagination_mode.- Type:
- expose_profile¶
Whether this interface publicly accepts
?profile=...by default. Can be overridden per-route.- Type:
- allow_pagination_override¶
Whether list endpoints may switch pagination mode from query parameters by default.
- Type:
bool | None
Example:
class OrderRestInterface(RestInterface[Order]): prefix = "/orders" tags = ("Orders",) auto = True include = ("create", "get", "list") routes = ( RestRoute(use_case=CreateOrderUseCase, method="POST", path="/"), RestRoute(use_case=GetOrderUseCase, method="GET", path="/{order_id}"), RestRoute(use_case=ListOrdersUseCase, method="GET", path="/"), )
- class loom.rest.model.RestRoute(use_case, method, path, summary='', description='', status_code=200, pagination_mode=None, allow_pagination_override=None, profile_default='', allowed_profiles=(), expose_profile=False)[source]¶
Bases:
objectDeclaration of a single HTTP endpoint bound to a UseCase.
All fields except
use_case,method, andpathare optional and override interface-level or global defaults when set.- Parameters:
use_case (type[UseCase[Any, Any]]) – Concrete UseCase class that handles this endpoint.
method (str) – HTTP method in uppercase (
"GET","POST", etc.).path (str) – Path relative to the interface prefix. May include path parameters (e.g.
"/{user_id}").summary (str) – Short OpenAPI summary for the endpoint.
description (str) – Longer OpenAPI description.
status_code (int) – Default HTTP success status code. Defaults to
200.pagination_mode (PaginationMode | None) – Override pagination strategy for this route. When
None, inherits from the interface or global default.profile_default (str) – Default query profile for this route. When empty, inherits from the interface or global default.
allowed_profiles (tuple[str, ...]) – Profiles that callers may request. When empty, inherits from the interface or global default.
expose_profile (bool) – Whether to expose
?profile=as a public query parameter for this route. Defaults toFalse.allow_pagination_override (bool | None) – Whether callers may override the resolved pagination mode using query parameters. When
None, inherits from the interface or global default.
Example:
RestRoute( use_case=UpdateUserUseCase, method="PATCH", path="/{user_id}", summary="Partial update user", status_code=200, )