19
19
)
20
20
from scheduler .redis_models import JobStatus , SchedulerLock , Result , ResultType , JobModel
21
21
from scheduler .settings import logger , SCHEDULER_CONFIG
22
- from scheduler .types import ConnectionType , FunctionReferenceType , Self
22
+ from scheduler .types import ConnectionType , FunctionReferenceType , Self , PipelineType
23
23
24
24
25
25
class InvalidJobOperation (Exception ):
@@ -49,17 +49,17 @@ def perform_job(job_model: JobModel, connection: ConnectionType) -> Any: # noqa
49
49
coro_result = loop .run_until_complete (result )
50
50
result = coro_result
51
51
if job_model .success_callback :
52
- job_model .success_callback (job_model , connection , result ) # type: ignore
52
+ job_model .success_callback (job_model , connection , result )
53
53
return result
54
54
except :
55
55
if job_model .failure_callback :
56
- job_model .failure_callback (job_model , connection , * sys .exc_info ()) # type: ignore
56
+ job_model .failure_callback (job_model , connection , * sys .exc_info ())
57
57
raise
58
58
finally :
59
59
assert job_model is _job_stack .pop ()
60
60
61
61
62
- _job_stack = []
62
+ _job_stack : List [ JobModel ] = []
63
63
64
64
65
65
class Queue :
@@ -89,11 +89,11 @@ def __init__(self, connection: ConnectionType, name: str, is_async: bool = True)
89
89
self .scheduled_job_registry = ScheduledJobRegistry (connection = self .connection , name = self .name )
90
90
self .canceled_job_registry = CanceledJobRegistry (connection = self .connection , name = self .name )
91
91
92
- def __len__ (self ):
92
+ def __len__ (self ) -> int :
93
93
return self .count
94
94
95
95
@property
96
- def scheduler_pid (self ) -> int :
96
+ def scheduler_pid (self ) -> Optional [ int ] :
97
97
lock = SchedulerLock (self .name )
98
98
pid = lock .value (self .connection )
99
99
return int (pid .decode ()) if pid is not None else None
@@ -162,7 +162,7 @@ def count(self) -> int:
162
162
def get_registry (self , name : str ) -> JobNamesRegistry :
163
163
name = name .lower ()
164
164
if name in Queue .REGISTRIES :
165
- return getattr (self , Queue .REGISTRIES [name ])
165
+ return getattr (self , Queue .REGISTRIES [name ]) # type: ignore
166
166
raise NoSuchRegistryError (f"Unknown registry name { name } " )
167
167
168
168
def get_all_job_names (self ) -> List [str ]:
@@ -182,22 +182,21 @@ def get_all_jobs(self) -> List[JobModel]:
182
182
def create_and_enqueue_job (
183
183
self ,
184
184
func : FunctionReferenceType ,
185
- args : Union [Tuple , List , None ] = None ,
186
- kwargs : Optional [Dict ] = None ,
185
+ args : Union [Tuple [ Any , ...], List [ Any ] , None ] = None ,
186
+ kwargs : Optional [Dict [ str , Any ] ] = None ,
187
187
when : Optional [datetime ] = None ,
188
188
timeout : Optional [int ] = None ,
189
189
result_ttl : Optional [int ] = None ,
190
190
job_info_ttl : Optional [int ] = None ,
191
191
description : Optional [str ] = None ,
192
192
name : Optional [str ] = None ,
193
193
at_front : bool = False ,
194
- meta : Optional [Dict ] = None ,
194
+ meta : Optional [Dict [ str , Any ] ] = None ,
195
195
on_success : Optional [Callback ] = None ,
196
196
on_failure : Optional [Callback ] = None ,
197
197
on_stopped : Optional [Callback ] = None ,
198
198
task_type : Optional [str ] = None ,
199
199
scheduled_task_id : Optional [int ] = None ,
200
- pipeline : Optional [ConnectionType ] = None ,
201
200
) -> JobModel :
202
201
"""Creates a job to represent the delayed function call and enqueues it.
203
202
:param when: When to schedule the job (None to enqueue immediately)
@@ -216,7 +215,6 @@ def create_and_enqueue_job(
216
215
:param on_stopped: Callback for on stopped
217
216
:param task_type: The task type
218
217
:param scheduled_task_id: The scheduled task id
219
- :param pipeline: The Broker Pipeline
220
218
:returns: The enqueued Job
221
219
"""
222
220
status = JobStatus .QUEUED if when is None else JobStatus .SCHEDULED
@@ -240,7 +238,7 @@ def create_and_enqueue_job(
240
238
scheduled_task_id = scheduled_task_id ,
241
239
)
242
240
if when is None :
243
- job_model = self .enqueue_job (job_model , connection = pipeline , at_front = at_front )
241
+ job_model = self .enqueue_job (job_model , at_front = at_front )
244
242
elif isinstance (when , datetime ):
245
243
job_model .save (connection = self .connection )
246
244
self .scheduled_job_registry .schedule (self .connection , job_model .name , when )
@@ -250,7 +248,7 @@ def create_and_enqueue_job(
250
248
251
249
def job_handle_success (
252
250
self , job : JobModel , result : Any , job_info_ttl : int , result_ttl : int , connection : ConnectionType
253
- ):
251
+ ) -> None :
254
252
"""Saves and cleanup job after successful execution"""
255
253
job .after_execution (
256
254
job_info_ttl ,
@@ -268,7 +266,7 @@ def job_handle_success(
268
266
ttl = result_ttl ,
269
267
)
270
268
271
- def job_handle_failure (self , status : JobStatus , job : JobModel , exc_string : str , connection : ConnectionType ):
269
+ def job_handle_failure (self , status : JobStatus , job : JobModel , exc_string : str , connection : ConnectionType ) -> None :
272
270
# Does not set job status since the job might be stopped
273
271
job .after_execution (
274
272
SCHEDULER_CONFIG .DEFAULT_FAILURE_TTL ,
@@ -308,10 +306,7 @@ def run_sync(self, job: JobModel) -> JobModel:
308
306
309
307
@classmethod
310
308
def dequeue_any (
311
- cls ,
312
- queues : List [Self ],
313
- timeout : Optional [int ],
314
- connection : Optional [ConnectionType ] = None ,
309
+ cls , queues : List [Self ], timeout : Optional [int ], connection : ConnectionType
315
310
) -> Tuple [Optional [JobModel ], Optional [Self ]]:
316
311
"""Class method returning a Job instance at the front of the given set of Queues, where the order of the queues
317
312
is important.
@@ -414,19 +409,19 @@ def delete_job(self, job_name: str, expire_job_model: bool = True) -> None:
414
409
pass
415
410
416
411
def enqueue_job (
417
- self , job_model : JobModel , connection : Optional [ConnectionType ] = None , at_front : bool = False
412
+ self , job_model : JobModel , pipeline : Optional [PipelineType ] = None , at_front : bool = False
418
413
) -> JobModel :
419
414
"""Enqueues a job for delayed execution without checking dependencies.
420
415
421
416
If Queue is instantiated with is_async=False, job is executed immediately.
422
417
:param job_model: The job redis model
423
- :param connection : The Redis Pipeline
418
+ :param pipeline : The Broker Pipeline
424
419
:param at_front: Whether to enqueue the job at the front
425
420
426
421
:returns: The enqueued JobModel
427
422
"""
428
423
429
- pipe = connection if connection is not None else self .connection .pipeline ()
424
+ pipe : PipelineType = pipeline if pipeline is not None else self .connection .pipeline ()
430
425
job_model .started_at = None
431
426
job_model .ended_at = None
432
427
job_model .status = JobStatus .QUEUED
0 commit comments