diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-03-08 17:14:41 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-03-13 15:29:20 -0400 |
commit | 769fa67d842035dd852ab8b6a26ea3f110a51131 (patch) | |
tree | 5c121caca336071091c6f5ea4c54743c92d6458a /lib/sqlalchemy/sql/_py_util.py | |
parent | 77fc8216a74e6b2d0efc6591c6c735687bd10002 (diff) | |
download | sqlalchemy-769fa67d842035dd852ab8b6a26ea3f110a51131.tar.gz |
pep-484: sqlalchemy.sql pass one
sqlalchemy.sql will require many passes to get all
modules even gradually typed. Will have to pick and
choose what modules can be strictly typed vs. which
can be gradual.
in this patch, emphasis is on visitors.py, cache_key.py,
annotations.py for strict typing, compiler.py is on gradual
typing but has much more structure, in particular where it
connects with the outside world.
The work within compiler.py also reached back out to
engine/cursor.py , default.py quite a bit.
References: #6810
Change-Id: I6e8a29f6013fd216e43d45091bc193f8be0368fd
Diffstat (limited to 'lib/sqlalchemy/sql/_py_util.py')
-rw-r--r-- | lib/sqlalchemy/sql/_py_util.py | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/lib/sqlalchemy/sql/_py_util.py b/lib/sqlalchemy/sql/_py_util.py index 96e8f6b2c..9f18b882d 100644 --- a/lib/sqlalchemy/sql/_py_util.py +++ b/lib/sqlalchemy/sql/_py_util.py @@ -7,7 +7,16 @@ from __future__ import annotations +import typing +from typing import Any from typing import Dict +from typing import Tuple +from typing import Union + +from ..util.typing import Literal + +if typing.TYPE_CHECKING: + from .cache_key import CacheConst class prefix_anon_map(Dict[str, str]): @@ -22,16 +31,18 @@ class prefix_anon_map(Dict[str, str]): """ - def __missing__(self, key): + def __missing__(self, key: str) -> str: (ident, derived) = key.split(" ", 1) anonymous_counter = self.get(derived, 1) - self[derived] = anonymous_counter + 1 + self[derived] = anonymous_counter + 1 # type: ignore value = f"{derived}_{anonymous_counter}" self[key] = value return value -class cache_anon_map(Dict[int, str]): +class cache_anon_map( + Dict[Union[int, "Literal[CacheConst.NO_CACHE]"], Union[Literal[True], str]] +): """A map that creates new keys for missing key access. Produces an incrementing sequence given a series of unique keys. @@ -45,11 +56,13 @@ class cache_anon_map(Dict[int, str]): _index = 0 - def get_anon(self, object_): + def get_anon(self, object_: Any) -> Tuple[str, bool]: idself = id(object_) if idself in self: - return self[idself], True + s_val = self[idself] + assert s_val is not True + return s_val, True else: # inline of __missing__ self[idself] = id_ = str(self._index) @@ -57,7 +70,7 @@ class cache_anon_map(Dict[int, str]): return id_, False - def __missing__(self, key): + def __missing__(self, key: int) -> str: self[key] = val = str(self._index) self._index += 1 return val |