3232class PoolingSynchronizer (Synchronizer ):
3333 __logger = logging .getLogger ('FeatureProbe-Synchronizer' )
3434
35- def __init__ (self , context : "Context" , data_repo : "DataRepository" ):
35+ def __init__ (
36+ self ,
37+ context : "Context" ,
38+ data_repo : "DataRepository" ,
39+ ready : "threading.Event" ):
3640 self ._refresh_interval = context .refresh_interval
3741 self ._api_url = context .synchronizer_url
3842 self ._data_repo = data_repo
@@ -47,13 +51,15 @@ def __init__(self, context: "Context", data_repo: "DataRepository"):
4751
4852 self ._scheduler = None
4953 self ._lock = threading .RLock ()
54+ self ._ready = ready
5055
5156 @classmethod
5257 def from_context (
5358 cls ,
5459 context : "Context" ,
55- data_repo : "DataRepository" ) -> "Synchronizer" :
56- return cls (context , data_repo )
60+ data_repo : "DataRepository" ,
61+ ready : "threading.Event" ) -> "Synchronizer" :
62+ return cls (context , data_repo , ready )
5763
5864 def sync (self ):
5965 PoolingSynchronizer .__logger .info (
@@ -77,6 +83,7 @@ def close(self):
7783 with self ._lock :
7884 self ._scheduler .shutdown ()
7985 del self ._scheduler
86+ self ._ready .clear ()
8087
8188 def _poll (self ):
8289 try :
@@ -88,7 +95,13 @@ def _poll(self):
8895 self .__logger .debug ('Http response body: %s' % body )
8996 repo = Repository .from_json (body )
9097 self ._data_repo .refresh (repo )
98+
99+ if not self ._ready .is_set ():
100+ self ._ready .set ()
91101 except Exception as e : # noqa
92102 self .__logger .error (
93103 'Unexpected error from polling processor' ,
94104 exc_info = e )
105+
106+ def initialized (self ):
107+ return self ._ready .is_set ()
0 commit comments