Skip to content

Commit 1acaa1d

Browse files
committed
add grouping logic
1 parent f7eb088 commit 1acaa1d

File tree

1 file changed

+13
-14
lines changed

1 file changed

+13
-14
lines changed

apps/codecov-api/api/sentry/views.py

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
from itertools import groupby
23

34
import sentry_sdk
45
from django.conf import settings
@@ -280,13 +281,13 @@ def test_analytics_eu(request, *args, **kwargs):
280281
)
281282
continue
282283

283-
repositories = Repository.objects.filter(
284-
author=owner, test_analytics_enabled=True
284+
# Only fetch name and repoid fields
285+
repo_id_to_name = dict(
286+
Repository.objects.filter(
287+
author=owner, test_analytics_enabled=True
288+
).values_list("repoid", "name")
285289
)
286290

287-
# Get all repo IDs for this owner
288-
repo_id_to_name = {repo.repoid: repo.name for repo in repositories}
289-
290291
if not repo_id_to_name:
291292
test_runs_per_integration[name] = {}
292293
continue
@@ -296,16 +297,14 @@ def test_analytics_eu(request, *args, **kwargs):
296297
"repo_id", "-timestamp"
297298
)
298299

300+
# Group by repo_id (data is already ordered by repo_id) and serialize each group
299301
test_runs_per_repository = {}
300-
for repo_id, repo_name in repo_id_to_name.items():
301-
test_runs_per_repository[repo_name] = []
302-
303-
serialized_test_runs = TestrunSerializer(test_runs, many=True).data
304-
for test_run_data in serialized_test_runs:
305-
repo_id = test_run_data["repo_id"]
306-
repo_name = repo_id_to_name.get(repo_id)
307-
if repo_name:
308-
test_runs_per_repository[repo_name].append(test_run_data)
302+
for repo_id, group in groupby(test_runs, key=lambda tr: tr.repo_id):
303+
repo_name = repo_id_to_name[repo_id] # Safe: we only fetch these repo_ids
304+
test_runs_list = list(group)
305+
test_runs_per_repository[repo_name] = TestrunSerializer(
306+
test_runs_list, many=True
307+
).data
309308

310309
# Store each test_runs_per_repository in a dictionary
311310
test_runs_per_integration[name] = test_runs_per_repository

0 commit comments

Comments
 (0)