zoo_data: toujours lier une action à son job (#21198)
This commit is contained in:
parent
2baa23702d
commit
4cf9a23f5d
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue