11# ducktools-pythonfinder
22# MIT License
3- #
3+ #
44# Copyright (c) 2023-2025 David C Ellis
5- #
5+ #
66# Permission is hereby granted, free of charge, to any person obtaining a copy
77# of this software and associated documentation files (the "Software"), to deal
88# in the Software without restriction, including without limitation the rights
99# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
1010# copies of the Software, and to permit persons to whom the Software is
1111# furnished to do so, subject to the following conditions:
12- #
12+ #
1313# The above copyright notice and this permission notice shall be included in all
1414# copies or substantial portions of the Software.
15- #
15+ #
1616# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1717# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1818# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -78,7 +78,7 @@ def test_latest(self, searcher):
7878 s = searcher (self .system , self .machine )
7979
8080 latest_312 = s .latest_binary_match (SpecifierSet ("~=3.12.0" ))
81- assert latest_312 .version == "3.12.5 "
81+ assert latest_312 .version == "3.12.10 "
8282
8383 before_312 = s .latest_binary_match (SpecifierSet ("<3.12" ))
8484 assert before_312 .version == "3.11.9"
@@ -88,12 +88,13 @@ def test_latest_bins(self, searcher):
8888
8989 latest_310 = s .latest_minor_binaries (SpecifierSet (">=3.10.0" ))
9090
91- assert len (latest_310 ) == 3
91+ assert len (latest_310 ) == 4
9292
9393 # Check releases in reverse order
94- assert latest_310 [0 ].version == "3.12.5"
95- assert latest_310 [1 ].version == "3.11.9"
96- assert latest_310 [2 ].version == "3.10.11"
94+ assert latest_310 [0 ].version == "3.13.3"
95+ assert latest_310 [1 ].version == "3.12.10"
96+ assert latest_310 [2 ].version == "3.11.9"
97+ assert latest_310 [3 ].version == "3.10.11"
9798
9899 def test_all_matching_binaries (self , searcher ):
99100 s = searcher (self .system , self .machine )
@@ -102,7 +103,7 @@ def test_all_matching_binaries(self, searcher):
102103
103104 # releases of each minor version since 3.8
104105 # v3.9.3 was yanked for incompatibilities
105- assert len (all_bins ) == 52
106+ assert len (all_bins ) == 61
106107
107108 def test_all_bin_extensions (self , searcher ):
108109 # Check all extensions provided match one of the supported set
@@ -118,14 +119,14 @@ def test_all_bin_extensions(self, searcher):
118119 def test_prerelease (self , searcher ):
119120 s = searcher (self .system , self .machine )
120121 match = s .latest_binary_match (SpecifierSet (">=3.12" ), prereleases = True )
121- assert match .version == "3.13.0rc1 "
122+ assert match .version == "3.14.0b2 "
122123 assert match .is_prerelease is True
123124
124125 def test_latest_download (self , searcher ):
125126 s = searcher (self .system , self .machine )
126127 download = s .latest_python_download ()
127- assert download .version == "3.12.5 "
128- assert download .url .endswith ("3.12.5 -amd64.exe" )
128+ assert download .version == "3.13.3 "
129+ assert download .url .endswith ("3.13.3 -amd64.exe" )
129130
130131
131132class TestMacOS :
@@ -136,7 +137,7 @@ def test_latest(self, searcher):
136137 s = searcher (self .system , self .machine )
137138
138139 latest_312 = s .latest_binary_match (SpecifierSet ("~=3.12.0" ))
139- assert latest_312 .version == "3.12.5 "
140+ assert latest_312 .version == "3.12.10 "
140141
141142 before_312 = s .latest_binary_match (SpecifierSet ("<3.12" ))
142143 assert before_312 .version == "3.11.9"
@@ -146,12 +147,13 @@ def test_latest_bins(self, searcher):
146147
147148 latest_310 = s .latest_minor_binaries (SpecifierSet (">=3.10.0" ))
148149
149- assert len (latest_310 ) == 3
150+ assert len (latest_310 ) == 4
150151
151152 # Check releases in reverse order
152- assert latest_310 [0 ].version == "3.12.5"
153- assert latest_310 [1 ].version == "3.11.9"
154- assert latest_310 [2 ].version == "3.10.11"
153+ assert latest_310 [0 ].version == "3.13.3"
154+ assert latest_310 [1 ].version == "3.12.10"
155+ assert latest_310 [2 ].version == "3.11.9"
156+ assert latest_310 [3 ].version == "3.10.11"
155157
156158 def test_all_matching_binaries (self , searcher ):
157159 s = searcher (self .system , self .machine )
@@ -161,7 +163,7 @@ def test_all_matching_binaries(self, searcher):
161163 # releases of each minor version since 3.8
162164 # v3.9.3 was yanked for incompatibilities
163165 # MacOS has duplicates for Intel only binaries
164- assert len (all_bins ) == 64
166+ assert len (all_bins ) == 73
165167
166168 def test_all_bin_extensions (self , searcher ):
167169 # Check all extensions provided match one of the supported set
@@ -177,8 +179,8 @@ def test_all_bin_extensions(self, searcher):
177179 def test_latest_download (self , searcher ):
178180 s = searcher (self .system , self .machine )
179181 download = s .latest_python_download ()
180- assert download .version == "3.12.5 "
181- assert download .url .endswith ("3.12.5 -macos11.pkg" )
182+ assert download .version == "3.13.3 "
183+ assert download .url .endswith ("3.13.3 -macos11.pkg" )
182184
183185
184186class TestLinux :
@@ -189,22 +191,23 @@ def test_latest(self, searcher):
189191 s = searcher (self .system , self .machine )
190192
191193 latest_312 = s .latest_binary_match (SpecifierSet ("~=3.12.0" ))
192- assert latest_312 .version == "3.12.5 "
194+ assert latest_312 .version == "3.12.10 "
193195
194196 before_312 = s .latest_binary_match (SpecifierSet ("<3.12" ))
195- assert before_312 .version == "3.11.9"
197+ assert before_312 .version == "3.11.12" # Linux gets extra releases
196198
197199 def test_latest_bins (self , searcher ):
198200 s = searcher (self .system , self .machine )
199201
200202 latest_310 = s .latest_minor_binaries (SpecifierSet (">=3.10.0" ))
201203
202- assert len (latest_310 ) == 3
204+ assert len (latest_310 ) == 4
203205
204206 # Check releases in reverse order
205- assert latest_310 [0 ].version == "3.12.5"
206- assert latest_310 [1 ].version == "3.11.9"
207- assert latest_310 [2 ].version == "3.10.14" # source only release
207+ assert latest_310 [0 ].version == "3.13.3"
208+ assert latest_310 [1 ].version == "3.12.10"
209+ assert latest_310 [2 ].version == "3.11.12" # source only release
210+ assert latest_310 [3 ].version == "3.10.17" # source only release
208211
209212 def test_all_matching_binaries (self , searcher ):
210213 s = searcher (self .system , self .machine )
@@ -214,7 +217,7 @@ def test_all_matching_binaries(self, searcher):
214217 # releases of each minor version since 3.8
215218 # v3.9.3 was yanked for incompatibilities
216219 # Linux includes source releases and has multiple formats for them
217- assert len (all_bins ) == 140
220+ assert len (all_bins ) == 178
218221
219222 def test_all_bin_extensions (self , searcher ):
220223 # Check all extensions provided match one of the supported set
@@ -230,5 +233,5 @@ def test_all_bin_extensions(self, searcher):
230233 def test_latest_download (self , searcher ):
231234 s = searcher (self .system , self .machine )
232235 download = s .latest_python_download ()
233- assert download .version == "3.12.5 "
234- assert download .url .endswith ("3.12.5 .tgz" )
236+ assert download .version == "3.13.3 "
237+ assert download .url .endswith ("3.13.3 .tgz" )
0 commit comments