Skip to content

Commit 77743b8

Browse files
committed
fix: update soft_delete_filter - was having issues with aliased joins
1 parent bcb5bb0 commit 77743b8

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

db/core.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
from typing import Any, ClassVar
44

5-
from sqlalchemy import MetaData, event, select
5+
from sqlalchemy import MetaData, event, select, true
66
from sqlalchemy import inspect as sa_inspect
77
from sqlalchemy.exc import IntegrityError
88
from sqlalchemy.orm import Session as SASession
9-
from sqlalchemy.orm import with_loader_criteria
9+
from sqlalchemy.orm import class_mapper, with_loader_criteria
1010
from sqlalchemy.sql import expression
1111
from sqlmodel import Field, Session, SQLModel
1212

@@ -137,12 +137,16 @@ def _identity_dict_from_instance(instance: SoftDeleteModel) -> dict[str, Any] |
137137
return identity
138138

139139

140-
def _soft_delete_filter(cls) -> Any:
141-
mapper = sa_inspect(cls, raiseerr=False)
142-
if mapper is None:
143-
return expression.true()
144-
column = mapper.c.is_deleted
145-
return column.is_(False)
140+
def _soft_delete_filter(entity_cls) -> Any:
141+
try:
142+
# ensure this is a mapped class and has the column
143+
class_mapper(entity_cls)
144+
col = getattr(entity_cls, "is_deleted", None)
145+
if col is not None:
146+
return col.is_(False)
147+
except Exception:
148+
pass
149+
return true()
146150

147151

148152
@event.listens_for(SASession, "before_flush")
@@ -178,7 +182,7 @@ def _filter_soft_deleted(execute_state) -> None:
178182
execute_state.statement = execute_state.statement.options(
179183
with_loader_criteria(
180184
SoftDeleteModel,
181-
lambda cls: _soft_delete_filter(cls),
185+
_soft_delete_filter,
182186
include_aliases=True,
183187
)
184188
)

0 commit comments

Comments
 (0)