Skip to content
Open
31 changes: 17 additions & 14 deletions src/sentry/releases/use_cases/release.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,9 @@ def serialize(
fetch_owners=lambda owner_ids: fetch_owners(user, owner_ids),
)

project_map = get_projects(projects, new_groups_map.values(), fetch_project_platforms)
project_map = get_projects(projects, fetch_project_platforms)

release_projects_map = {
release_id: [project_map[project_id] for project_id in mapping.keys()]
for release_id, mapping in new_groups_map.items()
}
release_projects_map = get_release_projects(new_groups_map, project_map)

adoption_stage_map: dict[int, dict[str, AdoptionStage]] = {
rid: {project_map[pid]["slug"]: adoption_stage for pid, adoption_stage in mapping}
Expand Down Expand Up @@ -117,28 +114,32 @@ def serialize(
)


def get_release_projects(
new_groups_map: defaultdict[int, dict[int, int]], project_map: dict[int, SerializedProject]
) -> defaultdict[int, list[SerializedProject]]:
release_projects_map: defaultdict[int, list[SerializedProject]] = defaultdict(list)
for release_id, mapping in new_groups_map.items():
for project_id, count in mapping.items():
release_projects_map[release_id].append({**project_map[project_id], "newGroups": count})
return release_projects_map


@sentry_sdk.trace
def get_projects(
projects: Iterable[Project],
project_group_counts: Iterable[dict[int, int]],
fetch_platforms: Callable[[Iterable[int]], list[tuple[int, str]]],
) -> dict[int, SerializedProject]:
platforms = defaultdict(list)
for project_id, platform in fetch_platforms([p.id for p in projects]):
platforms[project_id].append(platform)

new_groups: defaultdict[int, int] = defaultdict(int)
for mapping in project_group_counts:
for project_id, count in mapping.items():
new_groups[project_id] += count

return {
project.id: {
"id": project.id,
"slug": project.slug,
"name": project.name,
"platform": project.platform,
"newGroups": new_groups[project.id],
"newGroups": 0, # Default value, will be overridden per release
"platforms": platforms[project.id],
"hasHealthData": False,
}
Expand Down Expand Up @@ -400,8 +401,10 @@ def fetch_issue_count(
qs1 = ReleaseProjectEnvironment.objects.filter(release_id__in=release_ids)
qs1 = qs1.filter(environment_id__in=environment_ids)
qs1 = qs1.filter(project_id__in=project_ids)
qs1 = qs1.annotate(new_groups=Sum("new_issues_count"))
return list(qs1.values_list("project_id", "release_id", "new_groups"))
annotated_qs = qs1.values("project_id", "release_id").annotate(
new_groups=Sum("new_issues_count")
)
return list(annotated_qs.values_list("project_id", "release_id", "new_groups"))
else:
qs2 = ReleaseProject.objects.filter(release_id__in=release_ids)
qs2 = qs2.filter(project_id__in=project_ids)
Expand Down
Loading
Loading