2222_logger = logging .getLogger ('dipdup.datasource' )
2323
2424
25+ EmptyCallbackT = Callable [[], Awaitable [None ]]
2526HeadCallbackT = Callable [['IndexDatasource' , HeadBlockData ], Awaitable [None ]]
2627OperationsCallbackT = Callable [['IndexDatasource' , Tuple [OperationData , ...]], Awaitable [None ]]
2728BigMapsCallbackT = Callable [['IndexDatasource' , Tuple [BigMapData , ...]], Awaitable [None ]]
@@ -69,10 +70,12 @@ class GraphQLDatasource(Datasource):
6970class IndexDatasource (Datasource ):
7071 def __init__ (self , url : str , http_config : HTTPConfig , merge_subscriptions : bool = False ) -> None :
7172 super ().__init__ (url , http_config )
72- self ._on_head : Set [HeadCallbackT ] = set ()
73- self ._on_operations : Set [OperationsCallbackT ] = set ()
74- self ._on_big_maps : Set [BigMapsCallbackT ] = set ()
75- self ._on_rollback : Set [RollbackCallbackT ] = set ()
73+ self ._on_connected_callbacks : Set [EmptyCallbackT ] = set ()
74+ self ._on_disconnected_callbacks : Set [EmptyCallbackT ] = set ()
75+ self ._on_head_callbacks : Set [HeadCallbackT ] = set ()
76+ self ._on_operations_callbacks : Set [OperationsCallbackT ] = set ()
77+ self ._on_big_maps_callbacks : Set [BigMapsCallbackT ] = set ()
78+ self ._on_rollback_callbacks : Set [RollbackCallbackT ] = set ()
7679 self ._subscriptions : SubscriptionManager = SubscriptionManager (merge_subscriptions )
7780 self ._subscriptions .add (HeadSubscription ())
7881 self ._network : Optional [str ] = None
@@ -91,34 +94,48 @@ def network(self) -> str:
9194 async def subscribe (self ) -> None :
9295 ...
9396
94- def on_head (self , fn : HeadCallbackT ) -> None :
95- self ._on_head .add (fn )
97+ def call_on_head (self , fn : HeadCallbackT ) -> None :
98+ self ._on_head_callbacks .add (fn )
9699
97- def on_operations (self , fn : OperationsCallbackT ) -> None :
98- self ._on_operations .add (fn )
100+ def call_on_operations (self , fn : OperationsCallbackT ) -> None :
101+ self ._on_operations_callbacks .add (fn )
99102
100- def on_big_maps (self , fn : BigMapsCallbackT ) -> None :
101- self ._on_big_maps .add (fn )
103+ def call_on_big_maps (self , fn : BigMapsCallbackT ) -> None :
104+ self ._on_big_maps_callbacks .add (fn )
102105
103- def on_rollback (self , fn : RollbackCallbackT ) -> None :
104- self ._on_rollback .add (fn )
106+ def call_on_rollback (self , fn : RollbackCallbackT ) -> None :
107+ self ._on_rollback_callbacks .add (fn )
108+
109+ def call_on_connected (self , fn : EmptyCallbackT ) -> None :
110+ self ._on_connected_callbacks .add (fn )
111+
112+ def call_on_disconnected (self , fn : EmptyCallbackT ) -> None :
113+ self ._on_disconnected_callbacks .add (fn )
105114
106115 async def emit_head (self , head : HeadBlockData ) -> None :
107- for fn in self ._on_head :
116+ for fn in self ._on_head_callbacks :
108117 await fn (self , head )
109118
110119 async def emit_operations (self , operations : Tuple [OperationData , ...]) -> None :
111- for fn in self ._on_operations :
120+ for fn in self ._on_operations_callbacks :
112121 await fn (self , operations )
113122
114123 async def emit_big_maps (self , big_maps : Tuple [BigMapData , ...]) -> None :
115- for fn in self ._on_big_maps :
124+ for fn in self ._on_big_maps_callbacks :
116125 await fn (self , big_maps )
117126
118127 async def emit_rollback (self , type_ : MessageType , from_level : int , to_level : int ) -> None :
119- for fn in self ._on_rollback :
128+ for fn in self ._on_rollback_callbacks :
120129 await fn (self , type_ , from_level , to_level )
121130
131+ async def emit_connected (self ) -> None :
132+ for fn in self ._on_connected_callbacks :
133+ await fn ()
134+
135+ async def emit_disconnected (self ) -> None :
136+ for fn in self ._on_disconnected_callbacks :
137+ await fn ()
138+
122139 def set_network (self , network : str ) -> None :
123140 if self ._network :
124141 raise RuntimeError ('Network is already set' )
0 commit comments