@@ -59,44 +59,44 @@ def parse(self, stream, media_type=None, parser_context=None):
5959        Parses the incoming bytestream as JSON and returns the resulting data 
6060        """ 
6161        result  =  super (JSONParser , self ).parse (stream , media_type = media_type , parser_context = parser_context )
62-         data  =  result .get ('data' )
6362
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' )
9365
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' )
10067
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