]> granicus.if.org Git - python/commitdiff
Issue #29011: Fix an important omission by adding Deque to the typing module.
authorRaymond Hettinger <python@rcn.com>
Tue, 17 Jan 2017 06:42:37 +0000 (22:42 -0800)
committerRaymond Hettinger <python@rcn.com>
Tue, 17 Jan 2017 06:42:37 +0000 (22:42 -0800)
Doc/library/typing.rst
Lib/test/test_typing.py
Lib/typing.py
Misc/NEWS

index 923cbb8da97c9a901ce90b08803ba653a3f11283..f89d886cd7c3f9d8a251e15d89229eb8bebf6053 100644 (file)
@@ -557,6 +557,10 @@ The module defines the following classes, functions and decorators:
    As a shorthand for this type, :class:`bytes` can be used to
    annotate arguments of any of the types mentioned above.
 
+.. class:: Deque(deque, MutableSequence[T])
+
+   A generic version of :class:`collections.deque`.
+
 .. class:: List(list, MutableSequence[T])
 
    Generic version of :class:`list`.
index d203ce3d5981046f80cf04d8212f9c66024a3221..7585412f4fb96198e9c15a5a401430ae3765d454 100644 (file)
@@ -1572,6 +1572,9 @@ class CollectionsAbcTests(BaseTestCase):
     def test_list(self):
         self.assertIsSubclass(list, typing.List)
 
+    def test_deque(self):
+        self.assertIsSubclass(collections.deque, typing.Deque)
+
     def test_set(self):
         self.assertIsSubclass(set, typing.Set)
         self.assertNotIsSubclass(frozenset, typing.Set)
@@ -1642,6 +1645,14 @@ class CollectionsAbcTests(BaseTestCase):
         self.assertIsSubclass(MyDefDict, collections.defaultdict)
         self.assertNotIsSubclass(collections.defaultdict, MyDefDict)
 
+    def test_no_deque_instantiation(self):
+        with self.assertRaises(TypeError):
+            typing.Deque()
+        with self.assertRaises(TypeError):
+            typing.Deque[T]()
+        with self.assertRaises(TypeError):
+            typing.Deque[int]()
+
     def test_no_set_instantiation(self):
         with self.assertRaises(TypeError):
             typing.Set()
index 34845b747a297b60bc8aeb96b270e92f6929fbe6..2821c3cb2df7dd1b6c971398ddfb178992f56047 100644 (file)
@@ -59,6 +59,7 @@ __all__ = [
     'SupportsRound',
 
     # Concrete collection types.
+    'Deque',
     'Dict',
     'DefaultDict',
     'List',
@@ -1771,6 +1772,15 @@ class List(list, MutableSequence[T], extra=list):
                             "use list() instead")
         return _generic_new(list, cls, *args, **kwds)
 
+class Deque(collections.deque, MutableSequence[T], extra=collections.deque):
+
+    __slots__ = ()
+
+    def __new__(cls, *args, **kwds):
+        if _geqv(cls, Deque):
+            raise TypeError("Type Deque cannot be instantiated; "
+                            "use deque() instead")
+        return _generic_new(collections.deque, cls, *args, **kwds)
 
 class Set(set, MutableSet[T], extra=set):
 
index 9a5e729faecbb5ed21e2bfd4957da7d4b135ee83..7e21d3727972a69225217a6386c1fd8bf169a920 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -2,6 +2,18 @@
 Python News
 +++++++++++
 
+What's New in Python 3.5.4?
+===========================
+
+Core and Builtins
+-----------------
+
+Library
+-------
+
+- Issue #29011:  Fix an important omission by adding Deque to the typing module.
+
+
 What's New in Python 3.5.3?
 ===========================
 
@@ -528,17 +540,17 @@ Library
 
 - Issue #27972: Prohibit Tasks to await on themselves.
 
-- Issue #26923: Fix asyncio.Gather to refuse being cancelled once all 
+- Issue #26923: Fix asyncio.Gather to refuse being cancelled once all
   children are done.
   Patch by Johannes Ebke.
 
-- Issue #26796: Don't configure the number of workers for default 
+- Issue #26796: Don't configure the number of workers for default
   threadpool executor.
   Initial patch by Hans Lawrenz.
 
 - Issue #28600: Optimize loop.call_soon().
 
-- Issue #28613: Fix get_event_loop() return the current loop if 
+- Issue #28613: Fix get_event_loop() return the current loop if
   called from coroutines/callbacks.
 
 - Issue #28639: Fix inspect.isawaitable to always return bool
@@ -553,7 +565,7 @@ Library
 - Issue #24142: Reading a corrupt config file left the parser in an
   invalid state.  Original patch by Florian Höch.
 
-- Issue #28990: Fix SSL hanging if connection is closed before handshake 
+- Issue #28990: Fix SSL hanging if connection is closed before handshake
   completed.
   (Patch by HoHo-Ho)