99from dataclasses import dataclass , replace
1010from datetime import datetime , timezone
1111from typing import AsyncIterator
12+ from unittest .mock import AsyncMock , MagicMock
1213
1314import grpc
1415import grpc .aio
@@ -109,7 +110,7 @@ async def ListMicrogridDispatches(
109110 ),
110111 )
111112
112- async def StreamMicrogridDispatches (
113+ def StreamMicrogridDispatches (
113114 self ,
114115 request : StreamMicrogridDispatchesRequest ,
115116 timeout : int = 5 , # pylint: disable=unused-argument
@@ -122,20 +123,37 @@ async def StreamMicrogridDispatches(
122123
123124 Returns:
124125 An async generator for dispatch changes.
125-
126- Yields:
127- An event for each dispatch change.
128126 """
129- receiver = self ._stream_channel .new_receiver ()
130-
131- async for message in receiver :
132- _logger .debug ("Received message: %s" , message )
133- if message .microgrid_id == MicrogridId (request .microgrid_id ):
134- response = StreamMicrogridDispatchesResponse (
135- event = message .event .event .value ,
136- dispatch = message .event .dispatch .to_protobuf (),
137- )
138- yield response
127+
128+ async def stream () -> AsyncIterator [StreamMicrogridDispatchesResponse ]:
129+ """Stream microgrid dispatches changes."""
130+ _logger .debug ("Starting stream for microgrid %s" , request .microgrid_id )
131+ receiver = self ._stream_channel .new_receiver ()
132+
133+ async for message in receiver :
134+ _logger .debug ("Received message: %s" , message )
135+ if message .microgrid_id == MicrogridId (request .microgrid_id ):
136+ response = StreamMicrogridDispatchesResponse (
137+ event = message .event .event .value ,
138+ dispatch = message .event .dispatch .to_protobuf (),
139+ )
140+ yield response
141+ else :
142+ _logger .debug (
143+ "Skipping message for microgrid %s" ,
144+ message .microgrid_id ,
145+ )
146+
147+ _logger .debug ("Creating mock stream for microgrid %s" , request .microgrid_id )
148+
149+ mock_stream = MagicMock (name = "StreamMicrogridDispatches" )
150+ mock_stream .__aiter__ .side_effect = stream
151+ mock_stream .initial_metadata = AsyncMock (
152+ side_effect = lambda : _logger .debug (
153+ "Initial metadata requested for microgrid %s" , request .microgrid_id
154+ )
155+ )
156+ return mock_stream
139157
140158 # pylint: disable=too-many-branches
141159 @staticmethod
0 commit comments