11import uuid
22from typing import List , Dict , Union , Optional
3+ from urllib .request import Request
34
45from kiota_abstractions .request_information import RequestInformation
56from kiota_abstractions .serialization import Parsable , ParseNode
@@ -15,27 +16,36 @@ class BatchRequestContent(Parsable):
1516
1617 MAX_REQUESTS = 20
1718
18- def __init__ (self , requests : Dict [str , Union [' BatchRequestItem' , ' RequestInformation' ]] = {}):
19+ def __init__ (self , requests : Dict [str , Union [BatchRequestItem , RequestInformation ]] = {}):
1920 """
2021 Initializes a new instance of the BatchRequestContent class.
22+ Args:
23+ Requests (Dict[str, Union[BatchRequestItem, RequestInformation]]): The requests to add.
2124 """
22- self ._requests : Dict [str , Union [ BatchRequestItem , 'RequestInformation' ]] = requests or {}
25+ self ._requests : Dict [str , BatchRequestItem ] = {}
2326
2427 self .is_finalized = False
2528 for request_id , request in requests .items ():
29+ if isinstance (request , RequestInformation ):
30+ self .add_request_information (request , request_id )
31+ continue
2632 self .add_request (request_id , request )
2733
2834 @property
29- def requests (self ) -> Dict :
35+ def requests (self ) -> Dict [ str , BatchRequestItem ] :
3036 """
3137 Gets the requests.
38+ Returns:
39+ Dict[str, BatchRequestItem]: requests in the batch request content.
3240 """
3341 return self ._requests
3442
3543 @requests .setter
3644 def requests (self , requests : List [BatchRequestItem ]) -> None :
3745 """
3846 Sets the requests.
47+ Args:
48+ requests (List[BatchRequestItem]): The requests to set.
3949 """
4050 if len (requests ) >= BatchRequestContent .MAX_REQUESTS :
4151 raise ValueError (f"Maximum number of requests is { BatchRequestContent .MAX_REQUESTS } " )
@@ -45,43 +55,56 @@ def requests(self, requests: List[BatchRequestItem]) -> None:
4555 def add_request (self , request_id : Optional [str ], request : BatchRequestItem ) -> None :
4656 """
4757 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.
4861 """
4962 if len (self .requests ) >= BatchRequestContent .MAX_REQUESTS :
5063 raise RuntimeError (f"Maximum number of requests is { BatchRequestContent .MAX_REQUESTS } " )
5164 if not request .id :
52- request .id = str (uuid .uuid4 ())
65+ request .id = request_id if request_id else str (uuid .uuid4 ())
5366 if hasattr (request , 'depends_on' ) and request .depends_on :
5467 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+ )
5974 self ._requests [request .id ] = request
6075
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+ """
6380 Adds a request to the batch request content.
6481 Args:
6582 request_information (RequestInformation): The request information to add.
83+ request_id: Optional[str]: The request id to add.
6684 """
67- request_id = str (uuid .uuid4 ())
85+ request_id = request_id if request_id else str (uuid .uuid4 ())
6886 self .add_request (request_id , BatchRequestItem (request_information ))
6987
70- def add_urllib_request (self , request ) -> None :
88+ def add_urllib_request (self , request : Request , request_id : Optional [ str ] = None ) -> None :
7189 """
7290 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.
7394 """
74- request_id = str (uuid .uuid4 ())
95+ request_id = request_id if request_id else str (uuid .uuid4 ())
7596 self .add_request (request_id , BatchRequestItem .create_with_urllib_request (request ))
7697
7798 def remove (self , request_id : str ) -> None :
7899 """
79100 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
81102 other requests.
103+ Args:
104+ request_id (str): The request id to remove.
82105 """
83106 request_to_remove = None
84- for request in self .requests :
107+ for request in self .requests . values () :
85108 if request .id == request_id :
86109 request_to_remove = request
87110 if hasattr (request , 'depends_on' ) and request .depends_on :
@@ -108,12 +131,12 @@ def finalize(self):
108131 def _request_by_id (self , request_id : str ) -> Optional [BatchRequestItem ]:
109132 """
110133 Finds a request by its ID.
111-
134+
112135 Args:
113136 request_id (str): The ID of the request to find.
114137
115138 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.
117140 """
118141 return self ._requests .get (request_id )
119142
@@ -137,4 +160,4 @@ def serialize(self, writer: SerializationWriter) -> None:
137160 Args:
138161 writer: Serialization writer to use to serialize this model
139162 """
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