Skip to content

Commit 586ecf4

Browse files
ref: annotate query type for ReleaseQuerySet
1 parent f2f13a5 commit 586ecf4

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

src/sentry/models/release.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ def _get_cache_key(project_id: int, group_id: int, first: bool) -> str:
9797

9898

9999
class ReleaseModelManager(BaseManager["Release"]):
100-
def get_queryset(self):
100+
def get_queryset(self) -> ReleaseQuerySet:
101101
return ReleaseQuerySet(self.model, using=self._db)
102102

103103
def annotate_prerelease_column(self):

src/sentry/models/releases/util.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from collections import namedtuple
55
from collections.abc import Sequence
66
from dataclasses import dataclass
7+
from typing import TYPE_CHECKING, Self
78

89
from django.db import models
910
from django.db.models import Case, F, Func, Q, Subquery, Value, When
@@ -17,6 +18,9 @@
1718
from sentry.models.releases.release_project import ReleaseProject
1819
from sentry.utils.numbers import validate_bigint
1920

21+
if TYPE_CHECKING:
22+
from sentry.models.release import Release # noqa: F401
23+
2024
logger = logging.getLogger(__name__)
2125

2226

@@ -34,7 +38,7 @@ class SemverFilter:
3438
negated: bool = False
3539

3640

37-
class ReleaseQuerySet(BaseQuerySet):
41+
class ReleaseQuerySet(BaseQuerySet["Release"]):
3842
def annotate_prerelease_column(self):
3943
"""
4044
Adds a `prerelease_case` column to the queryset which is used to properly sort
@@ -60,7 +64,7 @@ def filter_by_semver_build(
6064
build: str,
6165
project_ids: Sequence[int] | None = None,
6266
negated: bool = False,
63-
) -> models.QuerySet:
67+
) -> Self:
6468
"""
6569
Filters released by build. If the passed `build` is a numeric string, we'll filter on
6670
`build_number` and make use of the passed operator.
@@ -92,7 +96,7 @@ def filter_by_semver(
9296
organization_id: int,
9397
semver_filter: SemverFilter,
9498
project_ids: Sequence[int] | None = None,
95-
) -> models.QuerySet:
99+
) -> Self:
96100
"""
97101
Filters releases based on a based `SemverFilter` instance.
98102
`SemverFilter.version_parts` can contain up to 6 components, which should map
@@ -138,7 +142,7 @@ def filter_by_stage(
138142
value,
139143
project_ids: Sequence[int] | None = None,
140144
environments: list[str] | None = None,
141-
) -> models.QuerySet:
145+
) -> Self:
142146
from sentry.models.releaseprojectenvironment import ReleaseProjectEnvironment, ReleaseStages
143147
from sentry.search.events.filter import to_list
144148

@@ -176,7 +180,7 @@ def filter_by_stage(
176180
qs = self.filter(id__in=Subquery(rpes.filter(query).values_list("release_id", flat=True)))
177181
return qs
178182

179-
def order_by_recent(self):
183+
def order_by_recent(self) -> Self:
180184
return self.order_by("-date_added", "-id")
181185

182186
@staticmethod

0 commit comments

Comments
 (0)