Skip to content
This repository was archived by the owner on Feb 13, 2025. It is now read-only.

Commit e12c313

Browse files
committed
merge
2 parents 741c45a + 8049052 commit e12c313

File tree

4 files changed

+27
-0
lines changed

4 files changed

+27
-0
lines changed

Doc/library/typing.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,10 @@ The module defines the following classes, functions and decorators:
563563
As a shorthand for this type, :class:`bytes` can be used to
564564
annotate arguments of any of the types mentioned above.
565565

566+
.. class:: Deque(deque, MutableSequence[T])
567+
568+
A generic version of :class:`collections.deque`.
569+
566570
.. class:: List(list, MutableSequence[T])
567571

568572
Generic version of :class:`list`.

Lib/test/test_typing.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1572,6 +1572,9 @@ def test_bytestring(self):
15721572
def test_list(self):
15731573
self.assertIsSubclass(list, typing.List)
15741574

1575+
def test_deque(self):
1576+
self.assertIsSubclass(collections.deque, typing.Deque)
1577+
15751578
def test_set(self):
15761579
self.assertIsSubclass(set, typing.Set)
15771580
self.assertNotIsSubclass(frozenset, typing.Set)
@@ -1642,6 +1645,14 @@ class MyDefDict(typing.DefaultDict[str, int]):
16421645
self.assertIsSubclass(MyDefDict, collections.defaultdict)
16431646
self.assertNotIsSubclass(collections.defaultdict, MyDefDict)
16441647

1648+
def test_no_deque_instantiation(self):
1649+
with self.assertRaises(TypeError):
1650+
typing.Deque()
1651+
with self.assertRaises(TypeError):
1652+
typing.Deque[T]()
1653+
with self.assertRaises(TypeError):
1654+
typing.Deque[int]()
1655+
16451656
def test_no_set_instantiation(self):
16461657
with self.assertRaises(TypeError):
16471658
typing.Set()

Lib/typing.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
'SupportsRound',
6060

6161
# Concrete collection types.
62+
'Deque',
6263
'Dict',
6364
'DefaultDict',
6465
'List',
@@ -1771,6 +1772,15 @@ def __new__(cls, *args, **kwds):
17711772
"use list() instead")
17721773
return _generic_new(list, cls, *args, **kwds)
17731774

1775+
class Deque(collections.deque, MutableSequence[T], extra=collections.deque):
1776+
1777+
__slots__ = ()
1778+
1779+
def __new__(cls, *args, **kwds):
1780+
if _geqv(cls, Deque):
1781+
raise TypeError("Type Deque cannot be instantiated; "
1782+
"use deque() instead")
1783+
return _generic_new(collections.deque, cls, *args, **kwds)
17741784

17751785
class Set(set, MutableSet[T], extra=set):
17761786

Misc/NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ Library
4747
- Issue #29219: Fixed infinite recursion in the repr of uninitialized
4848
ctypes.CDLL instances.
4949

50+
- Issue #29011: Fix an important omission by adding Deque to the typing module.
51+
5052
- Issue #28969: Fixed race condition in C implementation of functools.lru_cache.
5153
KeyError could be raised when cached function with full cache was
5254
simultaneously called from differen threads with the same uncached arguments.

0 commit comments

Comments
 (0)