Source code for ezmsg.nwb.reader
import asyncio
import math
import typing
import ezmsg.core as ez
from ezmsg.baseproc.units import BaseProducerUnit
from ezmsg.util.messages.axisarray import AxisArray
from .iterator import NWBAxisArrayIterator, NWBIteratorSettings
[docs]
class NWBIteratorUnit(BaseProducerUnit[NWBIteratorSettings, AxisArray, NWBAxisArrayIterator]):
SETTINGS = NWBIteratorSettings
OUTPUT_SIGNAL = ez.OutputStream(AxisArray)
OUTPUT_TERM = ez.OutputStream(typing.Any)
[docs]
@ez.publisher(OUTPUT_SIGNAL)
async def produce(self) -> typing.AsyncGenerator:
while True:
out = await self.producer.__acall__()
if out is not None:
if math.prod(out.data.shape) > 0:
yield self.OUTPUT_SIGNAL, out
await asyncio.sleep(0)
elif self.producer.exhausted:
break
ez.logger.debug(f"File ({self.SETTINGS.filepath}) exhausted.")
if self.SETTINGS.self_terminating:
raise ez.NormalTermination
yield self.OUTPUT_TERM, ez.Flag