@@ -57,33 +57,29 @@ def _apply_decorators(func, decorators):
5757 return func
5858
5959
60- def _extract_metrics_header (metadata ):
60+ def _extract_metrics_header (metadata ) -> Tuple [ List [ Tuple [ str , str ], ...], str ]
6161 """Extract x-google-api-client header from metadata list.
6262
6363 Args:
6464 metadata (Sequence[Tuple[str, str]]): The metadata to extract from.
6565
6666 Returns:
67- Tuple[List[Tuple[str, str]], List[str]]: A tuple containing:
68- - A list of remaining metadata tuples.
69- - A list of metrics header values found .
67+ A tuple containing:
68+ - A sequence of remaining metadata tuples.
69+ - a string representing the header value .
7070 """
7171 if not metadata :
72- return [], []
73-
74- for i , (key , val ) in enumerate (metadata ):
75- if key == client_info .METRICS_METADATA_KEY :
76- # Key located. Check the rest of the list for duplicate entries
77- arbitrary_metadata = list (metadata [:i ])
78- metric_values = [val ]
79- for k , v in metadata [i + 1 :]:
80- if k == client_info .METRICS_METADATA_KEY :
81- metric_values .append (v )
82- else :
83- arbitrary_metadata .append ((k , v ))
84- return arbitrary_metadata , metric_values
85- # No key found
86- return list (metadata ), []
72+ return (), ""
73+
74+ key_to_find = client_info .METRICS_METADATA_KEY
75+
76+ metric_str = " " .join ([v for k , v in metadata if k == key_to_find ])
77+
78+ if not metric_str :
79+ return list (metadata ), ""
80+
81+ arbitrary_metadata = [item for item in metadata if item [0 ] != key_to_find ]
82+ return arbitrary_metadata , metric_str
8783
8884
8985class _GapicCallable (object ):
@@ -121,8 +117,7 @@ def __init__(
121117 self ._compression = compression
122118 self ._metadata = metadata
123119 # Pre-extract the x-goog-api-client header from the initialized metadata.
124- self ._arbitrary_metadata , metric_values = _extract_metrics_header (metadata )
125- self ._metrics_values = " " .join (metric_values ) if metric_values else ""
120+ self ._arbitrary_metadata , self ._metrics_values = _extract_metrics_header (metadata )
126121
127122 def __call__ (
128123 self , * args , timeout = DEFAULT , retry = DEFAULT , compression = DEFAULT , ** kwargs
@@ -158,10 +153,13 @@ def __call__(
158153 # Merge user-supplied metadata with library-supplied metadata.
159154 merged_metadata , api_client_values = _extract_metrics_header (metadata )
160155 if self ._metrics_values :
161- api_client_values .append (self ._metrics_values )
156+ if api_client_values :
157+ api_client_values = f"{ api_client_values } { self ._metrics_values } "
158+ else :
159+ api_client_values = self ._metrics_values
162160 if api_client_values :
163161 merged_metadata .append (
164- (client_info .METRICS_METADATA_KEY , " " . join ( api_client_values ) )
162+ (client_info .METRICS_METADATA_KEY , api_client_values )
165163 )
166164 merged_metadata .extend (self ._arbitrary_metadata )
167165 kwargs ["metadata" ] = merged_metadata
0 commit comments