Skip to content

Commit 7fea972

Browse files
committed
Add generic aliases for collection types
1 parent 4a459f2 commit 7fea972

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

basedtyping/__init__.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
2222
_tp_cache,
2323
_type_check,
2424
cast,
25+
_alias,
2526
)
2627

28+
import _collections_abc
2729
import typing_extensions
2830
from typing_extensions import Never, ParamSpec, Self, TypeAlias, TypeGuard, TypeVarTuple
2931

@@ -556,3 +558,27 @@ def f[T](t: TypeForm[T]) -> T: ...
556558
557559
reveal_type(f(int | str)) # int | str
558560
""")
561+
562+
# generic aliases
563+
if TYPE_CHECKING:
564+
dict_keyiterator = _collections_abc.dict_keyiterator # type: ignore[attr-defined]
565+
dict_valueiterator = _collections_abc.dict_valueiterator # type: ignore[attr-defined]
566+
dict_itemiterator = _collections_abc.dict_itemiterator # type: ignore[attr-defined]
567+
list_iterator = _collections_abc.list_iterator # type: ignore[attr-defined]
568+
list_reverseiterator = _collections_abc.list_reverseiterator # type: ignore[attr-defined]
569+
set_iterator = _collections_abc.set_iterator # type: ignore[attr-defined]
570+
tuple_iterator = _collections_abc.tuple_iterator # type: ignore[attr-defined]
571+
dict_keys = _collections_abc.dict_keys
572+
dict_values = _collections_abc.dict_values
573+
dict_items = _collections_abc.dict_items
574+
else:
575+
dict_keyiterator = _alias(_collections_abc.dict_keyiterator, 2)
576+
dict_valueiterator = _alias(_collections_abc.dict_valueiterator, 2)
577+
dict_itemiterator = _alias(_collections_abc.dict_itemiterator, 2)
578+
list_iterator = _alias(_collections_abc.list_iterator, 1)
579+
list_reverseiterator = _alias(_collections_abc.list_reverseiterator, 1)
580+
set_iterator = _alias(_collections_abc.set_iterator, 1)
581+
tuple_iterator = _alias(_collections_abc.tuple_iterator, -1)
582+
dict_keys = _alias(_collections_abc.dict_keys, 2)
583+
dict_values = _alias(_collections_abc.dict_values, 2)
584+
dict_items = _alias(_collections_abc.dict_items, 2)

tests/test_aliases.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from __future__ import annotations
2+
3+
from basedtyping import (
4+
dict_itemiterator,
5+
dict_items,
6+
dict_keyiterator,
7+
dict_keys,
8+
dict_valueiterator,
9+
dict_values,
10+
list_iterator,
11+
list_reverseiterator,
12+
set_iterator,
13+
tuple_iterator,
14+
)
15+
import _collections_abc
16+
17+
18+
def test_aliases():
19+
dk = dict_keys[int, str]
20+
dv = dict_values[int, str]
21+
di = dict_items[int, str]
22+
t1 = tuple_iterator[int, str]
23+
t2 = tuple_iterator[int, ...]
24+
si = set_iterator[int]
25+
lr = list_reverseiterator[int]
26+
li = list_iterator[int]
27+
dii = dict_itemiterator[int, str]
28+
dvi = dict_valueiterator[int, str]
29+
dki = dict_keyiterator[int, str]
30+
print(dk, dv, di, t1, t2, si, lr, li, dii, dvi, dki) # noqa: T201

0 commit comments

Comments
 (0)