1+ from typing import Optional
2+
13from kiota_abstractions .request_option import RequestOption
24from opentelemetry .semconv .attributes .url_attributes import URL_FULL
35
911
1012class UrlReplaceHandler (BaseMiddleware ):
1113
12- def __init__ (self , options : UrlReplaceHandlerOption = UrlReplaceHandlerOption ()) :
14+ def __init__ (self , options : Optional [ UrlReplaceHandlerOption ] = None ) -> None :
1315 """Create an instance of UrlReplaceHandler
1416
1517 Args:
1618 options (UrlReplaceHandlerOption, optional): The url replacement
17- options to pass to the handler.
18- Defaults to UrlReplaceHandlerOption
19+ options to pass to the handler. A new UrlReplaceHandlerOption
20+ per handler when not provided.
1921 """
2022 super ().__init__ ()
21- self .options = options
23+ self .options = options if options is not None else UrlReplaceHandlerOption ()
2224
2325 async def send (
2426 self , request : httpx .Request , transport : httpx .AsyncBaseTransport
@@ -32,19 +34,19 @@ async def send(
3234 Returns:
3335 Response: The response object.
3436 """
35- response = None
3637 _enable_span = self ._create_observability_span (request , "UrlReplaceHandler_send" )
37- if self .options and self .options .is_enabled :
38- _enable_span .set_attribute ("com.microsoft.kiota.handler.url_replacer.enable" , True )
38+ try :
3939 current_options = self ._get_current_options (request )
40+ if current_options .is_enabled :
41+ _enable_span .set_attribute ("com.microsoft.kiota.handler.url_replacer.enable" , True )
4042
41- url_string : str = str (request .url )
42- url_string = self .replace_url_segment (url_string , current_options )
43- request .url = httpx .URL (url_string )
44- _enable_span .set_attribute (URL_FULL , str (request .url ))
45- response = await super ().send (request , transport )
46- _enable_span . end ()
47- return response
43+ url_string : str = str (request .url )
44+ url_string = self .replace_url_segment (url_string , current_options )
45+ request .url = httpx .URL (url_string )
46+ _enable_span .set_attribute (URL_FULL , str (request .url ))
47+ return await super ().send (request , transport )
48+ finally :
49+ _enable_span . end ()
4850
4951 def _get_current_options (self , request : httpx .Request ) -> UrlReplaceHandlerOption :
5052 """Returns the options to use for the request.Overries default options if
@@ -58,7 +60,9 @@ def _get_current_options(self, request: httpx.Request) -> UrlReplaceHandlerOptio
5860 """
5961 request_options = request .extensions .get (REQUEST_OPTIONS_KEY )
6062 if request_options :
61- current_options = request_options .get (UrlReplaceHandlerOption .get_key (), self .options )
63+ current_options : UrlReplaceHandlerOption = request_options .get (
64+ UrlReplaceHandlerOption .get_key (), self .options
65+ )
6266 return current_options
6367 return self .options
6468
0 commit comments