1313from frequenz .channels import Broadcast , Receiver , Sender , select
1414from frequenz .channels .timer import SkipMissedAndDrift , Timer
1515from frequenz .client .common .microgrid .components import ComponentCategory , ComponentId
16+ from frequenz .client .dispatch .types import DispatchId
1617from frequenz .client .dispatch .types import TargetComponents as ClientTargetComponents
18+ from frequenz .core .id import BaseId
1719from frequenz .sdk .actor import Actor , BackgroundService
1820
1921from ._dispatch import Dispatch
2729"""
2830
2931
32+ class DispatchActorId (BaseId , str_prefix = "DA" ):
33+ """ID for a dispatch actor."""
34+
35+ def __init__ (self , dispatch_id : DispatchId | int ) -> None :
36+ """Initialize the DispatchActorId.
37+
38+ Args:
39+ dispatch_id: The ID of the dispatch this actor is associated with.
40+ """
41+ super ().__init__ (int (dispatch_id ))
42+
43+
3044@dataclass (frozen = True , kw_only = True )
3145class DispatchInfo :
3246 """Event emitted when the dispatch changes."""
@@ -162,7 +176,7 @@ def __init__( # pylint: disable=too-many-arguments, too-many-positional-argumen
162176 [DispatchInfo , Receiver [DispatchInfo ]], Awaitable [Actor ]
163177 ],
164178 running_status_receiver : Receiver [Dispatch ],
165- dispatch_identity : Callable [[Dispatch ], int ] | None = None ,
179+ dispatch_identity : Callable [[Dispatch ], DispatchActorId ] | None = None ,
166180 retry_interval : timedelta = timedelta (seconds = 60 ),
167181 ) -> None :
168182 """Initialize the dispatch handler.
@@ -176,15 +190,15 @@ def __init__( # pylint: disable=too-many-arguments, too-many-positional-argumen
176190 retry_interval: How long to wait until trying to start failed actors again.
177191 """
178192 super ().__init__ ()
179- self ._dispatch_identity : Callable [[Dispatch ], int ] = (
180- dispatch_identity if dispatch_identity else lambda d : d .id
193+ self ._dispatch_identity : Callable [[Dispatch ], DispatchActorId ] = (
194+ dispatch_identity if dispatch_identity else lambda d : DispatchActorId ( d .id )
181195 )
182196
183197 self ._dispatch_rx = running_status_receiver
184198 self ._retry_timer_rx = Timer (retry_interval , SkipMissedAndDrift ())
185199 self ._actor_factory = actor_factory
186- self ._actors : dict [int , ActorDispatcher .ActorAndChannel ] = {}
187- self ._failed_dispatches : dict [int , Dispatch ] = {}
200+ self ._actors : dict [DispatchActorId , ActorDispatcher .ActorAndChannel ] = {}
201+ self ._failed_dispatches : dict [DispatchActorId , Dispatch ] = {}
188202 """Failed dispatches that will be retried later."""
189203
190204 def start (self ) -> None :
0 commit comments