Skip to content

Commit e6957fb

Browse files
committed
improved function
1 parent fc05e08 commit e6957fb

1 file changed

Lines changed: 21 additions & 23 deletions

File tree

  • packages/google-api-core/google/api_core/gapic_v1

packages/google-api-core/google/api_core/gapic_v1/method.py

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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

8985
class _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

Comments
 (0)