From da780894d086df04a4705152471c611fbf63fee7 Mon Sep 17 00:00:00 2001 From: Maximilian Giller Date: Tue, 30 Jan 2024 20:25:48 +0100 Subject: [PATCH] Allowing non-awaitable actions --- src/handler/action_queue.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/handler/action_queue.py b/src/handler/action_queue.py index 702cc01..7fe6122 100644 --- a/src/handler/action_queue.py +++ b/src/handler/action_queue.py @@ -4,7 +4,7 @@ import logging class ActionQueue: def __init__(self) -> None: self.queued_actions: asyncio.Queue = asyncio.Queue() - self.idle_action: tuple = (None,[],{}) + self.idle_action: tuple = None self.queue_task = asyncio.create_task(self.run_queue()) self.idle_action_task = None @@ -17,7 +17,7 @@ class ActionQueue: async def run_queue(self): while True: try: - if self.queued_actions.empty() and self.idle_action is not None and self.idle_action[0] is not None: + if self.queued_actions.empty() and self.idle_action is not None: self.idle_action_task = asyncio.create_task(self.idle_action[0](*(self.idle_action[1]), **(self.idle_action[2]))) action = await self.queued_actions.get() @@ -26,9 +26,11 @@ class ActionQueue: self.idle_action_task.cancel() self.idle_action_task = None - if action is not None and action[0] is not None: # If none -> Is idle update + if action is not None: # If none -> Is idle update try: - await action[0](*(action[1]), **(action[2])) + awaitable = action[0](*(action[1]), **(action[2])) + if awaitable is not None: + await awaitable except Exception as ex: logging.exception("Something went wrong during execution of action.", ex) @@ -39,6 +41,10 @@ class ActionQueue: await self.queued_actions.put((action, args, kwargs)) async def set_idle_action(self, action, *args, **kwargs): - self.idle_action = (action, args, kwargs) + if action is None: + self.idle_action = None + else: + self.idle_action = (action, args, kwargs) + await self.queued_actions.put(None)