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