26 lines
905 B
Python
26 lines
905 B
Python
"""Job execution engine."""
|
|
import asyncio
|
|
from typing import Callable
|
|
|
|
class ExecutionEngine:
|
|
"""Executes jobs with configurable handlers."""
|
|
def __init__(self, queue):
|
|
self.queue = queue
|
|
self.handlers = {}
|
|
# Currently: no timeout, no retry logic
|
|
|
|
def register_handler(self, name: str, handler: Callable) -> None:
|
|
"""Register a job handler function."""
|
|
self.handlers[name] = handler
|
|
|
|
async def run_job(self, job) -> dict:
|
|
"""Execute a single job (no timeout/retry currently)."""
|
|
handler = self.handlers.get(job.handler)
|
|
if not handler:
|
|
return {"status": "failed", "reason": "handler_not_found"}
|
|
try:
|
|
result = await handler(job.payload)
|
|
return {"status": "success", "result": result}
|
|
except Exception as e:
|
|
return {"status": "failed", "reason": str(e)}
|