def workflow_instance( test_workflow: Workflow, ) -> Tuple[RunningTask, Subscriber, Subscriber, Dict[str, List[Subscriber]]]: td = timedelta(seconds=100) sub1 = Subscription("start_collect", True, td) sub2 = Subscription("collect", True, td) sub3 = Subscription("collect_done", True, td) s1 = Subscriber.from_list("s1", [sub1, sub2, sub3]) s2 = Subscriber.from_list("s2", [sub2, sub3]) subscriptions = { "start_collect": [s1], "collect": [s1, s2], "collect_done": [s1, s2] } w, _ = RunningTask.empty(test_workflow, lambda: subscriptions) w.received_messages = [ Action("start_collect", w.id, "start"), ActionDone("start_collect", w.id, "start", s1.id), ActionDone("start_collect", w.id, "start", s2.id), Event("godot", { "a": 1, "b": 2 }), Action("collect", w.id, "collect"), ActionDone("collect", w.id, "collect", s1.id), ] w.move_to_next_state() return w, s1, s2, subscriptions
def test_json_marshalling_subscribers() -> None: subscriptions = [ Subscription("a", True, timedelta(seconds=1)), Subscription("b", True, timedelta(minutes=1)), Subscription("c", True, timedelta(hours=1)), Subscription("d", False, timedelta(days=1)), Subscription("e", False, timedelta(weeks=1)), ] roundtrip(Subscriber.from_list("foo", [])) roundtrip(Subscriber.from_list("foo", subscriptions))
async def update_subscriptions(self, subscriber_id: str, subscriptions: List[Subscription]) -> Subscriber: existing = self._subscribers_by_id.get(subscriber_id, None) updated = Subscriber.from_list(subscriber_id, subscriptions) if existing != updated: log.info(f"Subscriber {subscriber_id}: update all subscriptions={subscriptions}") await self.db.update(updated) await self.__load_from_db() return updated
def subscribers() -> List[Subscriber]: subs = [Subscription("foo", True) for _ in range(0, 10)] return [ Subscriber.from_list(SubscriberId(str(a)), subs) for a in range(0, 10) ]