Merge pull request #4196 from jopemachine/update-pprint

Update `pprint` lib and tests from CPython v3.12.0a0
This commit is contained in:
Jeong YunWon
2022-10-04 16:58:23 +09:00
committed by GitHub
2 changed files with 12 additions and 19 deletions

21
Lib/pprint.py vendored
View File

@@ -149,8 +149,9 @@ class PrettyPrinter:
self._underscore_numbers = underscore_numbers
def pprint(self, object):
self._format(object, self._stream, 0, 0, {}, 0)
self._stream.write("\n")
if self._stream is not None:
self._format(object, self._stream, 0, 0, {}, 0)
self._stream.write("\n")
def pformat(self, object):
sio = _StringIO()
@@ -636,19 +637,6 @@ def _recursion(object):
% (type(object).__name__, id(object)))
def _perfcheck(object=None):
import time
if object is None:
object = [("string", (1, 2), [3, 4], {5: 6, 7: 8})] * 100000
p = PrettyPrinter()
t1 = time.perf_counter()
p._safe_repr(object, {}, None, 0, True)
t2 = time.perf_counter()
p.pformat(object)
t3 = time.perf_counter()
print("_safe_repr:", t2 - t1)
print("pformat:", t3 - t2)
def _wrap_bytes_repr(object, width, allowance):
current = b''
last = len(object) // 4 * 4
@@ -665,6 +653,3 @@ def _wrap_bytes_repr(object, width, allowance):
current = candidate
if current:
yield repr(current)
if __name__ == "__main__":
_perfcheck()

View File

@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import collections
import contextlib
import dataclasses
import io
import itertools
@@ -159,6 +160,13 @@ class QueryTestCase(unittest.TestCase):
self.assertTrue(pp.isreadable(safe),
"expected isreadable for %r" % (safe,))
def test_stdout_is_None(self):
with contextlib.redirect_stdout(None):
# smoke test - there is no output to check
value = 'this should not fail'
pprint.pprint(value)
pprint.PrettyPrinter().pprint(value)
def test_knotted(self):
# Verify .isrecursive() and .isreadable() w/ recursion
# Tie a knot.
@@ -195,7 +203,7 @@ class QueryTestCase(unittest.TestCase):
def test_unreadable(self):
# Not recursive but not readable anyway
pp = pprint.PrettyPrinter()
for unreadable in type(3), pprint, pprint.isrecursive:
for unreadable in object(), int, pprint, pprint.isrecursive:
# module-level convenience functions
self.assertFalse(pprint.isrecursive(unreadable),
"expected not isrecursive for %r" % (unreadable,))