Skip to content

Class tigrbl_auth.orm.tenant.Tenant

tigrbl_auth.orm.tenant.Tenant

Bases: TenantBase, Bootstrappable

name class-attribute instance-attribute

name = acol(
    spec=ColumnSpec(
        storage=S(String, nullable=False, unique=True),
        field=F(
            constraints={"max_length": 120},
            required_in=("create",),
        ),
        io=IO(
            in_verbs=("create", "update", "replace"),
            out_verbs=("read", "list"),
            filter_ops=("eq", "ilike"),
            sortable=True,
        ),
    )
)

email class-attribute instance-attribute

email = acol(
    spec=ColumnSpec(
        storage=S(String, nullable=False, unique=True),
        field=F(
            constraints={"max_length": 120},
            required_in=("create",),
        ),
        io=IO(
            in_verbs=("create", "update", "replace"),
            out_verbs=("read", "list"),
            filter_ops=("eq", "ilike"),
            sortable=True,
        ),
    )
)

users class-attribute instance-attribute

users = relationship(
    "User",
    back_populates="tenant",
    cascade="all, delete-orphan",
)

clients class-attribute instance-attribute

clients = relationship(
    "Client",
    back_populates="tenant",
    cascade="all, delete-orphan",
)

DEFAULT_ROWS class-attribute instance-attribute

DEFAULT_ROWS = [
    {
        "id": UUID("FFFFFFFF-0000-0000-0000-000000000000"),
        "email": "tenant@example.com",
        "name": "Public",
        "slug": "public",
    }
]

created_at class-attribute instance-attribute

created_at = acol(
    spec=ColumnSpec(
        storage=S(
            type_=TZDateTime,
            default=tzutcnow,
            nullable=False,
        ),
        field=F(py_type=datetime),
        io=RO_IO,
    )
)

updated_at class-attribute instance-attribute

updated_at = acol(
    spec=ColumnSpec(
        storage=S(
            type_=TZDateTime,
            default=tzutcnow,
            onupdate=tzutcnow,
            nullable=False,
        ),
        field=F(py_type=datetime),
        io=RO_IO,
    )
)

slug class-attribute instance-attribute

slug = acol(
    spec=ColumnSpec(
        storage=S(
            type_=String, unique=True, nullable=False
        ),
        field=F(
            py_type=str, constraints={"max_length": 120}
        ),
        io=CRUD_IO,
    )
)

id class-attribute instance-attribute

id = acol(
    spec=ColumnSpec(
        storage=S(
            type_=PgUUID(as_uuid=True),
            primary_key=True,
            default=uuid4,
        ),
        field=F(
            py_type=UUID,
            constraints={"examples": [uuid_example]},
        ),
        io=RO_IO,
    )
)

metadata class-attribute instance-attribute

metadata = MetaData(
    naming_convention={
        "pk": "pk_%(table_name)s",
        "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
        "ix": "ix_%(table_name)s_%(column_0_name)s",
        "uq": "uq_%(table_name)s_%(column_0_name)s",
        "ck": "ck_%(table_name)s_%(column_0_name)s_%(constraint_type)s",
    }
)

ensure_bootstrapped classmethod

ensure_bootstrapped(db, rows=None)
Source code in tigrbl/orm/mixins/bootstrappable.py
55
56
57
58
59
60
61
@classmethod
def ensure_bootstrapped(
    cls, db: Session, rows: Iterable[dict[str, Any]] | None = None
) -> None:
    rows = cls.DEFAULT_ROWS if rows is None else list(rows)
    if rows:
        cls._insert_rows(db, rows)