mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-15 18:52:27 +03:00
Raise RuntimeError when trying to encode coreapi objects (#4790)
This commit is contained in:
parent
cf3862d56d
commit
a5fcf10c0e
|
@ -55,6 +55,11 @@ class JSONEncoder(json.JSONEncoder):
|
||||||
elif hasattr(obj, 'tolist'):
|
elif hasattr(obj, 'tolist'):
|
||||||
# Numpy arrays and array scalars.
|
# Numpy arrays and array scalars.
|
||||||
return obj.tolist()
|
return obj.tolist()
|
||||||
|
elif (coreapi is not None) and isinstance(obj, (coreapi.Document, coreapi.Error)):
|
||||||
|
raise RuntimeError(
|
||||||
|
'Cannot return a coreapi object from a JSON view. '
|
||||||
|
'You should be using a schema renderer instead for this view.'
|
||||||
|
)
|
||||||
elif hasattr(obj, '__getitem__'):
|
elif hasattr(obj, '__getitem__'):
|
||||||
try:
|
try:
|
||||||
return dict(obj)
|
return dict(obj)
|
||||||
|
@ -62,9 +67,4 @@ class JSONEncoder(json.JSONEncoder):
|
||||||
pass
|
pass
|
||||||
elif hasattr(obj, '__iter__'):
|
elif hasattr(obj, '__iter__'):
|
||||||
return tuple(item for item in obj)
|
return tuple(item for item in obj)
|
||||||
elif (coreapi is not None) and isinstance(obj, (coreapi.Document, coreapi.Error)):
|
|
||||||
raise RuntimeError(
|
|
||||||
'Cannot return a coreapi object from a JSON view. '
|
|
||||||
'You should be using a schema renderer instead for this view.'
|
|
||||||
)
|
|
||||||
return super(JSONEncoder, self).default(obj)
|
return super(JSONEncoder, self).default(obj)
|
||||||
|
|
|
@ -4,6 +4,7 @@ from uuid import uuid4
|
||||||
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
|
from rest_framework.compat import coreapi
|
||||||
from rest_framework.utils.encoders import JSONEncoder
|
from rest_framework.utils.encoders import JSONEncoder
|
||||||
|
|
||||||
|
|
||||||
|
@ -79,3 +80,13 @@ class JSONEncoderTests(TestCase):
|
||||||
"""
|
"""
|
||||||
unique_id = uuid4()
|
unique_id = uuid4()
|
||||||
assert self.encoder.default(unique_id) == str(unique_id)
|
assert self.encoder.default(unique_id) == str(unique_id)
|
||||||
|
|
||||||
|
def test_encode_coreapi_raises_error(self):
|
||||||
|
"""
|
||||||
|
Tests encoding a coreapi objects raises proper error
|
||||||
|
"""
|
||||||
|
with self.assertRaises(RuntimeError):
|
||||||
|
self.encoder.default(coreapi.Document())
|
||||||
|
|
||||||
|
with self.assertRaises(RuntimeError):
|
||||||
|
self.encoder.default(coreapi.Error())
|
||||||
|
|
Loading…
Reference in New Issue
Block a user