|
@@ -137,6 +137,9 @@ def delay_task(task_name, *args, **kwargs):
|
|
|
def apply(task, args, kwargs, **options):
|
|
|
"""Apply the task locally.
|
|
|
|
|
|
+ :keyword throw: Re-raise task exceptions. Defaults to
|
|
|
+ the ``CELERY_EAGER_PROPAGATES_EXCEPTIONS`` setting.
|
|
|
+
|
|
|
This will block until the task completes, and returns a
|
|
|
:class:`celery.result.EagerResult` instance.
|
|
|
|
|
@@ -145,6 +148,7 @@ def apply(task, args, kwargs, **options):
|
|
|
kwargs = kwargs or {}
|
|
|
task_id = options.get("task_id", gen_unique_id())
|
|
|
retries = options.get("retries", 0)
|
|
|
+ throw = options.pop("throw", conf.EAGER_PROPAGATES_EXCEPTIONS)
|
|
|
|
|
|
task = tasks[task.name] # Make sure we get the instance, not class.
|
|
|
|
|
@@ -163,5 +167,7 @@ def apply(task, args, kwargs, **options):
|
|
|
trace = TaskTrace(task.name, task_id, args, kwargs, task=task)
|
|
|
retval = trace.execute()
|
|
|
if isinstance(retval, ExceptionInfo):
|
|
|
+ if throw:
|
|
|
+ raise retval.exception
|
|
|
retval = retval.exception
|
|
|
return EagerResult(task_id, retval, trace.status, traceback=trace.strtb)
|