"""Application ORM configuration."""
from __future__ import annotations
from typing import TYPE_CHECKING, Any
from advanced_alchemy.base import UUIDAuditBase as TimestampedDatabaseModel
from advanced_alchemy.base import UUIDBase as DatabaseModel
from advanced_alchemy.base import orm_registry
from advanced_alchemy.mixins.audit import AuditColumns
if TYPE_CHECKING:
from advanced_alchemy.repository.typing import ModelT
from sqlalchemy import String
from sqlalchemy.orm import (
Mapped,
declarative_mixin,
mapped_column,
)
__all__ = ["AuditColumns", "DatabaseModel", "SlugKey", "TimestampedDatabaseModel", "model_from_dict", "orm_registry"]
[docs]
@declarative_mixin
class SlugKey:
"""Slug unique Field Model Mixin."""
__abstract__ = True
slug: Mapped[str] = mapped_column(String(length=100), index=True, nullable=False, unique=True, sort_order=-9)
[docs]
def model_from_dict(model: ModelT, **kwargs: Any) -> ModelT:
"""Return ORM Object from Dictionary."""
data = {}
for column in model.__table__.columns:
column_val = kwargs.get(column.name, None)
if column_val is not None:
data[column.name] = column_val
return model(**data) # type: ignore[no-any-return, operator]