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

File less-whitespace-json-serialize-20130820.diff​, 2.1 KB (added by pjmattal, 11 years 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 = """[
Back to Top