@@ -34,17 +34,23 @@ class QueuerJobMixin(QueuerGlobalMixin):
3434 def __init__ (self ):
3535 super ().__init__ ()
3636
37- def add_job (self , task : Union [Callable [..., Any ], str ], * parameters : Any ) -> Job :
37+ def add_job (
38+ self ,
39+ task : Union [Callable [..., Any ], str ],
40+ * parameters : Any ,
41+ ** parameters_keyed : Any ,
42+ ) -> Job :
3843 """
3944 Add a job to the queue with the given task and parameters.
4045
4146 :param task: Either a function or a string with the task name
42- :param parameters: Parameters to pass to the task
47+ :param parameters: Positional parameters to pass to the task
48+ :param parameters_keyed: Keyword parameters to pass to the task
4349 :returns: The created job
4450 :raises Exception: If something goes wrong
4551 """
4652 options : Optional [Options ] = self ._merge_options (None )
47- job : Job = self ._add_job (task , options , * parameters )
53+ job : Job = self ._add_job (task , options , * parameters , ** parameters_keyed )
4854
4955 logger .info (f"Job added: { job .rid } " )
5056
@@ -55,14 +61,17 @@ def add_job_with_options(
5561 options : Optional [Options ],
5662 task : Union [Callable [..., Any ], str ],
5763 * parameters : Any ,
64+ ** parameters_keyed : Any ,
5865 ) -> Job :
5966 """Add a new job with specific options."""
6067 # Merge default options with provided options
6168 options_merged : Optional [Options ] = self ._merge_options (options )
6269
6370 try :
6471 # Create new job
65- new_job : Job = create_job (task , options_merged , * parameters )
72+ new_job : Job = create_job (
73+ task , options_merged , * parameters , ** parameters_keyed
74+ )
6675 job : Job = self .db_job .insert_job (new_job )
6776
6877 logger .info (f"Job with options added: { job .rid } " )
@@ -82,7 +91,9 @@ def add_jobs(self, batch_jobs: List[BatchJob]) -> None:
8291 for batch_job in batch_jobs :
8392 options : Optional [Options ] = self ._merge_options (batch_job .options )
8493 task_name : str = get_task_name_from_interface (batch_job .task )
85- job : Job = create_job (task_name , options , * batch_job .parameters )
94+ job : Job = create_job (
95+ task_name , options , * batch_job .parameters , ** batch_job .parameters_keyed
96+ )
8697 jobs .append (job )
8798
8899 self .db_job .batch_insert_jobs (jobs )
@@ -232,7 +243,9 @@ def readd_job_from_archive(self, job_rid: UUID) -> Job:
232243 raise Exception (f"Job not found in archive: { job_rid } " )
233244
234245 # Readd the job to the queue
235- new_job = self .add_job_with_options (job .options , job .task_name , * job .parameters )
246+ new_job = self .add_job_with_options (
247+ job .options , job .task_name , * job .parameters , ** job .parameters_keyed
248+ )
236249 logger .info (f"Job readded: { new_job .rid } " )
237250 return new_job
238251
@@ -317,18 +330,20 @@ def _add_job(
317330 task : Union [Callable [..., Any ], str ],
318331 options : Optional ["Options" ],
319332 * parameters : Any ,
333+ ** parameters_keyed : Any ,
320334 ) -> Job :
321335 """
322336 Add a job to the queue with all necessary parameters.
323337
324338 :param task: Either a function or a string with the task name
325339 :param options: Job-specific options (can be None)
326- :param parameters: Parameters to pass to the task
340+ :param parameters: Positional parameters to pass to the task
341+ :param parameters_keyed: Keyword parameters to pass to the task
327342 :returns: The created job
328343 :raises Exception: If something goes wrong
329344 """
330345 try :
331- new_job = create_job (task , options , * parameters )
346+ new_job = create_job (task , options , * parameters , ** parameters_keyed )
332347 job = self .db_job .insert_job (new_job )
333348
334349 return job
@@ -405,7 +420,8 @@ async def _wait_for_job(
405420
406421 try :
407422 parameters = getattr (job , "parameters" , [])
408- runner = Runner (task , * parameters )
423+ parameters_keyed = getattr (job , "parameters_keyed" , {})
424+ runner = Runner (task , * parameters , ** parameters_keyed )
409425
410426 logger .info (f"Created runner for job { job .rid } " )
411427
0 commit comments