|
3 | 3 | import datetime
|
4 | 4 | from collections import defaultdict
|
5 | 5 | from collections.abc import Mapping, Sequence
|
6 |
| -from typing import Any, TypedDict, Union |
| 6 | +from typing import Any, NotRequired, TypedDict, Union |
7 | 7 |
|
8 | 8 | from django.contrib.auth.models import AnonymousUser
|
9 | 9 | from django.core.cache import cache
|
|
20 | 20 | from sentry.models.release import Release, ReleaseStatus
|
21 | 21 | from sentry.models.releaseprojectenvironment import ReleaseProjectEnvironment
|
22 | 22 | from sentry.models.releases.release_project import ReleaseProject
|
| 23 | +from sentry.release_health.base import ReleaseHealthOverview |
23 | 24 | from sentry.services.hybrid_cloud.user.serial import serialize_generic_user
|
24 | 25 | from sentry.services.hybrid_cloud.user.service import user_service
|
25 | 26 | from sentry.utils import metrics
|
@@ -291,6 +292,17 @@ def get_users_for_authors(organization_id, authors, user=None) -> Mapping[str, A
|
291 | 292 | return results
|
292 | 293 |
|
293 | 294 |
|
| 295 | +class _ProjectDict(TypedDict): |
| 296 | + id: int |
| 297 | + slug: str | None |
| 298 | + name: str |
| 299 | + new_groups: int | None |
| 300 | + platform: str | None |
| 301 | + platforms: list[str] |
| 302 | + health_data: NotRequired[ReleaseHealthOverview | None] |
| 303 | + has_health_data: NotRequired[bool] |
| 304 | + |
| 305 | + |
294 | 306 | @register(Release)
|
295 | 307 | class ReleaseSerializer(Serializer):
|
296 | 308 | def __get_project_id_list(self, item_list):
|
@@ -491,7 +503,7 @@ def get_attrs(self, item_list, user, **kwargs):
|
491 | 503 | has_health_data = {}
|
492 | 504 |
|
493 | 505 | for pr in project_releases:
|
494 |
| - pr_rv = { |
| 506 | + pr_rv: _ProjectDict = { |
495 | 507 | "id": pr["project__id"],
|
496 | 508 | "slug": pr["project__slug"],
|
497 | 509 | "name": pr["project__name"],
|
|
0 commit comments