Source code for pgcraft.extensions.postgrest
"""PostgREST extension for pgcraft."""
from __future__ import annotations
from dataclasses import dataclass
from typing import TYPE_CHECKING
from pgcraft.extension import PGCraftExtension
from pgcraft.extensions.postgrest.plugin import PostgRESTPlugin
from pgcraft.extensions.postgrest.view import PostgRESTView
if TYPE_CHECKING:
from sqlalchemy import MetaData
__all__ = [
"PostgRESTExtension",
"PostgRESTPlugin",
"PostgRESTView",
]
[docs]
@dataclass
class PostgRESTExtension(PGCraftExtension):
"""Wire PostgREST roles and grants into the pgcraft lifecycle.
When registered on a :class:`~pgcraft.config.PGCraftConfig`,
this extension calls
:func:`~pgcraft.models.roles.register_roles` during
metadata configuration so that PostgREST roles and
per-resource grants are emitted by Alembic autogenerate.
Without this extension, no roles or grants are registered.
Example::
from pgcraft.config import PGCraftConfig
from pgcraft.extensions.postgrest import (
PostgRESTExtension,
PostgRESTView,
)
config = PGCraftConfig()
config.use(PostgRESTExtension())
Args:
name: Extension name. Defaults to ``"postgrest"``.
schema: Default API schema name. Reserved for future
use by API view plugins.
"""
name: str = "postgrest"
schema: str = "api"
[docs]
def configure_metadata(self, metadata: MetaData) -> None:
"""Register PostgREST roles and grants on *metadata*."""
from pgcraft.models.roles import ( # noqa: PLC0415
register_roles,
)
register_roles(metadata)