@@ -185,17 +185,21 @@ def install(self, bin_name: str, **context):
185185 def test_load_or_install_does_not_log_error_for_expected_load_fallback (self ):
186186 class FallbackProvider (BinProvider ):
187187 name : str = 'fallback'
188+ installed : bool = False
188189
189- def load (self , bin_name : str , ** context ):
190- raise RuntimeError ('simulated load miss' )
190+ def default_abspath_handler (self , bin_name : str , ** context ):
191+ if not self .installed :
192+ return None
193+ return Path ('/usr/bin/true' )
191194
192- def install (self , bin_name : str , ** context ):
193- return BinProvider .load (
194- EnvProvider (),
195- 'python' ,
196- quiet = True ,
197- nocache = True ,
198- )
195+ def default_version_handler (self , bin_name : str , abspath : Optional [Path ] = None , ** context ):
196+ if not self .installed :
197+ return None
198+ return SemVer ('1.2.3' )
199+
200+ def default_install_handler (self , bin_name : str , install_args : Optional [InstallArgs ] = None , ** context ):
201+ self .installed = True
202+ return 'installed'
199203
200204 provider = FallbackProvider ()
201205
@@ -210,15 +214,31 @@ def install(self, bin_name: str, **context):
210214 def test_multi_provider_load_or_install_logs_intermediate_failures_at_debug_only (self ):
211215 class FirstFailsProvider (BinProvider ):
212216 name : str = 'first_fail'
217+ installed : bool = False
213218
214- def load_or_install (self , bin_name : str , ** context ):
219+ def default_abspath_handler (self , bin_name : str , ** context ):
220+ return None
221+
222+ def default_install_handler (self , bin_name : str , install_args : Optional [InstallArgs ] = None , ** context ):
215223 raise RuntimeError ('simulated first provider failure' )
216224
217225 class SecondSucceedsProvider (BinProvider ):
218226 name : str = 'second_ok'
227+ installed : bool = False
228+
229+ def default_abspath_handler (self , bin_name : str , ** context ):
230+ if not self .installed :
231+ return None
232+ return Path ('/usr/bin/true' )
219233
220- def load_or_install (self , bin_name : str , ** context ):
221- return BinProvider .load (EnvProvider (), 'python' , quiet = True , nocache = True )
234+ def default_version_handler (self , bin_name : str , abspath : Optional [Path ] = None , ** context ):
235+ if not self .installed :
236+ return None
237+ return SemVer ('2.3.4' )
238+
239+ def default_install_handler (self , bin_name : str , install_args : Optional [InstallArgs ] = None , ** context ):
240+ self .installed = True
241+ return 'installed'
222242
223243 binary = Binary (
224244 name = 'demo-multi-provider-ok' ,
@@ -237,13 +257,19 @@ def test_multi_provider_load_or_install_failure_error_is_not_truncated(self):
237257 class FirstFailsProvider (BinProvider ):
238258 name : str = 'first_fail'
239259
240- def load_or_install (self , bin_name : str , ** context ):
260+ def default_abspath_handler (self , bin_name : str , ** context ):
261+ return None
262+
263+ def default_install_handler (self , bin_name : str , install_args : Optional [InstallArgs ] = None , ** context ):
241264 raise RuntimeError ('simulated first provider failure' )
242265
243266 class ThirdFailsProvider (BinProvider ):
244267 name : str = 'third_fail'
245268
246- def load_or_install (self , bin_name : str , ** context ):
269+ def default_abspath_handler (self , bin_name : str , ** context ):
270+ return None
271+
272+ def default_install_handler (self , bin_name : str , install_args : Optional [InstallArgs ] = None , ** context ):
247273 raise RuntimeError ('simulated third provider failure with enough text to catch truncation' )
248274
249275 binary = Binary (
0 commit comments