Fix a lot of missing relationship information, plus some upstream CRUDKit changes.

This commit is contained in:
Yaro Kasear 2025-09-05 09:45:22 -05:00
parent 8643d177ca
commit cf56baabe2
11 changed files with 82 additions and 22 deletions

View file

@ -1,5 +1,5 @@
from typing import Type, TypeVar, Generic
from sqlalchemy.orm import Session
from sqlalchemy.orm import Session, with_polymorphic
from crudkit.core.base import Version
from crudkit.core.spec import CRUDSpec
@ -9,13 +9,22 @@ def _is_truthy(val):
return str(val).lower() in ('1', 'true', 'yes', 'on')
class CRUDService(Generic[T]):
def __init__(self, model: Type[T], session: Session):
def __init__(self, model: Type[T], session: Session, polymorphic: bool = False):
self.model = model
self.session = session
self.polymorphic = polymorphic
self.supports_soft_delete = hasattr(model, 'is_deleted')
def get_query(self):
if self.polymorphic:
poly_model = with_polymorphic(self.model, '*')
return self.session.query(poly_model)
else:
base_only = with_polymorphic(self.model, [], flat=True)
return self.session.query(base_only)
def get(self, id: int, include_deleted: bool = False) -> T | None:
obj = self.session.get(self.model, id)
obj = self.get_query().filter_by(id=id).first()
if obj is None:
return None
if self.supports_soft_delete and not include_deleted and obj.is_deleted:
@ -23,7 +32,7 @@ class CRUDService(Generic[T]):
return obj
def list(self, params=None) -> list[T]:
query = self.session.query(self.model)
query = self.get_query()
if params:
if self.supports_soft_delete: