1
1
import uuid
2
2
from typing import List , Dict , Union , Optional
3
+ from urllib .request import Request
3
4
4
5
from kiota_abstractions .request_information import RequestInformation
5
6
from kiota_abstractions .serialization import Parsable , ParseNode
@@ -15,27 +16,36 @@ class BatchRequestContent(Parsable):
15
16
16
17
MAX_REQUESTS = 20
17
18
18
- def __init__ (self , requests : Dict [str , Union [' BatchRequestItem' , ' RequestInformation' ]] = {}):
19
+ def __init__ (self , requests : Dict [str , Union [BatchRequestItem , RequestInformation ]] = {}):
19
20
"""
20
21
Initializes a new instance of the BatchRequestContent class.
22
+ Args:
23
+ Requests (Dict[str, Union[BatchRequestItem, RequestInformation]]): The requests to add.
21
24
"""
22
- self ._requests : Dict [str , Union [ BatchRequestItem , 'RequestInformation' ]] = requests or {}
25
+ self ._requests : Dict [str , BatchRequestItem ] = {}
23
26
24
27
self .is_finalized = False
25
28
for request_id , request in requests .items ():
29
+ if isinstance (request , RequestInformation ):
30
+ self .add_request_information (request , request_id )
31
+ continue
26
32
self .add_request (request_id , request )
27
33
28
34
@property
29
- def requests (self ) -> Dict :
35
+ def requests (self ) -> Dict [ str , BatchRequestItem ] :
30
36
"""
31
37
Gets the requests.
38
+ Returns:
39
+ Dict[str, BatchRequestItem]: requests in the batch request content.
32
40
"""
33
41
return self ._requests
34
42
35
43
@requests .setter
36
44
def requests (self , requests : List [BatchRequestItem ]) -> None :
37
45
"""
38
46
Sets the requests.
47
+ Args:
48
+ requests (List[BatchRequestItem]): The requests to set.
39
49
"""
40
50
if len (requests ) >= BatchRequestContent .MAX_REQUESTS :
41
51
raise ValueError (f"Maximum number of requests is { BatchRequestContent .MAX_REQUESTS } " )
@@ -45,43 +55,56 @@ def requests(self, requests: List[BatchRequestItem]) -> None:
45
55
def add_request (self , request_id : Optional [str ], request : BatchRequestItem ) -> None :
46
56
"""
47
57
Adds a request to the batch request content.
58
+ Args:
59
+ request_id (Optional[str]): The request id to add.
60
+ request (BatchRequestItem): The request to add.
48
61
"""
49
62
if len (self .requests ) >= BatchRequestContent .MAX_REQUESTS :
50
63
raise RuntimeError (f"Maximum number of requests is { BatchRequestContent .MAX_REQUESTS } " )
51
64
if not request .id :
52
- request .id = str (uuid .uuid4 ())
65
+ request .id = request_id if request_id else str (uuid .uuid4 ())
53
66
if hasattr (request , 'depends_on' ) and request .depends_on :
54
67
for dependent_id in request .depends_on :
55
- if dependent_id not in self .requests :
56
- dependent_request = self ._request_by_id (dependent_id )
57
- if dependent_request :
58
- self ._requests [dependent_id ] = dependent_request
68
+ if not self ._request_by_id (dependent_id ):
69
+ raise ValueError (
70
+ f"""
71
+ Request depends on request id: { dependent_id }
72
+ which was not found in requests. Add request id: { dependent_id } first"""
73
+ )
59
74
self ._requests [request .id ] = request
60
75
61
- def add_request_information (self , request_information : RequestInformation ) -> None :
62
- """
76
+ def add_request_information (
77
+ self , request_information : RequestInformation , request_id : Optional [str ] = None
78
+ ) -> None :
79
+ """
63
80
Adds a request to the batch request content.
64
81
Args:
65
82
request_information (RequestInformation): The request information to add.
83
+ request_id: Optional[str]: The request id to add.
66
84
"""
67
- request_id = str (uuid .uuid4 ())
85
+ request_id = request_id if request_id else str (uuid .uuid4 ())
68
86
self .add_request (request_id , BatchRequestItem (request_information ))
69
87
70
- def add_urllib_request (self , request ) -> None :
88
+ def add_urllib_request (self , request : Request , request_id : Optional [ str ] = None ) -> None :
71
89
"""
72
90
Adds a request to the batch request content.
91
+ Args:
92
+ request (Request): The request to add.
93
+ request_id: Optional[str]: The request id to add.
73
94
"""
74
- request_id = str (uuid .uuid4 ())
95
+ request_id = request_id if request_id else str (uuid .uuid4 ())
75
96
self .add_request (request_id , BatchRequestItem .create_with_urllib_request (request ))
76
97
77
98
def remove (self , request_id : str ) -> None :
78
99
"""
79
100
Removes a request from the batch request content.
80
- Also removes the request from the depends_on list of
101
+ Also removes the request from the depends_on list of
81
102
other requests.
103
+ Args:
104
+ request_id (str): The request id to remove.
82
105
"""
83
106
request_to_remove = None
84
- for request in self .requests :
107
+ for request in self .requests . values () :
85
108
if request .id == request_id :
86
109
request_to_remove = request
87
110
if hasattr (request , 'depends_on' ) and request .depends_on :
@@ -108,12 +131,12 @@ def finalize(self):
108
131
def _request_by_id (self , request_id : str ) -> Optional [BatchRequestItem ]:
109
132
"""
110
133
Finds a request by its ID.
111
-
134
+
112
135
Args:
113
136
request_id (str): The ID of the request to find.
114
137
115
138
Returns:
116
- The request with the given ID, or None if not found.
139
+ Optional[BatchRequestItem]: The request with the given ID, or None if not found.
117
140
"""
118
141
return self ._requests .get (request_id )
119
142
@@ -137,4 +160,4 @@ def serialize(self, writer: SerializationWriter) -> None:
137
160
Args:
138
161
writer: Serialization writer to use to serialize this model
139
162
"""
140
- writer .write_collection_of_object_values ("requests" , self .requests )
163
+ writer .write_collection_of_object_values ("requests" , list ( self .requests . values ()) )
0 commit comments