Skip to content

Commit 29e5c6d

Browse files
committed
ABC class for JobMiddleware
1 parent b960eed commit 29e5c6d

3 files changed

Lines changed: 28 additions & 5 deletions

File tree

plain-jobs/plain/jobs/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from .jobs import Job
2+
from .middleware import JobMiddleware
23
from .registry import register_job
34

4-
__all__ = ["Job", "register_job"]
5+
__all__ = ["Job", "JobMiddleware", "register_job"]

plain-jobs/plain/jobs/middleware.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
from abc import ABC, abstractmethod
34
from collections.abc import Callable
45
from typing import TYPE_CHECKING
56

@@ -9,11 +10,32 @@
910
from .models import JobProcess, JobResult
1011

1112

12-
class AppLoggerMiddleware:
13-
def __init__(self, run_job: Callable[[JobProcess], JobResult]) -> None:
13+
class JobMiddleware(ABC):
14+
"""
15+
Abstract base class for job middleware.
16+
17+
Subclasses must implement process_job() to handle the job execution cycle.
18+
19+
Example:
20+
class MyJobMiddleware(JobMiddleware):
21+
def process_job(self, job: JobProcess) -> JobResult:
22+
# Pre-processing
23+
result = self.run_job(job)
24+
# Post-processing
25+
return result
26+
"""
27+
28+
def __init__(self, run_job: Callable[[JobProcess], JobResult]):
1429
self.run_job = run_job
1530

16-
def __call__(self, job: JobProcess) -> JobResult:
31+
@abstractmethod
32+
def process_job(self, job: JobProcess) -> JobResult:
33+
"""Process the job and return a result. Must be implemented by subclasses."""
34+
...
35+
36+
37+
class AppLoggerMiddleware(JobMiddleware):
38+
def process_job(self, job: JobProcess) -> JobResult:
1739
with app_logger.include_context(
1840
job_request_uuid=str(job.job_request_uuid), job_process_uuid=str(job.uuid)
1941
):

plain-jobs/plain/jobs/workers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ def middleware_chain(job: JobProcess) -> JobResult:
327327
for middleware_path in reversed(settings.JOBS_MIDDLEWARE):
328328
middleware_class = import_string(middleware_path)
329329
middleware_instance = middleware_class(middleware_chain)
330-
middleware_chain = middleware_instance
330+
middleware_chain = middleware_instance.process_job
331331

332332
job_result = middleware_chain(job_process)
333333

0 commit comments

Comments
 (0)