summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvinay karanam <vinayinvicible@users.noreply.github.com>2017-05-23 07:28:38 +0530
committerTim Graham <timograham@gmail.com>2017-05-22 21:58:38 -0400
commitd1d08d86baef05db5b37c266ed9142f1c57e6322 (patch)
tree11ead375d41838df0f83f3a97843ea72cad5d9a8
parent65dfe579d08361e04b7b3c1895b10f84b69d5c59 (diff)
[1.11.x] Fixed #28230 -- Allowed DjangoJsonEncoder to serialize CallableBool.
-rw-r--r--django/core/serializers/json.py3
-rw-r--r--docs/releases/1.11.2.txt3
-rw-r--r--tests/serializers/test_json.py5
3 files changed, 11 insertions, 0 deletions
diff --git a/django/core/serializers/json.py b/django/core/serializers/json.py
index 9da8993ee6..a475858205 100644
--- a/django/core/serializers/json.py
+++ b/django/core/serializers/json.py
@@ -16,6 +16,7 @@ from django.core.serializers.python import (
Deserializer as PythonDeserializer, Serializer as PythonSerializer,
)
from django.utils import six
+from django.utils.deprecation import CallableBool
from django.utils.duration import duration_iso_string
from django.utils.functional import Promise
from django.utils.timezone import is_aware
@@ -117,5 +118,7 @@ class DjangoJSONEncoder(json.JSONEncoder):
return str(o)
elif isinstance(o, Promise):
return six.text_type(o)
+ elif isinstance(o, CallableBool):
+ return bool(o)
else:
return super(DjangoJSONEncoder, self).default(o)
diff --git a/docs/releases/1.11.2.txt b/docs/releases/1.11.2.txt
index a15d4272ec..e1cd939fa0 100644
--- a/docs/releases/1.11.2.txt
+++ b/docs/releases/1.11.2.txt
@@ -29,3 +29,6 @@ Bugfixes
* Fixed a regression where ``Model._state.adding`` wasn't set correctly on
multi-table inheritance parent models after saving a child model
(:ticket:`28210`).
+
+* Allowed ``DjangoJSONEncoder`` to serialize
+ ``django.utils.deprecation.CallableBool`` (:ticket:`28230`).
diff --git a/tests/serializers/test_json.py b/tests/serializers/test_json.py
index b191ce6644..391523ae33 100644
--- a/tests/serializers/test_json.py
+++ b/tests/serializers/test_json.py
@@ -12,6 +12,7 @@ from django.core.serializers.json import DjangoJSONEncoder
from django.db import models
from django.test import SimpleTestCase, TestCase, TransactionTestCase
from django.test.utils import isolate_apps
+from django.utils.deprecation import CallableFalse, CallableTrue
from django.utils.translation import override, ugettext_lazy
from .models import Score
@@ -315,3 +316,7 @@ class DjangoJSONEncoderTests(SimpleTestCase):
json.dumps({'duration': duration}, cls=DjangoJSONEncoder),
'{"duration": "P0DT00H00M00S"}'
)
+
+ def test_callable_bool(self):
+ self.assertEqual(json.dumps(CallableTrue, cls=DjangoJSONEncoder), 'true')
+ self.assertEqual(json.dumps(CallableFalse, cls=DjangoJSONEncoder), 'false')