def test_groupdisposable_remove(): disp1 = [False] disp2 = [False] def action1(): disp1[0] = True d1 = Disposable(action1) def action2(): disp2[0] = True d2 = Disposable(action2) g = CompositeDisposable(d1, d2) assert g.length == 2 assert g.contains(d1) assert g.contains(d2) assert g.remove(d1) assert g.length == 1 assert not g.contains(d1) assert g.contains(d2) assert disp1[0] assert g.remove(d2) assert not g.contains(d1) assert not g.contains(d2) assert disp2[0] disp3 = [False] def action3(): disp3[0] = True d3 = Disposable(action3) assert not g.remove(d3) assert not disp3[0]
class RecursiveScheduledFunction(object): def __init__(self, action, scheduler, method = None): self.action = action self.group = CompositeDisposable() self.lock = RLock() if method == None: self.schedule = scheduler.scheduleWithState else: self.schedule = getattr(scheduler, method) def run(self, state): self.action(state, self.actionCallback) def actionCallback(self, newState, dueTime = None): self.isDone = False self.isAdded = False if dueTime == None: self.cancel = self.schedule( newState, self.schedulerCallback ) else: self.cancel = self.schedule( newState, dueTime, self.schedulerCallback ) with self.lock: if not self.isDone: self.group.add(self.cancel) self.isAdded = True def schedulerCallback(self, scheduler, state): with self.lock: if self.isAdded: self.group.remove(self.cancel) else: self.isDone = True self.run(state) return Disposable.empty()
class RecursiveScheduledFunction(object): def __init__(self, action, scheduler, method=None): self.action = action self.group = CompositeDisposable() self.lock = RLock() if method == None: self.schedule = scheduler.scheduleWithState else: self.schedule = getattr(scheduler, method) def run(self, state): self.action(state, self.actionCallback) def actionCallback(self, newState, dueTime=None): self.isDone = False self.isAdded = False if dueTime == None: self.cancel = self.schedule(newState, self.schedulerCallback) else: self.cancel = self.schedule(newState, dueTime, self.schedulerCallback) with self.lock: if not self.isDone: self.group.add(self.cancel) self.isAdded = True def schedulerCallback(self, scheduler, state): with self.lock: if self.isAdded: self.group.remove(self.cancel) else: self.isDone = True self.run(state) return Disposable.empty()
def test_groupdisposable_remove(): disp1 = [False] disp2 = [False] def action1(): disp1[0] = True d1 = Disposable(action1) def action2(): disp2[0] = True d2 = Disposable(action2) g = CompositeDisposable(d1, d2) assert g.length == 2 assert g.contains(d1) assert g.contains(d2) assert g.remove(d1) assert g.length == 1 assert not g.contains(d1) assert g.contains(d2) assert disp1[0] assert g.remove(d2) assert not g.contains(d1) assert not g.contains(d2) assert disp2[0] disp3 = [False] def action3(): disp3[0] = True d3 = Disposable(action3) assert not g.remove(d3) assert not disp3[0]