File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -77,14 +77,10 @@ def set_provider(
7777 with self ._lock :
7878 self ._reject_domain_scoped_rebind (provider , domain )
7979 old_provider = self ._providers .get (domain )
80- was_bound_elsewhere = provider is self ._default_provider or any (
80+ already_bound = provider is self ._default_provider or any (
8181 p is provider for d , p in self ._providers .items () if d != domain
8282 )
83- was_bound_here = (
84- domain in self ._providers and self ._providers [domain ] is provider
85- )
8683 self ._providers [domain ] = provider
87- already_bound = was_bound_elsewhere or was_bound_here
8884 if not already_bound :
8985 needs_init = True
9086 self ._provider_status [provider ] = ProviderStatus .NOT_READY
Original file line number Diff line number Diff line change @@ -594,6 +594,47 @@ def domain_scoped(self) -> bool:
594594 )
595595
596596
597+ def test_reregistering_same_provider_on_same_domain_reinitializes ():
598+ registry = ProviderRegistry ()
599+ provider = Mock ()
600+ init_count = 0
601+
602+ def counting_initialize (evaluation_context , domain = None ):
603+ nonlocal init_count
604+ init_count += 1
605+
606+ provider .initialize .side_effect = counting_initialize
607+
608+ registry .set_provider ("domain" , provider , wait_for_init = True )
609+ registry .set_provider ("domain" , provider , wait_for_init = True )
610+
611+ assert init_count == 2
612+
613+
614+ def test_reregistering_same_provider_after_failed_init_retries ():
615+ registry = ProviderRegistry ()
616+ provider = Mock ()
617+ attempts = 0
618+
619+ def flaky_initialize (evaluation_context , domain = None ):
620+ nonlocal attempts
621+ attempts += 1
622+ if attempts == 1 :
623+ raise ProviderFatalError ()
624+
625+ provider .initialize .side_effect = flaky_initialize
626+
627+ with pytest .raises (ProviderFatalError ):
628+ registry .set_provider ("domain" , provider , wait_for_init = True )
629+
630+ assert registry .get_provider_status (provider ) == ProviderStatus .FATAL
631+
632+ registry .set_provider ("domain" , provider , wait_for_init = True )
633+
634+ assert attempts == 2
635+ assert registry .get_provider_status (provider ) == ProviderStatus .READY
636+
637+
597638def test_callable_accepts_domain_returns_false_for_uninspectable_callable ():
598639 assert _callable_accepts_domain (object ()) is False # type: ignore[arg-type]
599640
You can’t perform that action at this time.
0 commit comments