Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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))
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 async def add_subscription(
     self, subscriber_id: str, event_type: str, wait_for_completion: bool, timeout: timedelta
 ) -> Subscriber:
     existing = self._subscribers_by_id.get(subscriber_id, Subscriber(subscriber_id, {}))
     updated = existing.add_subscription(event_type, wait_for_completion, timeout)
     if existing != updated:
         log.info(f"Subscriber {subscriber_id}: add subscription={event_type} ({wait_for_completion}, {timeout})")
         await self.db.update(updated)
         await self.__load_from_db()
     return updated
Ejemplo n.º 5
0
 async def remove_subscription(self, subscriber_id: str, event_type: str) -> Subscriber:
     existing = self._subscribers_by_id.get(subscriber_id, Subscriber(subscriber_id, {}))
     updated = existing.remove_subscription(event_type)
     if existing != updated:
         log.info(f"Subscriber {subscriber_id}: remove subscription={event_type}")
         if updated.subscriptions:
             await self.db.update(updated)
         else:
             await self.db.delete(subscriber_id)
         await self.__load_from_db()
     return updated
Ejemplo n.º 6
0
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)
    ]