@@ -23,11 +23,20 @@ def python2(self):
2323 def python3 (self ):
2424 return self .filter (version = 3 , is_published = True )
2525
26+ def pymanager (self ):
27+ return self .filter (version = 100 , is_published = True )
28+
2629 def latest_python2 (self ):
2730 return self .python2 ().filter (is_latest = True )
2831
29- def latest_python3 (self ):
30- return self .python3 ().filter (is_latest = True )
32+ def latest_python3 (self , minor_version : int | None = None ):
33+ if minor_version is None :
34+ return self .python3 ().filter (is_latest = True )
35+ pattern = rf"^Python 3\.{ minor_version } \."
36+ return self .python3 ().filter (name__regex = pattern ).order_by ("-release_date" )
37+
38+ def latest_pymanager (self ):
39+ return self .pymanager ().filter (is_latest = True )
3140
3241 def pre_release (self ):
3342 return self .filter (pre_release = True )
@@ -38,15 +47,10 @@ def released(self):
3847
3948class ReleaseManager (Manager .from_queryset (ReleaseQuerySet )):
4049 def latest_python2 (self ):
41- qs = self .get_queryset ().latest_python2 ()
42- if qs :
43- return qs [0 ]
44- else :
45- return None
46-
47- def latest_python3 (self ):
48- qs = self .get_queryset ().latest_python3 ()
49- if qs :
50- return qs [0 ]
51- else :
52- return None
50+ return self .get_queryset ().latest_python2 ().first ()
51+
52+ def latest_python3 (self , minor_version : int | None = None ):
53+ return self .get_queryset ().latest_python3 (minor_version ).first ()
54+
55+ def latest_pymanager (self ):
56+ return self .get_queryset ().latest_pymanager ().first ()
0 commit comments