コード例 #1
0
ファイル: RenamePlan.py プロジェクト: goc9000/baon
    def execute(self, on_progress=None):
        progress_tracker = ProgressTracker(on_progress)

        n_steps = len(self.steps)
        last_successful_step = None
        progress_tracker.report_more_total(n_steps)

        try:
            for i in range(n_steps):
                self.steps[i].execute()
                progress_tracker.report_more_done(1)

                last_successful_step = i
        except Exception as e:
            with swallow_all_errors():
                progress_tracker.report_indeterminate_progress()

            rollback_ok = self._undo(from_step=last_successful_step) if last_successful_step is not None else True

            try:
                raise e
            except RenamePlanActionError as action_error:
                raise RenamePlanExecuteFailedBecauseActionFailedError(action_error, rollback_ok) from None
            except Exception as e:
                raise RenamePlanExecuteFailedBecauseOtherError(e) from None