diff --git a/crudkit/dsl.py b/crudkit/dsl.py index 552f850..80c5499 100644 --- a/crudkit/dsl.py +++ b/crudkit/dsl.py @@ -1,7 +1,6 @@ from dataclasses import dataclass, field from typing import List, Dict, Any, Optional -from sqlalchemy import asc, desc, select, func -from sqlalchemy.orm import selectinload, joinedload, Load +from sqlalchemy import asc, desc, select, false() @dataclass class QuerySpec: @@ -25,7 +24,17 @@ FILTER_OPS = { } def build_query(Model, spec: QuerySpec, eager_policy=None): - stmt = select(Model).where(Model.deleted.is_(False)) + stmt = select(Model) + + # filter out soft-deleted rows + deleted_attr = getattr(Model, "deleted", None) + if deleted_attr is not None: + stmt = stmt.where(deleted_attr == false()) + else: + is_deleted_attr = getattr(Model, "is_deleted", None) + if is_deleted_attr is not None: + stmt = stmt.where(is_deleted_attr == false()) + # filters for raw_key, val in spec.filters.items(): for op in FILTER_OPS: