Extending¶
Customization hooks for filter operators and value serialization.
Custom filter operators¶
register_op
¶
register_op(
name: str,
*,
wire: str | None = None,
builder: BuilderCall | None = None,
predicate: ValueFormatter | None = None,
) -> Callable[[BuilderCall], BuilderCall] | BuilderCall
Register a filter operator (decorator or callable).
Used as a decorator::
@register_op("starts_with")
def starts_with(b, col, val): return b.like(col, f"{val}%")
Or directly::
register_op("starts_with", builder=starts_with)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Python method name exposed as |
required |
wire
|
str | None
|
PostgREST operator string for predicate groups ( |
None
|
builder
|
BuilderCall | None
|
The implementation function. Omit when using as a decorator. |
None
|
predicate
|
ValueFormatter | None
|
Value-only formatter |
None
|
Returns:
| Type | Description |
|---|---|
Callable[[BuilderCall], BuilderCall] | BuilderCall
|
The registered function when |
Source code in src/supabase_orm/_filters.py
Custom serializers¶
register_serializer
¶
Register a wire-value serializer for tp and its subclasses.
The serializer fn is called by :func:serialize whenever it
encounters a value of type tp (or a subclass). Registration is
process-global; the resolved-subclass cache is cleared so previously
cached dispatch decisions get re-evaluated against the new entry.
Example
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
tp
|
type
|
The exact Python type to register. Subclasses dispatch via
|
required |
fn
|
Serializer
|
Callable that takes a value and returns a JSON-native form
( |
required |
Source code in src/supabase_orm/_serializers.py
serialize
¶
Coerce value to a JSON-native form using the registered serializers.
Dispatch order:
str/int/float/bool/None— returned as-is.- Exact-type or resolved-subclass cache hit — registered serializer fires.
- First-time subclass — walk the registry, cache the match.
dict/list/tuple/set— recurse element-by-element.- Unknown — returned unchanged (postgrest-py decides).
Built-in registrations: UUID → str, datetime / date →
ISO 8601 strings, Decimal → str, Enum → .value,
Pydantic BaseModel → model_dump(mode="json", **__model_dump_kwargs__).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
value
|
Any
|
Any Python value the ORM is about to send on the wire. |
required |
Returns:
| Type | Description |
|---|---|
Any
|
A JSON-serializable form of |