Skip to content

Commit 1cc0c1f

Browse files
committed
review comments
1 parent 3c5c747 commit 1cc0c1f

File tree

3 files changed

+113
-113
lines changed

3 files changed

+113
-113
lines changed

sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_azureappconfigurationproviderbase.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -260,11 +260,11 @@ def _update_ff_telemetry_metadata(
260260
feature_flag_reference = f"{endpoint}kv/{feature_flag.key}"
261261
if feature_flag.label and not feature_flag.label.isspace():
262262
feature_flag_reference += f"?label={feature_flag.label}"
263-
allocation = feature_flag_value[TELEMETRY_KEY].get("allocation")
263+
allocation = feature_flag_value.get("allocation")
264264
if allocation and allocation.get("seed"):
265265
self._tracing_context.uses_seed = True
266-
if feature_flag_value[TELEMETRY_KEY].get("variant"):
267-
self._tracing_context.update_max_variants(len(feature_flag_value[TELEMETRY_KEY].get("variant")))
266+
if feature_flag_value.get("variant"):
267+
self._tracing_context.update_max_variants(len(feature_flag_value.get("variant", "")))
268268
if feature_flag_value[TELEMETRY_KEY].get("enabled"):
269269
self._tracing_context.uses_telemetry = True
270270
feature_flag_value[TELEMETRY_KEY][METADATA_KEY][FEATURE_FLAG_REFERENCE_KEY] = feature_flag_reference

sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_request_tracing_context.py

Lines changed: 98 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -110,84 +110,6 @@ def update_max_variants(self, size: int) -> None:
110110
if self.max_variants is None or size > self.max_variants:
111111
self.max_variants = size
112112

113-
def _get_features_string(self) -> str:
114-
"""
115-
Generate the features string for correlation context.
116-
117-
:return: A string containing features used separated by delimiters.
118-
:rtype: str
119-
"""
120-
features_list = []
121-
122-
if self.uses_load_balancing:
123-
features_list.append(LOAD_BALANCING_FEATURE)
124-
if self.uses_ai_configuration:
125-
features_list.append(AI_CONFIGURATION_FEATURE)
126-
if self.uses_aicc_configuration:
127-
features_list.append(AI_CHAT_COMPLETION_FEATURE)
128-
if self.get_assembly_version(AZURE_AI_PROJECTS_PACKAGE):
129-
features_list.append(AI_FOUNDRY_SDK_FEATURE)
130-
131-
return Delimiter.join(features_list)
132-
133-
def _create_features_string(self) -> str:
134-
"""
135-
Generate the features string for feature flag usage tracking.
136-
137-
:return: A string containing feature flag usage tags separated by delimiters.
138-
:rtype: str
139-
"""
140-
features_list = []
141-
142-
if self.uses_seed:
143-
features_list.append(FEATURE_FLAG_USES_SEED_TAG)
144-
145-
if self.uses_telemetry:
146-
features_list.append(FEATURE_FLAG_USES_TELEMETRY_TAG)
147-
148-
return Delimiter.join(features_list)
149-
150-
@staticmethod
151-
def get_host_type() -> str:
152-
"""
153-
Detect the host environment type based on environment variables.
154-
155-
:return: The detected host type.
156-
:rtype: str
157-
"""
158-
if os.environ.get(AzureFunctionEnvironmentVariable):
159-
return HostType.AZURE_FUNCTION
160-
if os.environ.get(AzureWebAppEnvironmentVariable):
161-
return HostType.AZURE_WEB_APP
162-
if os.environ.get(ContainerAppEnvironmentVariable):
163-
return HostType.CONTAINER_APP
164-
if os.environ.get(KubernetesEnvironmentVariable):
165-
return HostType.KUBERNETES
166-
if os.environ.get(ServiceFabricEnvironmentVariable):
167-
return HostType.SERVICE_FABRIC
168-
169-
return HostType.UNIDENTIFIED
170-
171-
@staticmethod
172-
def get_assembly_version(package_name: str) -> Optional[str]:
173-
"""
174-
Get the version of a Python package.
175-
176-
:param package_name: The name of the package to get version for.
177-
:type package_name: str
178-
:return: Package version string or None if not found.
179-
:rtype: Optional[str]
180-
"""
181-
if not package_name:
182-
return None
183-
184-
try:
185-
return version(package_name)
186-
except PackageNotFoundError:
187-
pass
188-
189-
return None
190-
191113
def reset_ai_configuration_tracing(self) -> None:
192114
"""
193115
Reset AI configuration tracing flags.
@@ -276,12 +198,12 @@ def update_correlation_context_header(
276198
key_values.append((MAX_VARIANTS_KEY, str(self.max_variants)))
277199

278200
# Add feature flag features if present
279-
ff_features_string = self._create_features_string()
201+
ff_features_string = self._create_ff_feature_string()
280202
if ff_features_string:
281203
key_values.append((FF_FEATURES_KEY, ff_features_string))
282204

283205
# Add general features if present
284-
features_string = self._get_features_string()
206+
features_string = self._create_features_string()
285207
if features_string:
286208
key_values.append((FEATURES_KEY, features_string))
287209

@@ -313,6 +235,67 @@ def update_correlation_context_header(
313235

314236
return headers
315237

238+
def update_feature_filter_telemetry(self, feature_flag) -> None:
239+
"""
240+
Track feature filter usage for App Configuration telemetry.
241+
242+
:param feature_flag: The feature flag to analyze for filter usage.
243+
:type feature_flag: FeatureFlagConfigurationSetting
244+
"""
245+
# Constants are already imported at module level
246+
247+
if feature_flag.filters:
248+
for filter in feature_flag.filters:
249+
if filter.get("name") in PERCENTAGE_FILTER_NAMES:
250+
self.feature_filter_usage[PERCENTAGE_FILTER_KEY] = True
251+
elif filter.get("name") in TIME_WINDOW_FILTER_NAMES:
252+
self.feature_filter_usage[TIME_WINDOW_FILTER_KEY] = True
253+
elif filter.get("name") in TARGETING_FILTER_NAMES:
254+
self.feature_filter_usage[TARGETING_FILTER_KEY] = True
255+
else:
256+
self.feature_filter_usage[CUSTOM_FILTER_KEY] = True
257+
258+
def reset_feature_filter_usage(self) -> None:
259+
"""Reset the feature filter usage tracking."""
260+
self.feature_filter_usage = {}
261+
262+
def _create_features_string(self) -> str:
263+
"""
264+
Generate the features string for correlation context.
265+
266+
:return: A string containing features used separated by delimiters.
267+
:rtype: str
268+
"""
269+
features_list = []
270+
271+
if self.uses_load_balancing:
272+
features_list.append(LOAD_BALANCING_FEATURE)
273+
if self.uses_ai_configuration:
274+
features_list.append(AI_CONFIGURATION_FEATURE)
275+
if self.uses_aicc_configuration:
276+
features_list.append(AI_CHAT_COMPLETION_FEATURE)
277+
if self.get_assembly_version(AZURE_AI_PROJECTS_PACKAGE):
278+
features_list.append(AI_FOUNDRY_SDK_FEATURE)
279+
280+
return Delimiter.join(features_list)
281+
282+
def _create_ff_feature_string(self) -> str:
283+
"""
284+
Generate the features string for feature flag usage tracking.
285+
286+
:return: A string containing feature flag usage tags separated by delimiters.
287+
:rtype: str
288+
"""
289+
features_list = []
290+
291+
if self.uses_seed:
292+
features_list.append(FEATURE_FLAG_USES_SEED_TAG)
293+
294+
if self.uses_telemetry:
295+
features_list.append(FEATURE_FLAG_USES_TELEMETRY_TAG)
296+
297+
return Delimiter.join(features_list)
298+
316299
def _create_filters_string(self) -> str:
317300
"""
318301
Create a string representing the feature filters in use.
@@ -333,26 +316,43 @@ def _create_filters_string(self) -> str:
333316

334317
return Delimiter.join(filters)
335318

336-
def update_feature_filter_telemetry(self, feature_flag) -> None:
319+
@staticmethod
320+
def get_host_type() -> str:
337321
"""
338-
Track feature filter usage for App Configuration telemetry.
322+
Detect the host environment type based on environment variables.
339323
340-
:param feature_flag: The feature flag to analyze for filter usage.
341-
:type feature_flag: FeatureFlagConfigurationSetting
324+
:return: The detected host type.
325+
:rtype: str
342326
"""
343-
# Constants are already imported at module level
327+
if os.environ.get(AzureFunctionEnvironmentVariable):
328+
return HostType.AZURE_FUNCTION
329+
if os.environ.get(AzureWebAppEnvironmentVariable):
330+
return HostType.AZURE_WEB_APP
331+
if os.environ.get(ContainerAppEnvironmentVariable):
332+
return HostType.CONTAINER_APP
333+
if os.environ.get(KubernetesEnvironmentVariable):
334+
return HostType.KUBERNETES
335+
if os.environ.get(ServiceFabricEnvironmentVariable):
336+
return HostType.SERVICE_FABRIC
344337

345-
if feature_flag.filters:
346-
for filter in feature_flag.filters:
347-
if filter.get("name") in PERCENTAGE_FILTER_NAMES:
348-
self.feature_filter_usage[PERCENTAGE_FILTER_KEY] = True
349-
elif filter.get("name") in TIME_WINDOW_FILTER_NAMES:
350-
self.feature_filter_usage[TIME_WINDOW_FILTER_KEY] = True
351-
elif filter.get("name") in TARGETING_FILTER_NAMES:
352-
self.feature_filter_usage[TARGETING_FILTER_KEY] = True
353-
else:
354-
self.feature_filter_usage[CUSTOM_FILTER_KEY] = True
338+
return HostType.UNIDENTIFIED
355339

356-
def reset_feature_filter_usage(self) -> None:
357-
"""Reset the feature filter usage tracking."""
358-
self.feature_filter_usage = {}
340+
@staticmethod
341+
def get_assembly_version(package_name: str) -> Optional[str]:
342+
"""
343+
Get the version of a Python package.
344+
345+
:param package_name: The name of the package to get version for.
346+
:type package_name: str
347+
:return: Package version string or None if not found.
348+
:rtype: Optional[str]
349+
"""
350+
if not package_name:
351+
return None
352+
353+
try:
354+
return version(package_name)
355+
except PackageNotFoundError:
356+
pass
357+
358+
return None

sdk/appconfiguration/azure-appconfiguration-provider/tests/test_request_tracing_context.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -73,31 +73,31 @@ def testupdate_max_variants(self):
7373
self.context.update_max_variants(3)
7474
self.assertEqual(self.context.max_variants, 10)
7575

76-
def test__get_features_string_empty(self):
77-
"""Test _get_features_string with no features enabled."""
78-
result = self.context._get_features_string()
76+
def test__create_features_string_empty(self):
77+
"""Test _create_features_string with no features enabled."""
78+
result = self.context._create_features_string()
7979
self.assertEqual(result, "")
8080

81-
def test__get_features_string_with_features(self):
82-
"""Test _get_features_string with features enabled."""
81+
def test__create_features_string_with_features(self):
82+
"""Test _create_features_string with features enabled."""
8383
self.context.uses_load_balancing = True
8484
self.context.uses_ai_configuration = True
8585
self.context.uses_aicc_configuration = True
8686

87-
result = self.context._get_features_string()
87+
result = self.context._create_features_string()
8888
self.assertEqual(result, "LB+AI+AICC")
8989

90-
def test__create_features_string_empty(self):
91-
"""Test _create_features_string with no FF features enabled."""
92-
result = self.context._create_features_string()
90+
def test__create_ff_features_string_empty(self):
91+
"""Test _create_feature_string with no FF features enabled."""
92+
result = self.context._create_ff_feature_string()
9393
self.assertEqual(result, "")
9494

95-
def test__create_features_string_with_features(self):
96-
"""Test _create_features_string with FF features enabled."""
95+
def test__create_ff_features_string_with_features(self):
96+
"""Test _create_ff_feature_string with FF features enabled."""
9797
self.context.uses_seed = True
9898
self.context.uses_telemetry = True
9999

100-
result = self.context._create_features_string()
100+
result = self.context._create_ff_feature_string()
101101
expected = f"{FEATURE_FLAG_USES_SEED_TAG}+{FEATURE_FLAG_USES_TELEMETRY_TAG}"
102102
self.assertEqual(result, expected)
103103

0 commit comments

Comments
 (0)