@@ -31,23 +31,35 @@ class JSONRenderer(renderers.JSONRenderer):
3131 media_type = 'application/vnd.api+json'
3232 format = 'vnd.api+json'
3333
34+ def render_relationship_view (self , data , accepted_media_type = None , renderer_context = None ):
35+ # Special case for RelationshipView
36+ view = renderer_context .get ("view" , None )
37+ render_data = OrderedDict ([
38+ ('data' , data )
39+ ])
40+ links = view .get_links ()
41+ if links :
42+ render_data .update ({'links' : links }),
43+ return super (JSONRenderer , self ).render (
44+ render_data , accepted_media_type , renderer_context
45+ )
46+
47+ def render_errors (self , data , accepted_media_type = None , renderer_context = None ):
48+ # Get the resource name.
49+ if len (data ) > 1 and isinstance (data , list ):
50+ data .sort (key = lambda x : x .get ('source' , {}).get ('pointer' , '' ))
51+ return super (JSONRenderer , self ).render (
52+ {'errors' : data }, accepted_media_type , renderer_context
53+ )
54+
3455 def render (self , data , accepted_media_type = None , renderer_context = None ):
3556
3657 view = renderer_context .get ("view" , None )
3758 request = renderer_context .get ("request" , None )
3859
3960 from rest_framework_json_api .views import RelationshipView
4061 if isinstance (view , RelationshipView ):
41- # Special case for RelationshipView
42- render_data = OrderedDict ([
43- ('data' , data )
44- ])
45- links = view .get_links ()
46- if links :
47- render_data .update ({'links' : links }),
48- return super (JSONRenderer , self ).render (
49- render_data , accepted_media_type , renderer_context
50- )
62+ return self .render_relationship_view (data , accepted_media_type , renderer_context )
5163
5264 # Get the resource name.
5365 resource_name = utils .get_resource_name (renderer_context )
@@ -61,11 +73,7 @@ def render(self, data, accepted_media_type=None, renderer_context=None):
6173
6274 # If this is an error response, skip the rest.
6375 if resource_name == 'errors' :
64- if len (data ) > 1 and isinstance (data , list ):
65- data .sort (key = lambda x : x .get ('source' , {}).get ('pointer' , '' ))
66- return super (JSONRenderer , self ).render (
67- {resource_name : data }, accepted_media_type , renderer_context
68- )
76+ return self .render_errors (data , accepted_media_type , renderer_context )
6977
7078 include_resources_param = request .query_params .get ('include' ) if request else None
7179 if include_resources_param :
0 commit comments