From 8d6ebcc4de564561d99b2fc0778bdf60c716592b Mon Sep 17 00:00:00 2001 From: Godefroid Chapelle Date: Fri, 3 May 2013 14:23:20 +0200 Subject: [PATCH] Store string representation of job error instead of error instance, to avoid issue when unpickling certain strange error types. --- docs/HISTORY.txt | 10 +++++----- src/z3c/taskqueue/baseservice.py | 8 ++++---- src/z3c/taskqueue/job.py | 3 +++ src/z3c/taskqueue/startlater.txt | 2 -- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/docs/HISTORY.txt b/docs/HISTORY.txt index 582208a..2cfa631 100644 --- a/docs/HISTORY.txt +++ b/docs/HISTORY.txt @@ -4,13 +4,13 @@ Changelog 0.2.1 (unreleased) ------------------ -- Nothing changed yet. - +- Store string representation of job error instead of error instance, +to avoid issue when unpickling certain strange error types. 0.2.0 (2012-11-12) ------------------ -- Simplify start service code; get rid of start * services +- Simplify start service code; get rid of start * services. 0.1-alpha-4 (2011-05-16) @@ -28,10 +28,10 @@ Changelog 0.1-alpha-2 (2010-10-19) ------------------------ -- Removed use of `_p_jar` +- Removed use of `_p_jar`. 0.1-alpha-1 (2010-09-27) ------------------------ -- Initial release +- Initial release. diff --git a/src/z3c/taskqueue/baseservice.py b/src/z3c/taskqueue/baseservice.py index 9a70b6a..fb05693 100644 --- a/src/z3c/taskqueue/baseservice.py +++ b/src/z3c/taskqueue/baseservice.py @@ -143,7 +143,7 @@ def getResult(self, jobid): def getError(self, jobid): """See interfaces.ITaskService""" - return str(self.jobs[jobid].error) + return self.jobs[jobid].error def hasJobsWaiting(self, now=None): """ @@ -195,7 +195,7 @@ def processNext(self, now=None, jobid=None): except ComponentLookupError, error: log.error('Task "%s" not found!' % job.task) log.exception(error) - job.error = error + job.setError(error) if job.status != interfaces.CRONJOB: job.status = interfaces.ERROR return True @@ -208,7 +208,7 @@ def processNext(self, now=None, jobid=None): if job.status != interfaces.CRONJOB: job.status = interfaces.COMPLETED except task.TaskError, error: - job.error = error + job.setError(error) if job.status != interfaces.CRONJOB: job.status = interfaces.ERROR except Exception, error: @@ -218,7 +218,7 @@ def processNext(self, now=None, jobid=None): log.exception(str(error)) raise else: - job.error = error + job.setError(error) if job.status != interfaces.CRONJOB: job.status = interfaces.ERROR else: diff --git a/src/z3c/taskqueue/job.py b/src/z3c/taskqueue/job.py index 1aa99d7..6e8cad6 100644 --- a/src/z3c/taskqueue/job.py +++ b/src/z3c/taskqueue/job.py @@ -51,6 +51,9 @@ def __init__(self, id, task, input): def __repr__(self): return '<%s %r>' % (self.__class__.__name__, self.id) + def setError(self, error): + self.error = str(error) + class CronJob(Job): """A job for reocuring tasks""" diff --git a/src/z3c/taskqueue/startlater.txt b/src/z3c/taskqueue/startlater.txt index b146a5f..1f7cc9a 100644 --- a/src/z3c/taskqueue/startlater.txt +++ b/src/z3c/taskqueue/startlater.txt @@ -95,5 +95,3 @@ the ``startLater=True`` parameter. {'foo': 'bar'} >>> service.getError(jobid) - 'None' -