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 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
class TaskProgress(Timer): lines = None order = None title = u'' def __init__(self, task_id): if task_id is None: self.task_state = None else: self.task_state = TaskWriteState(task_id) Timer.__init__(self) def reset(self): self.lines = {} self.order = {} Timer.reset(self) def get(self, line_id, **kw): return self.lines.get(line_id, **kw) def __getitem__(self, line_id): return self.lines[line_id] def add(self, line_id, **kw): if line_id not in self.lines: self.lines[line_id] = ProgressLine(**kw) self.order[line_id] = max( self.order.values()) + 1 if self.order else 1 return self.get(line_id) def remove(self, line_id): del self.lines[line_id] del self.order[line_id] def finish(self, line_id, force=True): self.lines[line_id].finish() if force: self.force() def error(self, line_id, error): self.lines[line_id].errors.append(error) def tick(self, *args, **kw): if args or kw: self.add(*args, **kw) assert len(args) == 1 line_id = args[0] self.lines[line_id].update(kw) def tock(self, *args, **kw): lines = dict([(n, self.lines[lid]) for lid, n in self.order.items()]) progress = {'lines': lines, 'title': self.title} if self.task_state is not None: self.task_state.set_progress(progress) Timer.tock(self)
class TaskProgress(Timer): lines = None order = None title = u"" def __init__(self, task_id): if task_id is None: self.task_state = None else: self.task_state = TaskWriteState(task_id) Timer.__init__(self) def reset(self): self.lines = {} self.order = {} Timer.reset(self) def get(self, line_id, **kw): return self.lines.get(line_id, **kw) def __getitem__(self, line_id): return self.lines[line_id] def add(self, line_id, **kw): if line_id not in self.lines: self.lines[line_id] = ProgressLine(**kw) self.order[line_id] = max(self.order.values()) + 1 if self.order else 1 return self.get(line_id) def remove(self, line_id): del self.lines[line_id] del self.order[line_id] def finish(self, line_id, force=True): self.lines[line_id].finish() if force: self.force() def error(self, line_id, error): self.lines[line_id].errors.append(error) def tick(self, *args, **kw): if args or kw: self.add(*args, **kw) assert len(args) == 1 line_id = args[0] self.lines[line_id].update(kw) def tock(self, *args, **kw): lines = dict([(n, self.lines[lid]) for lid, n in self.order.items()]) progress = {"lines": lines, "title": self.title} if self.task_state is not None: self.task_state.set_progress(progress) Timer.tock(self)
def __init__(self, task_id): if task_id is None: self.task_state = None else: self.task_state = TaskWriteState(task_id) Timer.__init__(self)