44from collections import namedtuple
55from collections .abc import Sequence
66from dataclasses import dataclass
7+ from typing import TYPE_CHECKING , Self
78
89from django .db import models
910from django .db .models import Case , F , Func , Q , Subquery , Value , When
1718from sentry .models .releases .release_project import ReleaseProject
1819from sentry .utils .numbers import validate_bigint
1920
21+ if TYPE_CHECKING :
22+ from sentry .models .release import Release # noqa: F401
23+
2024logger = 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