@@ -59,44 +59,44 @@ def parse(self, stream, media_type=None, parser_context=None):
59
59
Parses the incoming bytestream as JSON and returns the resulting data
60
60
"""
61
61
result = super (JSONParser , self ).parse (stream , media_type = media_type , parser_context = parser_context )
62
- data = result .get ('data' )
63
62
64
- if data :
65
- from rest_framework_json_api .views import RelationshipView
66
- if isinstance (parser_context ['view' ], RelationshipView ):
67
- # We skip parsing the object as JSONAPI Resource Identifier Object and not a regular Resource Object
68
- if isinstance (data , list ):
69
- for resource_identifier_object in data :
70
- if not (resource_identifier_object .get ('id' ) and resource_identifier_object .get ('type' )):
71
- raise ParseError (
72
- 'Received data contains one or more malformed JSONAPI Resource Identifier Object(s)'
73
- )
74
- elif not (data .get ('id' ) and data .get ('type' )):
75
- raise ParseError ('Received data is not a valid JSONAPI Resource Identifier Object' )
76
-
77
- return data
78
-
79
- request = parser_context .get ('request' )
80
-
81
- # Check for inconsistencies
82
- resource_name = utils .get_resource_name (parser_context )
83
- if data .get ('type' ) != resource_name and request .method in ('PUT' , 'POST' , 'PATCH' ):
84
- raise exceptions .Conflict (
85
- "The resource object's type ({data_type}) is not the type "
86
- "that constitute the collection represented by the endpoint ({resource_type})." .format (
87
- data_type = data .get ('type' ),
88
- resource_type = resource_name
89
- )
90
- )
91
- if not data .get ('id' ) and request .method in ('PATCH' , 'PUT' ):
92
- raise ParseError ("The resource identifier object must contain an 'id' member" )
63
+ if not isinstance (result , dict ) or 'data' not in result :
64
+ raise ParseError ('Received document does not contain primary data' )
93
65
94
- # Construct the return data
95
- parsed_data = {'id' : data .get ('id' )} if 'id' in data else {}
96
- parsed_data .update (self .parse_attributes (data ))
97
- parsed_data .update (self .parse_relationships (data ))
98
- parsed_data .update (self .parse_metadata (result ))
99
- return parsed_data
66
+ data = result .get ('data' )
100
67
101
- else :
102
- raise ParseError ('Received document does not contain primary data' )
68
+ from rest_framework_json_api .views import RelationshipView
69
+ if isinstance (parser_context ['view' ], RelationshipView ):
70
+ # We skip parsing the object as JSONAPI Resource Identifier Object and not a regular Resource Object
71
+ if isinstance (data , list ):
72
+ for resource_identifier_object in data :
73
+ if not (resource_identifier_object .get ('id' ) and resource_identifier_object .get ('type' )):
74
+ raise ParseError (
75
+ 'Received data contains one or more malformed JSONAPI Resource Identifier Object(s)'
76
+ )
77
+ elif not (data .get ('id' ) and data .get ('type' )):
78
+ raise ParseError ('Received data is not a valid JSONAPI Resource Identifier Object' )
79
+
80
+ return data
81
+
82
+ request = parser_context .get ('request' )
83
+
84
+ # Check for inconsistencies
85
+ resource_name = utils .get_resource_name (parser_context )
86
+ if data .get ('type' ) != resource_name and request .method in ('PUT' , 'POST' , 'PATCH' ):
87
+ raise exceptions .Conflict (
88
+ "The resource object's type ({data_type}) is not the type "
89
+ "that constitute the collection represented by the endpoint ({resource_type})." .format (
90
+ data_type = data .get ('type' ),
91
+ resource_type = resource_name
92
+ )
93
+ )
94
+ if not data .get ('id' ) and request .method in ('PATCH' , 'PUT' ):
95
+ raise ParseError ("The resource identifier object must contain an 'id' member" )
96
+
97
+ # Construct the return data
98
+ parsed_data = {'id' : data .get ('id' )} if 'id' in data else {}
99
+ parsed_data .update (self .parse_attributes (data ))
100
+ parsed_data .update (self .parse_relationships (data ))
101
+ parsed_data .update (self .parse_metadata (result ))
102
+ return parsed_data
0 commit comments