67 lines
2.2 KiB
Python
67 lines
2.2 KiB
Python
from typing import Any, Callable, Optional, TypeVar
|
|
|
|
from reactivex import Observable, abc, typing
|
|
from reactivex.disposable import CompositeDisposable
|
|
from reactivex.scheduler import TimeoutScheduler
|
|
|
|
_T = TypeVar("_T")
|
|
|
|
|
|
def skip_with_time_(
|
|
duration: typing.RelativeTime, scheduler: Optional[abc.SchedulerBase] = None
|
|
) -> Callable[[Observable[_T]], Observable[_T]]:
|
|
def skip_with_time(source: Observable[_T]) -> Observable[_T]:
|
|
"""Skips elements for the specified duration from the start of
|
|
the observable source sequence.
|
|
|
|
Args:
|
|
>>> res = skip_with_time(5.0)
|
|
|
|
Specifying a zero value for duration doesn't guarantee no
|
|
elements will be dropped from the start of the source sequence.
|
|
This is a side-effect of the asynchrony introduced by the
|
|
scheduler, where the action that causes callbacks from the
|
|
source sequence to be forwarded may not execute immediately,
|
|
despite the zero due time.
|
|
|
|
Errors produced by the source sequence are always forwarded to
|
|
the result sequence, even if the error occurs before the
|
|
duration.
|
|
|
|
Args:
|
|
duration: Duration for skipping elements from the start of
|
|
the sequence.
|
|
|
|
Returns:
|
|
An observable sequence with the elements skipped during the
|
|
specified duration from the start of the source sequence.
|
|
"""
|
|
|
|
def subscribe(
|
|
observer: abc.ObserverBase[_T],
|
|
scheduler_: Optional[abc.SchedulerBase] = None,
|
|
):
|
|
_scheduler = scheduler or scheduler_ or TimeoutScheduler.singleton()
|
|
open = [False]
|
|
|
|
def action(scheduler: abc.SchedulerBase, state: Any) -> None:
|
|
open[0] = True
|
|
|
|
t = _scheduler.schedule_relative(duration, action)
|
|
|
|
def on_next(x: _T):
|
|
if open[0]:
|
|
observer.on_next(x)
|
|
|
|
d = source.subscribe(
|
|
on_next, observer.on_error, observer.on_completed, scheduler=scheduler_
|
|
)
|
|
return CompositeDisposable(t, d)
|
|
|
|
return Observable(subscribe)
|
|
|
|
return skip_with_time
|
|
|
|
|
|
__all__ = ["skip_with_time_"]
|