[Python-checkins] r70299 - in python/branches/py3k: Doc/library/collections.rst Lib/test/test_deque.py Misc/NEWS Modules/_collectionsmodule.c

raymond.hettinger python-checkins at python.org
Tue Mar 10 13:56:32 CET 2009


Author: raymond.hettinger
Date: Tue Mar 10 13:56:32 2009
New Revision: 70299

Log:
For collections.deque() objects, expose the maxlen parameter as a read-only attribute.

Modified:
   python/branches/py3k/Doc/library/collections.rst
   python/branches/py3k/Lib/test/test_deque.py
   python/branches/py3k/Misc/NEWS
   python/branches/py3k/Modules/_collectionsmodule.c

Modified: python/branches/py3k/Doc/library/collections.rst
==============================================================================
--- python/branches/py3k/Doc/library/collections.rst	(original)
+++ python/branches/py3k/Doc/library/collections.rst	Tue Mar 10 13:56:32 2009
@@ -361,6 +361,15 @@
       ``d.appendleft(d.pop())``.
 
 
+   Deque objects also provide one read-only attribute:
+
+   .. attribute:: maxlen
+
+      Maximum size of a deque or *None* if unbounded.
+
+      .. versionadded:: 2.7
+
+
 In addition to the above, deques support iteration, pickling, ``len(d)``,
 ``reversed(d)``, ``copy.copy(d)``, ``copy.deepcopy(d)``, membership testing with
 the :keyword:`in` operator, and subscript references such as ``d[-1]``.  Indexed

Modified: python/branches/py3k/Lib/test/test_deque.py
==============================================================================
--- python/branches/py3k/Lib/test/test_deque.py	(original)
+++ python/branches/py3k/Lib/test/test_deque.py	Tue Mar 10 13:56:32 2009
@@ -105,6 +105,16 @@
         d.extendleft(it)
         self.assertEqual(list(it), [])
 
+    def test_maxlen_attribute(self):
+        self.assertEqual(deque().maxlen, None)
+        self.assertEqual(deque('abc').maxlen, None)
+        self.assertEqual(deque('abc', maxlen=4).maxlen, 4)
+        self.assertEqual(deque('abc', maxlen=2).maxlen, 2)
+        self.assertEqual(deque('abc', maxlen=0).maxlen, 0)
+        with self.assertRaises(AttributeError):
+            d = deque('abc')
+            d.maxlen = 10
+
     def test_comparisons(self):
         d = deque('xabc'); d.popleft()
         for e in [d, deque('abc'), deque('ab'), deque(), list(d)]:

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Tue Mar 10 13:56:32 2009
@@ -195,6 +195,8 @@
 Library
 -------
 
+- collections.deque() objects now have a read-only attribute called maxlen.
+
 - Issue #2638: Show a window constructed with tkSimpleDialog.Dialog only after
   it is has been populated and properly configured in order to prevent
   window flashing.

Modified: python/branches/py3k/Modules/_collectionsmodule.c
==============================================================================
--- python/branches/py3k/Modules/_collectionsmodule.c	(original)
+++ python/branches/py3k/Modules/_collectionsmodule.c	Tue Mar 10 13:56:32 2009
@@ -812,6 +812,20 @@
 	return 0;
 }
 
+static PyObject *
+deque_get_maxlen(dequeobject *deque)
+{
+	if (deque->maxlen == -1)
+		Py_RETURN_NONE;
+	return PyLong_FromSsize_t(deque->maxlen);
+}
+
+static PyGetSetDef deque_getset[] = {
+	{"maxlen", (getter)deque_get_maxlen, (setter)NULL,
+	 "maximum size of a deque or None if unbounded"},
+	{0}
+};
+
 static PySequenceMethods deque_as_sequence = {
 	(lenfunc)deque_len,		/* sq_length */
 	0,				/* sq_concat */
@@ -893,7 +907,7 @@
 	0,				/* tp_iternext */
 	deque_methods,			/* tp_methods */
 	0,				/* tp_members */
-	0,				/* tp_getset */
+	deque_getset,	/* tp_getset */
 	0,				/* tp_base */
 	0,				/* tp_dict */
 	0,				/* tp_descr_get */


More information about the Python-checkins mailing list