3636from frequenz .client .base .exception import ClientNotConnected
3737from frequenz .client .base .retry import LinearBackoff
3838from frequenz .client .base .streaming import GrpcStreamBroadcaster
39+ from frequenz .client .common .microgrid import MicrogridId
3940
4041from ._internal_types import DispatchCreateRequest
4142from .recurrence import RecurrenceRule
4243from .types import (
4344 Dispatch ,
4445 DispatchEvent ,
46+ DispatchId ,
4547 TargetComponents ,
4648 _target_components_to_protobuf ,
4749)
@@ -83,7 +85,8 @@ def __init__(
8385 )
8486 self ._metadata = (("key" , key ),)
8587 self ._streams : dict [
86- int , GrpcStreamBroadcaster [StreamMicrogridDispatchesResponse , DispatchEvent ]
88+ MicrogridId ,
89+ GrpcStreamBroadcaster [StreamMicrogridDispatchesResponse , DispatchEvent ],
8790 ] = {}
8891 """A dictionary of streamers, keyed by microgrid_id."""
8992
@@ -114,7 +117,7 @@ def stub(self) -> dispatch_pb2_grpc.MicrogridDispatchServiceAsyncStub:
114117 # pylint: disable=too-many-arguments, too-many-locals
115118 async def list (
116119 self ,
117- microgrid_id : int ,
120+ microgrid_id : MicrogridId ,
118121 * ,
119122 target_components : Iterator [TargetComponents ] = iter (()),
120123 start_from : datetime | None = None ,
@@ -138,7 +141,7 @@ async def list(
138141 key="key",
139142 server_url="grpc://dispatch.url.goes.here.example.com"
140143 )
141- async for page in client.list(microgrid_id=1 ):
144+ async for page in client.list(microgrid_id=MicrogridId(1) ):
142145 for dispatch in page:
143146 print(dispatch)
144147 ```
@@ -185,7 +188,7 @@ def to_interval(
185188 )
186189
187190 request = ListMicrogridDispatchesRequest (
188- microgrid_id = microgrid_id ,
191+ microgrid_id = int ( microgrid_id ) ,
189192 filter = filters ,
190193 pagination_params = (
191194 PaginationParams (page_size = page_size ) if page_size else None
@@ -211,24 +214,13 @@ def to_interval(
211214 else :
212215 break
213216
214- def stream (self , microgrid_id : int ) -> channels .Receiver [DispatchEvent ]:
217+ def stream (self , microgrid_id : MicrogridId ) -> channels .Receiver [DispatchEvent ]:
215218 """Receive a stream of dispatch events.
216219
217220 This function returns a receiver channel that can be used to receive
218221 dispatch events.
219222 An event is one of [CREATE, UPDATE, DELETE].
220223
221- Example usage:
222-
223- ```
224- client = DispatchApiClient(
225- key="key",
226- server_url="grpc://dispatch.url.goes.here.example.com"
227- )
228- async for message in client.stream(microgrid_id=1):
229- print(message.event, message.dispatch)
230- ```
231-
232224 Args:
233225 microgrid_id: The microgrid_id to receive dispatches for.
234226
@@ -238,15 +230,15 @@ def stream(self, microgrid_id: int) -> channels.Receiver[DispatchEvent]:
238230 return self ._get_stream (microgrid_id ).new_receiver ()
239231
240232 def _get_stream (
241- self , microgrid_id : int
233+ self , microgrid_id : MicrogridId
242234 ) -> GrpcStreamBroadcaster [StreamMicrogridDispatchesResponse , DispatchEvent ]:
243235 """Get an instance to the streaming helper."""
244236 broadcaster = self ._streams .get (microgrid_id )
245237 if broadcaster is not None and not broadcaster .is_running :
246238 del self ._streams [microgrid_id ]
247239 broadcaster = None
248240 if broadcaster is None :
249- request = StreamMicrogridDispatchesRequest (microgrid_id = microgrid_id )
241+ request = StreamMicrogridDispatchesRequest (microgrid_id = int ( microgrid_id ) )
250242 broadcaster = GrpcStreamBroadcaster (
251243 stream_name = "StreamMicrogridDispatches" ,
252244 stream_method = lambda : cast (
@@ -266,7 +258,7 @@ def _get_stream(
266258
267259 async def create ( # pylint: disable=too-many-positional-arguments
268260 self ,
269- microgrid_id : int ,
261+ microgrid_id : MicrogridId ,
270262 type : str , # pylint: disable=redefined-builtin
271263 start_time : datetime | Literal ["NOW" ],
272264 duration : timedelta | None ,
@@ -334,8 +326,8 @@ async def create( # pylint: disable=too-many-positional-arguments
334326 async def update (
335327 self ,
336328 * ,
337- microgrid_id : int ,
338- dispatch_id : int ,
329+ microgrid_id : MicrogridId ,
330+ dispatch_id : DispatchId ,
339331 new_fields : dict [str , Any ],
340332 ) -> Dispatch :
341333 """Update a dispatch.
@@ -359,7 +351,7 @@ async def update(
359351 ValueError: If updating `type` or `dry_run`.
360352 """
361353 msg = UpdateMicrogridDispatchRequest (
362- dispatch_id = dispatch_id , microgrid_id = microgrid_id
354+ dispatch_id = int ( dispatch_id ) , microgrid_id = int ( microgrid_id )
363355 )
364356
365357 for key , val in new_fields .items ():
@@ -423,7 +415,9 @@ async def update(
423415
424416 return Dispatch .from_protobuf (response .dispatch )
425417
426- async def get (self , * , microgrid_id : int , dispatch_id : int ) -> Dispatch :
418+ async def get (
419+ self , * , microgrid_id : MicrogridId , dispatch_id : DispatchId
420+ ) -> Dispatch :
427421 """Get a dispatch.
428422
429423 Args:
@@ -434,7 +428,7 @@ async def get(self, *, microgrid_id: int, dispatch_id: int) -> Dispatch:
434428 Dispatch: The dispatch.
435429 """
436430 request = GetMicrogridDispatchRequest (
437- dispatch_id = dispatch_id , microgrid_id = microgrid_id
431+ dispatch_id = int ( dispatch_id ) , microgrid_id = int ( microgrid_id )
438432 )
439433 response = await cast (
440434 Awaitable [GetMicrogridDispatchResponse ],
@@ -444,15 +438,17 @@ async def get(self, *, microgrid_id: int, dispatch_id: int) -> Dispatch:
444438 )
445439 return Dispatch .from_protobuf (response .dispatch )
446440
447- async def delete (self , * , microgrid_id : int , dispatch_id : int ) -> None :
441+ async def delete (
442+ self , * , microgrid_id : MicrogridId , dispatch_id : DispatchId
443+ ) -> None :
448444 """Delete a dispatch.
449445
450446 Args:
451447 microgrid_id: The microgrid_id to delete the dispatch for.
452448 dispatch_id: The dispatch_id to delete.
453449 """
454450 request = DeleteMicrogridDispatchRequest (
455- dispatch_id = dispatch_id , microgrid_id = microgrid_id
451+ dispatch_id = int ( dispatch_id ) , microgrid_id = int ( microgrid_id )
456452 )
457453 await cast (
458454 Awaitable [None ],
0 commit comments