Ejemplo n.º 1
0
    async def __asubscribe__(self, observer: AsyncObserver) -> AsyncDisposable:
        log.debug("Merge:__asubscribe__()")
        sink = Merge.Sink(self, self.max_concurrent)
        down = await chain(sink, observer)
        up = await chain(self._source, sink)

        return AsyncCompositeDisposable(up, down)
Ejemplo n.º 2
0
    async def __asubscribe__(self,
                             observer: AsyncObserver[T2]) -> AsyncDisposable:
        sink = Map.Sink(self)  # type: AsyncSingleStream[T2]
        down = await chain(sink, observer)
        up = await chain(self._source, sink)  # type: AsyncDisposable

        return AsyncCompositeDisposable(up, down)
Ejemplo n.º 3
0
    async def __asubscribe__(self, observer: AsyncObserver) -> AsyncDisposable:
        tasks = []  # type: List[asyncio.Task]

        sink = Delay.Sink(self, tasks)
        down = await chain(sink, observer)
        up = await chain(self._source, sink)

        async def cancel():
            for task in tasks:
                task.cancel()

        return AsyncCompositeDisposable(up, down, AsyncDisposable(cancel))
Ejemplo n.º 4
0
    async def worker(self, observer: AsyncObserver) -> None:
        def recurse(fut) -> None:
            self._task = asyncio.ensure_future(self.worker(observer))

        try:
            source = next(self._operators)
        except StopIteration:
            await observer.aclose()
        except Exception as ex:
            await observer.athrow(ex)
        else:
            sink = Concat.Stream()
            down = await chain(sink, observer)  # type: AsyncDisposable
            sink.add_done_callback(recurse)
            up = await chain(source, sink)
            self._subscription = AsyncCompositeDisposable(up, down)
Ejemplo n.º 5
0
    async def __asubscribe__(self,
                             observer: AsyncObserver[T]) -> AsyncDisposable:
        """Start streaming."""

        tasks = []  # type: List[asyncio.Task]

        sink = Debounce.Stream(self, tasks)
        down = await chain(sink, observer)
        up = await chain(self._source, sink)

        def cancel(sub: asyncio.Future):
            for task in tasks:
                task.cancel()

        sink.add_done_callback(cancel)
        return AsyncCompositeDisposable(up, down)
Ejemplo n.º 6
0
    async def worker(self, observer: AsyncObserver) -> None:
        def recurse(fut) -> None:
            if self._stop:
                log.debug("CatchException._:stop")
                print("STOP")
                asyncio.ensure_future(observer.aclose())
            else:
                log.debug("CatchException._:continue to next iterable")
                print("NO STOP")
                self._task = asyncio.ensure_future(self.worker(observer))

        try:
            source = next(self._iterable)
        except StopIteration:
            await observer.aclose()
        except Exception as ex:
            await observer.athrow(ex)
        else:
            self._stop = True
            sink = CatchException.Stream(self)
            down = await chain(sink, observer)  # type: AsyncDisposable
            up = await chain(source, sink)
            sink.add_done_callback(recurse)
            self._subscription = AsyncCompositeDisposable(up, down)
Ejemplo n.º 7
0
    async def __asubscribe__(self, observer: AsyncObserver) -> AsyncDisposable:
        sink = SkipLast.Sink(self)
        down = await chain(sink, observer)
        up = await chain(self._source, sink)

        return AsyncCompositeDisposable(up, down)
Ejemplo n.º 8
0
 async def __asubscribe__(self, obv: AsyncObserver) -> AsyncDisposable:
     sink = DistinctUntilChanged.Sink()
     down = await chain(sink, obv)
     up = await chain(self.source, sink)
     return AsyncCompositeDisposable(up, down)