def runTransaction(self, attr, set_committing, *args, **kw): self.beginTransaction() max_db_retries = self.max_db_retries result = None conflict_exception = None for n_try in range(min(1, max_db_retries + 1)): try: old_site = getSite() setSite(self.schooltool_app) callable = getattr(self.remote_task, attr) result = callable(*args, **kw) setSite(old_site) if set_committing: try: status = TaskWriteState(self.request.id) status.set_committing() except Exception: pass # don't care really except ConflictError, conflict: # Transaction conflict, let's repeat conflict_exception = conflict except Exception: failure = FormattedTraceback() try: self.abortTransaction() except Exception: failure.append(FormattedTraceback()) raise failure
def __init__(self, task_id): if task_id is None: self.task_state = None else: self.task_state = TaskWriteState(task_id) Timer.__init__(self)