diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-04-07 12:37:23 -0400 |
---|---|---|
committer | mike bayer <mike_mp@zzzcomputing.com> | 2022-04-12 02:09:50 +0000 |
commit | aa9cd878e8249a4a758c7f968e929e92fede42a5 (patch) | |
tree | 1be1c9dc24dd247a150be55d65bfc56ebaf111bc /lib/sqlalchemy/util/_collections.py | |
parent | 98eae4e181cb2d1bbc67ec834bfad29dcba7f461 (diff) | |
download | sqlalchemy-aa9cd878e8249a4a758c7f968e929e92fede42a5.tar.gz |
pep-484: session, instancestate, etc
Also adds some fixes to annotation-based mapping
that have come up, as well as starts to add more
pep-484 test cases
Change-Id: Ia722bbbc7967a11b23b66c8084eb61df9d233fee
Diffstat (limited to 'lib/sqlalchemy/util/_collections.py')
-rw-r--r-- | lib/sqlalchemy/util/_collections.py | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/lib/sqlalchemy/util/_collections.py b/lib/sqlalchemy/util/_collections.py index eb5b16b65..eea76f60b 100644 --- a/lib/sqlalchemy/util/_collections.py +++ b/lib/sqlalchemy/util/_collections.py @@ -22,6 +22,7 @@ from typing import Generic from typing import Iterable from typing import Iterator from typing import List +from typing import Mapping from typing import Optional from typing import overload from typing import Set @@ -123,7 +124,7 @@ def merge_lists_w_ordering(a, b): return result -def coerce_to_immutabledict(d): +def coerce_to_immutabledict(d: Mapping[_KT, _VT]) -> immutabledict[_KT, _VT]: if not d: return EMPTY_DICT elif isinstance(d, immutabledict): @@ -161,6 +162,8 @@ class FacadeDict(ImmutableDictBase[_KT, _VT]): _DT = TypeVar("_DT", bound=Any) +_F = TypeVar("_F", bound=Any) + class Properties(Generic[_T]): """Provide a __getattr__/__setattr__ interface over a dict.""" @@ -169,7 +172,7 @@ class Properties(Generic[_T]): _data: Dict[str, _T] - def __init__(self, data): + def __init__(self, data: Dict[str, _T]): object.__setattr__(self, "_data", data) def __len__(self) -> int: @@ -178,30 +181,30 @@ class Properties(Generic[_T]): def __iter__(self) -> Iterator[_T]: return iter(list(self._data.values())) - def __dir__(self): + def __dir__(self) -> List[str]: return dir(super(Properties, self)) + [ str(k) for k in self._data.keys() ] - def __add__(self, other): - return list(self) + list(other) + def __add__(self, other: Properties[_F]) -> List[Union[_T, _F]]: + return list(self) + list(other) # type: ignore - def __setitem__(self, key, obj): + def __setitem__(self, key: str, obj: _T) -> None: self._data[key] = obj def __getitem__(self, key: str) -> _T: return self._data[key] - def __delitem__(self, key): + def __delitem__(self, key: str) -> None: del self._data[key] - def __setattr__(self, key, obj): + def __setattr__(self, key: str, obj: _T) -> None: self._data[key] = obj - def __getstate__(self): + def __getstate__(self) -> Dict[str, Any]: return {"_data": self._data} - def __setstate__(self, state): + def __setstate__(self, state: Dict[str, Any]) -> None: object.__setattr__(self, "_data", state["_data"]) def __getattr__(self, key: str) -> _T: @@ -213,12 +216,12 @@ class Properties(Generic[_T]): def __contains__(self, key: str) -> bool: return key in self._data - def as_readonly(self) -> "ReadOnlyProperties[_T]": + def as_readonly(self) -> ReadOnlyProperties[_T]: """Return an immutable proxy for this :class:`.Properties`.""" return ReadOnlyProperties(self._data) - def update(self, value): + def update(self, value: Dict[str, _T]) -> None: self._data.update(value) @overload @@ -249,7 +252,7 @@ class Properties(Generic[_T]): def has_key(self, key: str) -> bool: return key in self._data - def clear(self): + def clear(self) -> None: self._data.clear() @@ -318,7 +321,7 @@ class WeakSequence: class OrderedIdentitySet(IdentitySet): - def __init__(self, iterable=None): + def __init__(self, iterable: Optional[Iterable[Any]] = None): IdentitySet.__init__(self) self._members = OrderedDict() if iterable: @@ -615,7 +618,9 @@ class ScopedRegistry(Generic[_T]): scopefunc: _ScopeFuncType registry: Any - def __init__(self, createfunc, scopefunc): + def __init__( + self, createfunc: Callable[[], _T], scopefunc: Callable[[], Any] + ): """Construct a new :class:`.ScopedRegistry`. :param createfunc: A creation function that will generate |