def __scan_range(self, observer: Observer, scan_range: range) -> None: with self._context.lock: try: for unit in scan_range: if unit in self.__found_units: continue device: Optional[ModbusDevice] = self.__scan_unit(unit) if device is not None: self.__found_units.add(unit) # TODO # device.on_close().subscribe( # lambda _: self.__found_units.remove(device.unit) # ) observer.on_next(device) except SerialException: pass except Exception as e: observer.on_error(e)
def test_create_on_next_throw_close2(): ex = 'ex' next = [True] error = [False] completed = [False] def on_next(x): assert 42 == x next[0] = True def on_error(e): assert ex == e error[0] = True def on_completed(): completed[0] = True res = Observer(on_next, on_error, on_completed) res.on_next(42) assert next[0] assert not error[0] assert not completed[0] res.on_error(ex) assert not completed[0] assert error[0]
def test_create_on_next_close_has_error(): e_ = None ex = 'ex' next = [False] completed = [False] def on_next(x): assert 42 == x next[0] = True def on_completed(): completed[0] = True res = Observer(on_next, None, on_completed) res.on_next(42) assert next[0] assert not completed[0] try: res.on_error(ex) assert False except Exception as e: e_ = e.args[0] assert ex == e_ assert not completed[0]
def rx_loop(observer: Observer, scheduler: typing.Scheduler): print("Looping urls") loop = asyncio.get_event_loop() try: loop.run_until_complete(async_sender(urls, observer)) except Exception as e: observer.on_error(e) finally: loop.close() observer.on_completed()
def _subscribe_core(self, observer: Observer, scheduler: Scheduler = None) -> Disposable: with self.lock: self.check_disposed() if not self.is_stopped: self.observers.append(observer) return InnerSubscription(self, observer) if self.exception: observer.on_error(self.exception) return Disposable.empty() observer.on_completed() return Disposable.empty()
def test_create_on_next_has_error(): ex = 'ex' next = [False] _e = None def on_next(x): assert 42 == x next[0] = True res = Observer(on_next) res.on_next(42) assert next[0] try: res.on_error(ex) assert False except Exception as e: e_ = e.args[0] assert ex == e_
def test_create_on_next_on_error(): ex = 'ex' next = [True] error = [False] def on_next(x): assert 42 == x next[0] = True def on_error(e): assert ex == e error[0] = True res = Observer(on_next, on_error) res.on_next(42) assert next[0] assert not error[0] res.on_error(ex) assert error[0]