Code

Ticket #13182: less-whitespace-json-serialize-20130820.diff​

File less-whitespace-json-serialize-20130820.diff​, 2.1 KB (added by pjmattal, 11 months ago)

Updated to apply to master. Serialize tests pass.

Line 
1diff --git a/django/core/serializers/json.py b/django/core/serializers/json.py
2index b07aa33..01d44e6 100644
3--- a/django/core/serializers/json.py
4+++ b/django/core/serializers/json.py
5@@ -24,6 +24,11 @@ class Serializer(PythonSerializer):
6     internal_use_only = False
7 
8     def start_serialization(self):
9+        if self.options.get('indent'):
10+            # The default is (', ', ': '). To eliminate useless whitespaces
11+            # after the comma at the end of each line, the representation is
12+            # changed to (',', ': ') only if indent is used.
13+            self.options['separators'] = (',', ': ')
14         if json.__version__.split('.') >= ['2', '1', '3']:
15             # Use JS strings to represent Python Decimal instances (ticket #16850)
16             self.options.update({'use_decimal': False})
17@@ -37,8 +42,6 @@ class Serializer(PythonSerializer):
18         if self.options.get("indent"):
19             self.stream.write("\n")
20         self.stream.write("]")
21-        if self.options.get("indent"):
22-            self.stream.write("\n")
23 
24     def end_object(self, obj):
25         # self._current has the field data
26diff --git a/tests/serializers/tests.py b/tests/serializers/tests.py
27index 07c220c..4ddbc5c 100644
28--- a/tests/serializers/tests.py
29+++ b/tests/serializers/tests.py
30@@ -392,6 +392,32 @@ class JsonSerializerTestCase(SerializersTestBase, TestCase):
31                 ret_list.append(obj_dict["fields"][field_name])
32         return ret_list
33 
34+
35+class TestJsonSerializerIndentation(TestCase):
36+    def test_indentation_whitespace(self):
37+        from django.core.serializers.json import Serializer
38+        Score.objects.create(score=5.0)
39+        Score.objects.create(score=6.0)
40+        qset = Score.objects.all()
41+
42+        s = Serializer()
43+        self.assertEqual(s.serialize(qset, indent=2),"""[
44+{
45+  "pk": 1,
46+  "model": "serializers.score",
47+  "fields": {
48+    "score": 5.0
49+  }
50+},
51+{
52+  "pk": 2,
53+  "model": "serializers.score",
54+  "fields": {
55+    "score": 6.0
56+  }
57+}
58+]""")
59+
60 class JsonSerializerTransactionTestCase(SerializersTransactionTestBase, TransactionTestCase):
61     serializer_name = "json"
62     fwd_ref_str = """[