60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
from typing import Callable, Optional, TypeVar
|
|
|
|
from reactivex import Observable, abc
|
|
from reactivex import operators as ops
|
|
from reactivex.typing import Predicate
|
|
|
|
_T = TypeVar("_T")
|
|
|
|
|
|
def some_(
|
|
predicate: Optional[Predicate[_T]] = None,
|
|
) -> Callable[[Observable[_T]], Observable[bool]]:
|
|
def some(source: Observable[_T]) -> Observable[bool]:
|
|
"""Partially applied operator.
|
|
|
|
Determines whether some element of an observable sequence satisfies a
|
|
condition if present, else if some items are in the sequence.
|
|
|
|
Example:
|
|
>>> obs = some(source)
|
|
|
|
Args:
|
|
predicate -- A function to test each element for a condition.
|
|
|
|
Returns:
|
|
An observable sequence containing a single element
|
|
determining whether some elements in the source sequence
|
|
pass the test in the specified predicate if given, else if
|
|
some items are in the sequence.
|
|
"""
|
|
|
|
def subscribe(
|
|
observer: abc.ObserverBase[bool],
|
|
scheduler: Optional[abc.SchedulerBase] = None,
|
|
):
|
|
def on_next(_: _T):
|
|
observer.on_next(True)
|
|
observer.on_completed()
|
|
|
|
def on_error():
|
|
observer.on_next(False)
|
|
observer.on_completed()
|
|
|
|
return source.subscribe(
|
|
on_next, observer.on_error, on_error, scheduler=scheduler
|
|
)
|
|
|
|
if predicate:
|
|
return source.pipe(
|
|
ops.filter(predicate),
|
|
some_(),
|
|
)
|
|
|
|
return Observable(subscribe)
|
|
|
|
return some
|
|
|
|
|
|
__all__ = ["some_"]
|