33
44from importlib .metadata import version
55
6- from durabletask .internal .grpc_interceptor import DefaultClientInterceptorImpl
6+ from durabletask .internal .grpc_interceptor import (
7+ DefaultAsyncClientInterceptorImpl ,
8+ DefaultClientInterceptorImpl ,
9+ )
10+
11+
12+ def _build_metadata (taskhub_name : str ) -> list [tuple [str , str ]]:
13+ """Build the gRPC metadata headers sent on every Durable Functions call."""
14+ try :
15+ # Get the version of the azurefunctions package
16+ sdk_version = version ('durabletask-azurefunctions' )
17+ except Exception :
18+ # Fallback if version cannot be determined
19+ sdk_version = "unknown"
20+ user_agent = f"durabletask-python/{ sdk_version } "
21+ return [
22+ ("taskhub" , taskhub_name ),
23+ ("x-user-agent" , user_agent )] # 'user-agent' is a reserved header in grpc, so we use 'x-user-agent' instead
724
825
926class AzureFunctionsDefaultClientInterceptorImpl (DefaultClientInterceptorImpl ):
@@ -14,14 +31,18 @@ class AzureFunctionsDefaultClientInterceptorImpl(DefaultClientInterceptorImpl):
1431
1532 def __init__ (self , taskhub_name : str , required_query_string_parameters : str ):
1633 self .required_query_string_parameters = required_query_string_parameters
17- try :
18- # Get the version of the azurefunctions package
19- sdk_version = version ('durabletask-azurefunctions' )
20- except Exception :
21- # Fallback if version cannot be determined
22- sdk_version = "unknown"
23- user_agent = f"durabletask-python/{ sdk_version } "
24- self ._metadata = [
25- ("taskhub" , taskhub_name ),
26- ("x-user-agent" , user_agent )] # 'user-agent' is a reserved header in grpc, so we use 'x-user-agent' instead
34+ self ._metadata = _build_metadata (taskhub_name )
35+ super ().__init__ (self ._metadata )
36+
37+
38+ class AzureFunctionsAsyncDefaultClientInterceptorImpl (DefaultAsyncClientInterceptorImpl ):
39+ """Async version of AzureFunctionsDefaultClientInterceptorImpl for use with grpc.aio channels.
40+
41+ This class implements async gRPC interceptors to add Durable Functions headers
42+ (task hub name and user agent) to all async calls."""
43+ required_query_string_parameters : str
44+
45+ def __init__ (self , taskhub_name : str , required_query_string_parameters : str ):
46+ self .required_query_string_parameters = required_query_string_parameters
47+ self ._metadata = _build_metadata (taskhub_name )
2748 super ().__init__ (self ._metadata )
0 commit comments