[Python-checkins] cpython (merge 3.2 -> 3.2): merge update

senthil.kumaran python-checkins at python.org
Wed Apr 13 03:43:33 CEST 2011


http://hg.python.org/cpython/rev/f7acd95d43f8
changeset:   69302:f7acd95d43f8
branch:      3.2
parent:      69301:b151b192b39c
parent:      69295:fe8bbaff5a27
user:        Senthil Kumaran <orsenthil at gmail.com>
date:        Wed Apr 13 09:34:21 2011 +0800
summary:
  merge update

files:
  Doc/library/json.rst               |   8 ++++----
  Lib/json/encoder.py                |   2 +-
  Lib/test/json_tests/test_indent.py |  16 ++++++++++++++++
  Misc/NEWS                          |   3 +++
  4 files changed, 24 insertions(+), 5 deletions(-)


diff --git a/Doc/library/json.rst b/Doc/library/json.rst
--- a/Doc/library/json.rst
+++ b/Doc/library/json.rst
@@ -136,10 +136,10 @@
 
    If *indent* is a non-negative integer or string, then JSON array elements and
    object members will be pretty-printed with that indent level.  An indent level
-   of 0 or ``""`` will only insert newlines.  ``None`` (the default) selects the
-   most compact representation. Using an integer indent indents that many spaces
-   per level.  If *indent* is a string (such at '\t'), that string is used to indent
-   each level.
+   of 0, negative, or ``""`` will only insert newlines.  ``None`` (the default)
+   selects the most compact representation. Using a positive integer indent
+   indents that many spaces per level.  If *indent* is a string (such at '\t'),
+   that string is used to indent each level.
 
    If *separators* is an ``(item_separator, dict_separator)`` tuple, then it
    will be used instead of the default ``(', ', ': ')`` separators.  ``(',',
diff --git a/Lib/json/encoder.py b/Lib/json/encoder.py
--- a/Lib/json/encoder.py
+++ b/Lib/json/encoder.py
@@ -233,7 +233,7 @@
 
 
         if (_one_shot and c_make_encoder is not None
-                and not self.indent):
+                and self.indent is None):
             _iterencode = c_make_encoder(
                 markers, self.default, _encoder, self.indent,
                 self.key_separator, self.item_separator, self.sort_keys,
diff --git a/Lib/test/json_tests/test_indent.py b/Lib/test/json_tests/test_indent.py
--- a/Lib/test/json_tests/test_indent.py
+++ b/Lib/test/json_tests/test_indent.py
@@ -2,6 +2,7 @@
 
 import json
 import textwrap
+from io import StringIO
 
 class TestIndent(TestCase):
     def test_indent(self):
@@ -43,3 +44,18 @@
         self.assertEqual(h3, h)
         self.assertEqual(d2, expect.expandtabs(2))
         self.assertEqual(d3, expect)
+
+    def test_indent0(self):
+        h = {3: 1}
+        def check(indent, expected):
+            d1 = json.dumps(h, indent=indent)
+            self.assertEqual(d1, expected)
+
+            sio = StringIO()
+            json.dump(h, sio, indent=indent)
+            self.assertEqual(sio.getvalue(), expected)
+
+        # indent=0 should emit newlines
+        check(0, '{\n"3": 1\n}')
+        # indent=None is more compact
+        check(None, '{"3": 1}')
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -55,6 +55,9 @@
 
 - Issue #11703 - urllib2.geturl() does not return correct url when the original
   url contains #fragment.
+  
+- Issue #10019: Fixed regression in json module where an indent of 0 stopped
+  adding newlines and acted instead like 'None'.
 
 - Issue #5162: Treat services like frozen executables to allow child spawning
   from multiprocessing.forking on Windows.

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list