def with_loader_criteria(
entity_or_base: _EntityType[Any],
- where_criteria: _ColumnExpressionArgument[bool],
+ where_criteria: Union[
+ _ColumnExpressionArgument[bool],
+ Callable[[Any], _ColumnExpressionArgument[bool]],
+ ],
loader_only: bool = False,
include_aliases: bool = False,
propagate_to_loaders: bool = True,
def __init__(
self,
entity_or_base: _EntityType[Any],
- where_criteria: _ColumnExpressionArgument[bool],
+ where_criteria: Union[
+ _ColumnExpressionArgument[bool],
+ Callable[[Any], _ColumnExpressionArgument[bool]],
+ ],
loader_only: bool = False,
include_aliases: bool = False,
propagate_to_loaders: bool = True,
def __init__(
self,
- fn: _LambdaType,
+ fn: _AnyLambdaType,
role: Type[roles.SQLRole],
opts: Union[Type[LambdaOptions], LambdaOptions] = LambdaOptions,
lambda_args: Tuple[Any, ...] = (),
from __future__ import annotations
+from sqlalchemy import ColumnElement
from sqlalchemy import ForeignKey
from sqlalchemy import orm
from sqlalchemy import select
# EXPECTED_MYPY_RE: Argument 1 to .* has incompatible type .*
orm.undefer(B.a).undefer("bar"),
)
+
+
+# test 10959
+def test_10959_with_loader_criteria() -> None:
+ def where_criteria(cls_: type[A]) -> ColumnElement[bool]:
+ return cls_.data == "some data"
+
+ orm.with_loader_criteria(A, lambda cls: cls.data == "some data")
+ orm.with_loader_criteria(A, where_criteria)