This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
# sql/visitors.py
|
||||
# Copyright (C) 2005-2025 the SQLAlchemy authors and contributors
|
||||
# Copyright (C) 2005-2023 the SQLAlchemy authors and contributors
|
||||
# <see AUTHORS file>
|
||||
#
|
||||
# This module is part of SQLAlchemy and is released under
|
||||
# the MIT License: https://www.opensource.org/licenses/mit-license.php
|
||||
|
||||
"""Visitor/traversal interface and library functions."""
|
||||
"""Visitor/traversal interface and library functions.
|
||||
|
||||
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
@@ -69,7 +72,8 @@ __all__ = [
|
||||
|
||||
|
||||
class _CompilerDispatchType(Protocol):
|
||||
def __call__(_self, self: Visitable, visitor: Any, **kw: Any) -> Any: ...
|
||||
def __call__(_self, self: Visitable, visitor: Any, **kw: Any) -> Any:
|
||||
...
|
||||
|
||||
|
||||
class Visitable:
|
||||
@@ -96,7 +100,8 @@ class Visitable:
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
|
||||
def _compiler_dispatch(self, visitor: Any, **kw: Any) -> str: ...
|
||||
def _compiler_dispatch(self, visitor: Any, **kw: Any) -> str:
|
||||
...
|
||||
|
||||
def __init_subclass__(cls) -> None:
|
||||
if "__visit_name__" in cls.__dict__:
|
||||
@@ -488,7 +493,8 @@ class HasTraverseInternals:
|
||||
|
||||
|
||||
class _InternalTraversalDispatchType(Protocol):
|
||||
def __call__(s, self: object, visitor: HasTraversalDispatch) -> Any: ...
|
||||
def __call__(s, self: object, visitor: HasTraversalDispatch) -> Any:
|
||||
...
|
||||
|
||||
|
||||
class HasTraversalDispatch:
|
||||
@@ -596,11 +602,13 @@ class ExternallyTraversible(HasTraverseInternals, Visitable):
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
|
||||
def _annotate(self, values: _AnnotationDict) -> Self: ...
|
||||
def _annotate(self, values: _AnnotationDict) -> Self:
|
||||
...
|
||||
|
||||
def get_children(
|
||||
self, *, omit_attrs: Tuple[str, ...] = (), **kw: Any
|
||||
) -> Iterable[ExternallyTraversible]: ...
|
||||
) -> Iterable[ExternallyTraversible]:
|
||||
...
|
||||
|
||||
def _clone(self, **kw: Any) -> Self:
|
||||
"""clone this element"""
|
||||
@@ -630,11 +638,13 @@ _TraverseCallableType = Callable[[_ET], None]
|
||||
|
||||
|
||||
class _CloneCallableType(Protocol):
|
||||
def __call__(self, element: _ET, **kw: Any) -> _ET: ...
|
||||
def __call__(self, element: _ET, **kw: Any) -> _ET:
|
||||
...
|
||||
|
||||
|
||||
class _TraverseTransformCallableType(Protocol[_ET]):
|
||||
def __call__(self, element: _ET, **kw: Any) -> Optional[_ET]: ...
|
||||
def __call__(self, element: _ET, **kw: Any) -> Optional[_ET]:
|
||||
...
|
||||
|
||||
|
||||
_ExtT = TypeVar("_ExtT", bound="ExternalTraversal")
|
||||
@@ -670,12 +680,12 @@ class ExternalTraversal(util.MemoizedSlots):
|
||||
return iterate(obj, self.__traverse_options__)
|
||||
|
||||
@overload
|
||||
def traverse(self, obj: Literal[None]) -> None: ...
|
||||
def traverse(self, obj: Literal[None]) -> None:
|
||||
...
|
||||
|
||||
@overload
|
||||
def traverse(
|
||||
self, obj: ExternallyTraversible
|
||||
) -> ExternallyTraversible: ...
|
||||
def traverse(self, obj: ExternallyTraversible) -> ExternallyTraversible:
|
||||
...
|
||||
|
||||
def traverse(
|
||||
self, obj: Optional[ExternallyTraversible]
|
||||
@@ -736,12 +746,12 @@ class CloningExternalTraversal(ExternalTraversal):
|
||||
return [self.traverse(x) for x in list_]
|
||||
|
||||
@overload
|
||||
def traverse(self, obj: Literal[None]) -> None: ...
|
||||
def traverse(self, obj: Literal[None]) -> None:
|
||||
...
|
||||
|
||||
@overload
|
||||
def traverse(
|
||||
self, obj: ExternallyTraversible
|
||||
) -> ExternallyTraversible: ...
|
||||
def traverse(self, obj: ExternallyTraversible) -> ExternallyTraversible:
|
||||
...
|
||||
|
||||
def traverse(
|
||||
self, obj: Optional[ExternallyTraversible]
|
||||
@@ -776,12 +786,12 @@ class ReplacingExternalTraversal(CloningExternalTraversal):
|
||||
return None
|
||||
|
||||
@overload
|
||||
def traverse(self, obj: Literal[None]) -> None: ...
|
||||
def traverse(self, obj: Literal[None]) -> None:
|
||||
...
|
||||
|
||||
@overload
|
||||
def traverse(
|
||||
self, obj: ExternallyTraversible
|
||||
) -> ExternallyTraversible: ...
|
||||
def traverse(self, obj: ExternallyTraversible) -> ExternallyTraversible:
|
||||
...
|
||||
|
||||
def traverse(
|
||||
self, obj: Optional[ExternallyTraversible]
|
||||
@@ -856,7 +866,8 @@ def traverse_using(
|
||||
iterator: Iterable[ExternallyTraversible],
|
||||
obj: Literal[None],
|
||||
visitors: Mapping[str, _TraverseCallableType[Any]],
|
||||
) -> None: ...
|
||||
) -> None:
|
||||
...
|
||||
|
||||
|
||||
@overload
|
||||
@@ -864,7 +875,8 @@ def traverse_using(
|
||||
iterator: Iterable[ExternallyTraversible],
|
||||
obj: ExternallyTraversible,
|
||||
visitors: Mapping[str, _TraverseCallableType[Any]],
|
||||
) -> ExternallyTraversible: ...
|
||||
) -> ExternallyTraversible:
|
||||
...
|
||||
|
||||
|
||||
def traverse_using(
|
||||
@@ -908,7 +920,8 @@ def traverse(
|
||||
obj: Literal[None],
|
||||
opts: Mapping[str, Any],
|
||||
visitors: Mapping[str, _TraverseCallableType[Any]],
|
||||
) -> None: ...
|
||||
) -> None:
|
||||
...
|
||||
|
||||
|
||||
@overload
|
||||
@@ -916,7 +929,8 @@ def traverse(
|
||||
obj: ExternallyTraversible,
|
||||
opts: Mapping[str, Any],
|
||||
visitors: Mapping[str, _TraverseCallableType[Any]],
|
||||
) -> ExternallyTraversible: ...
|
||||
) -> ExternallyTraversible:
|
||||
...
|
||||
|
||||
|
||||
def traverse(
|
||||
@@ -931,13 +945,11 @@ def traverse(
|
||||
|
||||
from sqlalchemy.sql import visitors
|
||||
|
||||
stmt = select(some_table).where(some_table.c.foo == "bar")
|
||||
|
||||
stmt = select(some_table).where(some_table.c.foo == 'bar')
|
||||
|
||||
def visit_bindparam(bind_param):
|
||||
print("found bound value: %s" % bind_param.value)
|
||||
|
||||
|
||||
visitors.traverse(stmt, {}, {"bindparam": visit_bindparam})
|
||||
|
||||
The iteration of objects uses the :func:`.visitors.iterate` function,
|
||||
@@ -963,7 +975,8 @@ def cloned_traverse(
|
||||
obj: Literal[None],
|
||||
opts: Mapping[str, Any],
|
||||
visitors: Mapping[str, _TraverseCallableType[Any]],
|
||||
) -> None: ...
|
||||
) -> None:
|
||||
...
|
||||
|
||||
|
||||
# a bit of controversy here, as the clone of the lead element
|
||||
@@ -975,7 +988,8 @@ def cloned_traverse(
|
||||
obj: _ET,
|
||||
opts: Mapping[str, Any],
|
||||
visitors: Mapping[str, _TraverseCallableType[Any]],
|
||||
) -> _ET: ...
|
||||
) -> _ET:
|
||||
...
|
||||
|
||||
|
||||
def cloned_traverse(
|
||||
@@ -1074,7 +1088,8 @@ def replacement_traverse(
|
||||
obj: Literal[None],
|
||||
opts: Mapping[str, Any],
|
||||
replace: _TraverseTransformCallableType[Any],
|
||||
) -> None: ...
|
||||
) -> None:
|
||||
...
|
||||
|
||||
|
||||
@overload
|
||||
@@ -1082,7 +1097,8 @@ def replacement_traverse(
|
||||
obj: _CE,
|
||||
opts: Mapping[str, Any],
|
||||
replace: _TraverseTransformCallableType[Any],
|
||||
) -> _CE: ...
|
||||
) -> _CE:
|
||||
...
|
||||
|
||||
|
||||
@overload
|
||||
@@ -1090,7 +1106,8 @@ def replacement_traverse(
|
||||
obj: ExternallyTraversible,
|
||||
opts: Mapping[str, Any],
|
||||
replace: _TraverseTransformCallableType[Any],
|
||||
) -> ExternallyTraversible: ...
|
||||
) -> ExternallyTraversible:
|
||||
...
|
||||
|
||||
|
||||
def replacement_traverse(
|
||||
|
||||
Reference in New Issue
Block a user