summaryrefslogtreecommitdiffstats
path: root/miniq/tasks.py
diff options
context:
space:
mode:
Diffstat (limited to 'miniq/tasks.py')
-rw-r--r--miniq/tasks.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/miniq/tasks.py b/miniq/tasks.py
new file mode 100644
index 0000000..fedf8fd
--- /dev/null
+++ b/miniq/tasks.py
@@ -0,0 +1,34 @@
+import traceback
+
+from users.tasks.follow import handle_follow_request
+from users.tasks.identity import handle_identity_fetch
+from users.tasks.inbox import handle_inbox_item
+
+
+class TaskHandler:
+
+ handlers = {
+ "identity_fetch": handle_identity_fetch,
+ "inbox_item": handle_inbox_item,
+ "follow_request": handle_follow_request,
+ }
+
+ def __init__(self, task):
+ self.task = task
+ self.subject = self.task.subject
+ self.payload = self.task.payload
+
+ async def handle(self):
+ try:
+ print(f"Task {self.task}: Starting")
+ if self.task.type not in self.handlers:
+ raise ValueError(f"Cannot handle type {self.task.type}")
+ await self.handlers[self.task.type](
+ self,
+ )
+ await self.task.complete()
+ print(f"Task {self.task}: Complete")
+ except BaseException as e:
+ print(f"Task {self.task}: Error {e}")
+ traceback.print_exc()
+ await self.task.fail(f"{e}\n\n" + traceback.format_exc())