4
4
from collections import namedtuple
5
5
from collections .abc import Sequence
6
6
from dataclasses import dataclass
7
+ from typing import TYPE_CHECKING , Self
7
8
8
9
from django .db import models
9
10
from django .db .models import Case , F , Func , Q , Subquery , Value , When
17
18
from sentry .models .releases .release_project import ReleaseProject
18
19
from sentry .utils .numbers import validate_bigint
19
20
21
+ if TYPE_CHECKING :
22
+ from sentry .models .release import Release # noqa: F401
23
+
20
24
logger = logging .getLogger (__name__ )
21
25
22
26
@@ -34,7 +38,7 @@ class SemverFilter:
34
38
negated : bool = False
35
39
36
40
37
- class ReleaseQuerySet (BaseQuerySet ):
41
+ class ReleaseQuerySet (BaseQuerySet [ "Release" ] ):
38
42
def annotate_prerelease_column (self ):
39
43
"""
40
44
Adds a `prerelease_case` column to the queryset which is used to properly sort
@@ -60,7 +64,7 @@ def filter_by_semver_build(
60
64
build : str ,
61
65
project_ids : Sequence [int ] | None = None ,
62
66
negated : bool = False ,
63
- ) -> models . QuerySet :
67
+ ) -> Self :
64
68
"""
65
69
Filters released by build. If the passed `build` is a numeric string, we'll filter on
66
70
`build_number` and make use of the passed operator.
@@ -92,7 +96,7 @@ def filter_by_semver(
92
96
organization_id : int ,
93
97
semver_filter : SemverFilter ,
94
98
project_ids : Sequence [int ] | None = None ,
95
- ) -> models . QuerySet :
99
+ ) -> Self :
96
100
"""
97
101
Filters releases based on a based `SemverFilter` instance.
98
102
`SemverFilter.version_parts` can contain up to 6 components, which should map
@@ -138,7 +142,7 @@ def filter_by_stage(
138
142
value ,
139
143
project_ids : Sequence [int ] | None = None ,
140
144
environments : list [str ] | None = None ,
141
- ) -> models . QuerySet :
145
+ ) -> Self :
142
146
from sentry .models .releaseprojectenvironment import ReleaseProjectEnvironment , ReleaseStages
143
147
from sentry .search .events .filter import to_list
144
148
@@ -176,7 +180,7 @@ def filter_by_stage(
176
180
qs = self .filter (id__in = Subquery (rpes .filter (query ).values_list ("release_id" , flat = True )))
177
181
return qs
178
182
179
- def order_by_recent (self ):
183
+ def order_by_recent (self ) -> Self :
180
184
return self .order_by ("-date_added" , "-id" )
181
185
182
186
@staticmethod
0 commit comments