summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/util/_collections.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2022-04-07 12:37:23 -0400
committermike bayer <mike_mp@zzzcomputing.com>2022-04-12 02:09:50 +0000
commitaa9cd878e8249a4a758c7f968e929e92fede42a5 (patch)
tree1be1c9dc24dd247a150be55d65bfc56ebaf111bc /lib/sqlalchemy/util/_collections.py
parent98eae4e181cb2d1bbc67ec834bfad29dcba7f461 (diff)
downloadsqlalchemy-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.py35
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