51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
from typing import Callable, Optional, TypeVar
|
|
|
|
from reactivex import Observable, abc
|
|
from reactivex.internal import ArgumentOutOfRangeException
|
|
|
|
_T = TypeVar("_T")
|
|
|
|
|
|
def skip_(count: int) -> Callable[[Observable[_T]], Observable[_T]]:
|
|
if count < 0:
|
|
raise ArgumentOutOfRangeException()
|
|
|
|
def skip(source: Observable[_T]) -> Observable[_T]:
|
|
"""The skip operator.
|
|
|
|
Bypasses a specified number of elements in an observable sequence
|
|
and then returns the remaining elements.
|
|
|
|
Args:
|
|
source: The source observable.
|
|
|
|
Returns:
|
|
An observable sequence that contains the elements that occur
|
|
after the specified index in the input sequence.
|
|
"""
|
|
|
|
def subscribe(
|
|
observer: abc.ObserverBase[_T],
|
|
scheduler: Optional[abc.SchedulerBase] = None,
|
|
):
|
|
remaining = count
|
|
|
|
def on_next(value: _T) -> None:
|
|
nonlocal remaining
|
|
|
|
if remaining <= 0:
|
|
observer.on_next(value)
|
|
else:
|
|
remaining -= 1
|
|
|
|
return source.subscribe(
|
|
on_next, observer.on_error, observer.on_completed, scheduler=scheduler
|
|
)
|
|
|
|
return Observable(subscribe)
|
|
|
|
return skip
|
|
|
|
|
|
__all__ = ["skip_"]
|