Skip to content

Commit deee405

Browse files
authored
fix: parse-string-user-agents-to-int-in-mapper (#6756)
1 parent 9094867 commit deee405

2 files changed

Lines changed: 31 additions & 5 deletions

File tree

api/app_analytics/mappers.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,13 @@ def map_influx_record_values_to_labels(values: dict[str, Any]) -> Labels:
6666
labels: Labels = {}
6767
for label in LABELS:
6868
if label == "user_agent":
69-
user_agent_influx_id: int | None = values.get("user_agent")
70-
if user_agent_influx_id and (
71-
user_agent := SDK_USER_AGENTS_BY_INFLUX_ID.get(user_agent_influx_id)
72-
):
73-
labels["user_agent"] = user_agent
69+
try:
70+
influx_id = int(values["user_agent"])
71+
except (KeyError, ValueError, TypeError):
72+
pass
73+
else:
74+
if user_agent := SDK_USER_AGENTS_BY_INFLUX_ID.get(influx_id):
75+
labels["user_agent"] = user_agent
7476
continue
7577
if value := values.get(label):
7678
labels[label] = value

api/tests/unit/app_analytics/test_unit_app_analytics_mappers.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
from datetime import date, datetime
22

3+
import pytest
34
from influxdb_client.client.flux_table import FluxRecord, FluxTable
45

56
from app_analytics.dataclasses import FeatureEvaluationData, UsageData
67
from app_analytics.mappers import (
78
map_flux_tables_to_feature_evaluation_data,
89
map_flux_tables_to_usage_data,
10+
map_influx_record_values_to_labels,
911
)
1012

1113

@@ -79,3 +81,25 @@ def test_map_flux_tables_to_usage_data__returns_expected() -> None:
7981
labels={"client_application_name": "test-app"},
8082
)
8183
]
84+
85+
86+
@pytest.mark.parametrize(
87+
"values, expected",
88+
[
89+
({"user_agent": "50001"}, {"user_agent": "flagsmith-js-sdk/9.3.1"}),
90+
({"user_agent": "0"}, {"user_agent": "flagsmith-dotnet-sdk/unknown"}),
91+
({"user_agent": "90000"}, {"user_agent": "flagsmith-python-sdk/unknown"}),
92+
({}, {}),
93+
({"user_agent": "99999"}, {}),
94+
({"user_agent": "not-a-number"}, {}),
95+
],
96+
)
97+
def test_map_influx_record_values_to_labels(
98+
values: dict[str, str],
99+
expected: dict[str, str],
100+
) -> None:
101+
# Given / When
102+
result = map_influx_record_values_to_labels(values)
103+
104+
# Then
105+
assert result == expected

0 commit comments

Comments
 (0)