--- /dev/null
+.. change::
+ :tags: bug, orm
+
+ Marked the internal ``EvaluatorCompiler`` module as private to the ORM, and
+ renamed it to ``_EvaluatorCompiler``. For users that may have been relying
+ upon this, the name ``EvaluatorCompiler`` is still present, however this
+ use is not supported and will be removed in a future release.
mapper = update_options._subject_mapper
target_cls = mapper.class_
- evaluator_compiler = evaluator.EvaluatorCompiler(target_cls)
+ evaluator_compiler = evaluator._EvaluatorCompiler(target_cls)
crit = ()
if statement._where_criteria:
crit += statement._where_criteria
"""
mapper = update_options._subject_mapper
target_cls = mapper.class_
- evaluator_compiler = evaluator.EvaluatorCompiler(target_cls)
+ evaluator_compiler = evaluator._EvaluatorCompiler(target_cls)
resolved_values = cls._get_resolved_values(mapper, statement)
resolved_keys_as_propnames = cls._resolved_keys_as_propnames(
mapper, resolved_values
# the MIT License: https://www.opensource.org/licenses/mit-license.php
# mypy: ignore-errors
+"""Evaluation functions used **INTERNALLY** by ORM DML use cases.
+
+
+This module is **private, for internal use by SQLAlchemy**.
+
+.. versionchanged:: 2.0.4 renamed ``EvaluatorCompiler`` to
+ ``_EvaluatorCompiler``.
+
+"""
+
from __future__ import annotations
+from typing import Type
+
from . import exc as orm_exc
from .base import LoaderCallableStatus
from .base import PassiveFlag
from ..sql import operators
from ..sql.sqltypes import Integer
from ..sql.sqltypes import Numeric
+from ..util import warn_deprecated
class UnevaluatableError(exc.InvalidRequestError):
_EXPIRED_OBJECT = _ExpiredObject()
-class EvaluatorCompiler:
+class _EvaluatorCompiler:
def __init__(self, target_cls=None):
self.target_cls = target_cls
else:
val = clause.value
return lambda obj: val
+
+
+def __getattr__(name: str) -> Type[_EvaluatorCompiler]:
+ if name == "EvaluatorCompiler":
+ warn_deprecated(
+ "Direct use of 'EvaluatorCompiler' is not supported, and this "
+ "name will be removed in a future release. "
+ "'_EvaluatorCompiler' is for internal use only",
+ "2.0",
+ )
+ return _EvaluatorCompiler
+ else:
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
from sqlalchemy.testing.schema import Column
from sqlalchemy.testing.schema import Table
-compiler = evaluator.EvaluatorCompiler()
+compiler = evaluator._EvaluatorCompiler()
def eval_eq(clause, testcases=None):
User = self.classes.User
- compiler = evaluator.EvaluatorCompiler(User)
+ compiler = evaluator._EvaluatorCompiler(User)
with expect_raises_message(
evaluator.UnevaluatableError,
def test_raise_on_unannotated_unmatched_column(self):
User = self.classes.User
- compiler = evaluator.EvaluatorCompiler(User)
+ compiler = evaluator._EvaluatorCompiler(User)
assert_raises_message(
evaluator.UnevaluatableError,
cls.mapper_registry.map_imperatively(Keyword, keywords)
+class MiscDeprecationsTest(fixtures.TestBase):
+ def test_evaluator_is_private(self):
+ with expect_deprecated(
+ "Direct use of 'EvaluatorCompiler' is not supported, and this "
+ "name will be removed in a future release. "
+ "'_EvaluatorCompiler' is for internal use only"
+ ):
+ from sqlalchemy.orm.evaluator import EvaluatorCompiler
+
+ from sqlalchemy.orm.evaluator import _EvaluatorCompiler
+
+ is_(EvaluatorCompiler, _EvaluatorCompiler)
+
+
class DeprecatedQueryTest(_fixtures.FixtureTest, AssertsCompiledSQL):
__dialect__ = "default"