diff options
Diffstat (limited to 'lib/sqlalchemy/sql/traversals.py')
| -rw-r--r-- | lib/sqlalchemy/sql/traversals.py | 39 |
1 files changed, 13 insertions, 26 deletions
diff --git a/lib/sqlalchemy/sql/traversals.py b/lib/sqlalchemy/sql/traversals.py index 983cd8ebd..4b55560ec 100644 --- a/lib/sqlalchemy/sql/traversals.py +++ b/lib/sqlalchemy/sql/traversals.py @@ -23,7 +23,6 @@ from typing import Optional from typing import Set from typing import Tuple from typing import Type -from typing import TypeVar from . import operators from .cache_key import HasCacheKey @@ -34,6 +33,8 @@ from .visitors import HasTraversalDispatch from .visitors import HasTraverseInternals from .. import util from ..util import langhelpers +from ..util.typing import Self + SKIP_TRAVERSE = util.symbol("skip_traverse") COMPARE_FAILED = False @@ -68,9 +69,6 @@ def _preconfigure_traversals(target_hierarchy: Type[Any]) -> None: ) -SelfHasShallowCopy = TypeVar("SelfHasShallowCopy", bound="HasShallowCopy") - - class HasShallowCopy(HasTraverseInternals): """attribute-wide operations that are useful for classes that use __slots__ and therefore can't operate on their attributes in a dictionary. @@ -82,9 +80,7 @@ class HasShallowCopy(HasTraverseInternals): if typing.TYPE_CHECKING: - def _generated_shallow_copy_traversal( - self: SelfHasShallowCopy, other: SelfHasShallowCopy - ) -> None: + def _generated_shallow_copy_traversal(self, other: Self) -> None: ... def _generated_shallow_from_dict_traversal( @@ -97,10 +93,10 @@ class HasShallowCopy(HasTraverseInternals): @classmethod def _generate_shallow_copy( - cls: Type[SelfHasShallowCopy], + cls, internal_dispatch: _TraverseInternalsType, method_name: str, - ) -> Callable[[SelfHasShallowCopy, SelfHasShallowCopy], None]: + ) -> Callable[[Self, Self], None]: code = "\n".join( f" other.{attrname} = self.{attrname}" for attrname, _ in internal_dispatch @@ -110,10 +106,10 @@ class HasShallowCopy(HasTraverseInternals): @classmethod def _generate_shallow_to_dict( - cls: Type[SelfHasShallowCopy], + cls, internal_dispatch: _TraverseInternalsType, method_name: str, - ) -> Callable[[SelfHasShallowCopy], Dict[str, Any]]: + ) -> Callable[[Self], Dict[str, Any]]: code = ",\n".join( f" '{attrname}': self.{attrname}" for attrname, _ in internal_dispatch @@ -123,10 +119,10 @@ class HasShallowCopy(HasTraverseInternals): @classmethod def _generate_shallow_from_dict( - cls: Type[SelfHasShallowCopy], + cls, internal_dispatch: _TraverseInternalsType, method_name: str, - ) -> Callable[[SelfHasShallowCopy, Dict[str, Any]], None]: + ) -> Callable[[Self, Dict[str, Any]], None]: code = "\n".join( f" self.{attrname} = d['{attrname}']" for attrname, _ in internal_dispatch @@ -169,12 +165,10 @@ class HasShallowCopy(HasTraverseInternals): cls._generated_shallow_to_dict_traversal = shallow_to_dict # type: ignore # noqa: E501 return shallow_to_dict(self) - def _shallow_copy_to( - self: SelfHasShallowCopy, other: SelfHasShallowCopy - ) -> None: + def _shallow_copy_to(self, other: Self) -> None: cls = self.__class__ - shallow_copy: Callable[[SelfHasShallowCopy, SelfHasShallowCopy], None] + shallow_copy: Callable[[Self, Self], None] try: shallow_copy = cls.__dict__["_generated_shallow_copy_traversal"] except KeyError: @@ -185,18 +179,13 @@ class HasShallowCopy(HasTraverseInternals): cls._generated_shallow_copy_traversal = shallow_copy # type: ignore # noqa: E501 shallow_copy(self, other) - def _clone(self: SelfHasShallowCopy, **kw: Any) -> SelfHasShallowCopy: + def _clone(self, **kw: Any) -> Self: """Create a shallow copy""" c = self.__class__.__new__(self.__class__) self._shallow_copy_to(c) return c -SelfGenerativeOnTraversal = TypeVar( - "SelfGenerativeOnTraversal", bound="GenerativeOnTraversal" -) - - class GenerativeOnTraversal(HasShallowCopy): """Supplies Generative behavior but making use of traversals to shallow copy. @@ -210,9 +199,7 @@ class GenerativeOnTraversal(HasShallowCopy): __slots__ = () - def _generate( - self: SelfGenerativeOnTraversal, - ) -> SelfGenerativeOnTraversal: + def _generate(self) -> Self: cls = self.__class__ s = cls.__new__(cls) self._shallow_copy_to(s) |
