5
5
6
6
7
7
class ODataV4BatchRequest (ClientRequest ):
8
- """
9
-
10
- """
8
+ """ JSON batch request """
11
9
12
10
def __init__ (self , context ):
13
11
super ().__init__ (context )
@@ -33,25 +31,39 @@ def process_response(self, response, query):
33
31
"""
34
32
json = response .json ()
35
33
for resp in json ["responses" ]:
34
+ self ._validate_response (resp )
36
35
sub_qry = query .get (int (resp ["id" ]))
37
36
self .context .pending_request ().map_json (resp ["body" ], sub_qry .return_type )
38
37
38
+ def _validate_response (self , json ):
39
+ if int (json ['status' ]) >= 400 :
40
+ raise ValueError (json ['body' ])
41
+
39
42
def _prepare_payload (self , query ):
40
43
"""Serializes a batch request body.
41
44
42
- :type query: office365.runtime.queries.client_query .BatchQuery
45
+ :type query: office365.runtime.queries.batch_query .BatchQuery
43
46
"""
44
47
45
48
requests_json = []
46
49
for qry in query .queries :
50
+ request_id = str (len (requests_json ))
47
51
request = qry .build_request ()
48
- requests_json .append (self ._serialize_request (request , len ( requests_json ) ))
52
+ requests_json .append (self ._normalize_request (request , request_id ))
49
53
50
54
return {"requests" : requests_json }
51
55
52
- def _serialize_request (self , request , request_no ):
56
+ def _normalize_request (self , request , _id , depends_on = None ):
57
+ """
58
+
59
+ :type request: RequestOptions
60
+ :type _id: str
61
+ :type depends_on: list[str] or None
62
+ """
53
63
allowed_props = ["id" , "method" , "headers" , "url" , "body" ]
54
64
json = dict ((k , v ) for k , v in vars (request ).items () if v is not None and k in allowed_props )
55
- json ["id" ] = str (request_no )
65
+ json ["id" ] = _id
66
+ if depends_on is not None :
67
+ json ["dependsOn" ] = depends_on
56
68
json ["url" ] = json ["url" ].replace (self .context .service_root_url (), "/" )
57
69
return json
0 commit comments