diff --git a/Lib/queue.py b/Lib/queue.py index ef07957781a474..05baeb2f1017ef 100644 --- a/Lib/queue.py +++ b/Lib/queue.py @@ -216,6 +216,24 @@ def _put(self, item): def _get(self): return self.queue.popleft() + def __repr__(self): + items = list(self.queue) + output = '' + if items: + len_items = len(items) + + if len_items > 1: + items = items[0], items[-1] + else: + items = items[0] + + if len_items > 2: + output = ''.join([repr(items[0]), '...', repr(items[1])]) + else: + output = ','.join(map(repr, items)) + + return f'<{self.__class__.__name__}({output})>' + class PriorityQueue(Queue): '''Variant of Queue that retrieves open entries in priority order (lowest first). diff --git a/Lib/test/test_queue.py b/Lib/test/test_queue.py index c8528f97741dcc..a0c4e6e924538b 100644 --- a/Lib/test/test_queue.py +++ b/Lib/test/test_queue.py @@ -239,6 +239,17 @@ def test_shrinking_queue(self): with self.assertRaises(queue.Full): q.put_nowait(4) + def test_repr(self): + q = self.type2test(3) + class_name = q.__class__.__name__ + self.assertEqual(f'<{class_name}()>', repr(q)) + q.put('a') + self.assertEqual(f"<{class_name}('a')>", repr(q)) + q.put('b') + self.assertEqual(f"<{class_name}('a','b')>", repr(q)) + q.put('c') + self.assertEqual(f"<{class_name}('a'...'c')>", repr(q)) + class QueueTest(BaseQueueTestMixin, unittest.TestCase): type2test = queue.Queue diff --git a/Misc/NEWS.d/next/Library/2019-02-20-12-08-28.bpo-36049.kLMbTL.rst b/Misc/NEWS.d/next/Library/2019-02-20-12-08-28.bpo-36049.kLMbTL.rst new file mode 100644 index 00000000000000..05387f6b31eaf6 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-02-20-12-08-28.bpo-36049.kLMbTL.rst @@ -0,0 +1,2 @@ +Add ``_repr__`` for Queue, PriorityQueue and LifoQueue. Contributed by Stéphane +Wirtel