summaryrefslogtreecommitdiffstats
path: root/miniq/tasks.py
diff options
context:
space:
mode:
authorAndrew Godwin2022-11-06 21:30:07 -0700
committerAndrew Godwin2022-11-06 21:30:07 -0700
commitfb6c409a9af5b8a686e977ee2251c359071e0ec3 (patch)
tree322469694585b766eb623b47955623b3e43c89b1 /miniq/tasks.py
parent0d5f7e7a891bec4b8af26c2d86d8be0209a3202d (diff)
downloadtakahe-fb6c409a9af5b8a686e977ee2251c359071e0ec3.tar.gz
takahe-fb6c409a9af5b8a686e977ee2251c359071e0ec3.tar.bz2
takahe-fb6c409a9af5b8a686e977ee2251c359071e0ec3.zip
Rework task system and fetching.
I can taste how close follow is to working.
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())