zoo_data: toujours lier une action à son job (#21198)

This commit is contained in:
Benjamin Dauvergne 2018-01-19 15:19:51 +01:00
parent 2baa23702d
commit 4cf9a23f5d
1 changed files with 9 additions and 13 deletions

View File

@ -291,10 +291,12 @@ class Job(models.Model):
# conserve class path of the job_action to recreate it later
class_path = cls.get_classpath(job_action)
content = job_action.to_json()
assert isinstance(content, dict), 'action must serialize to a dict'
content['$classpath'] = class_path
job = Job.objects.create(content=content, transaction=transaction)
assert isinstance(job.content, dict), 'action must serialize to json'
job.state = cls.STATE_TODO
job_action.job = job
try:
if not do_later:
job.state = job_action.do(job=job)
@ -321,21 +323,15 @@ class Job(models.Model):
klass = getattr(module, klass_name)
except:
raise Exception('classpath %s unknown' % classpath)
return klass.from_json(content)
action = klass.from_json(content)
action.job = self
return action
def do(self, log=True):
content = self.content.copy()
action = self.action
try:
classpath = content.pop('$classpath')
module_name, klass_name = classpath.rsplit('.', 1)
try:
module = importlib.import_module(module_name)
klass = getattr(module, klass_name)
except:
raise Exception('classpath %s unknown' % classpath)
job_action = klass.from_json(content)
self.state = job_action.do(job=self)
content = job_action.to_json()
self.state = action.do(job=self)
content = action.to_json()
assert isinstance(content, dict), 'action must serialize to a dict'
self.content = content
except Exception as e:
@ -345,7 +341,7 @@ class Job(models.Model):
self.state = self.STATE_UNRECOVERABLE_ERROR
self.content['$exc_detail'] = unicode(e)
self.content['$exc_tb'] = traceback.format_exc()
self.content['$classpath'] = classpath
self.content['$classpath'] = self.get_classpath(action)
self.save()
@property