Ejemplo n.º 1
0
def rename_files(files, rule_set, use_path=False, use_extension=False, on_progress=None, check_abort=None):
    progress_tracker = ProgressTracker(on_progress)

    assert check_abort is None or is_callable(check_abort)

    progress_tracker.report_more_total(len(files))
    renamed_files = []

    for file_ref in files:
        if check_abort is not None and check_abort():
            raise RenameFilesAbortedError()

        renamed_files.append(
            _rename_file(
                file_ref,
                rule_set,
                use_path=use_path,
                use_extension=use_extension,
            )
        )
        progress_tracker.report_more_done(1)

    _verify_renamed_files(renamed_files)

    return renamed_files
Ejemplo n.º 2
0
def scan_files(base_path, recursive=True, on_progress=None, check_abort=None):
    progress_tracker = ProgressTracker(on_progress)

    assert check_abort is None or is_callable(check_abort)

    progress_tracker.report_more_total(1)

    _do_base_path_checks(base_path)

    scan_queue = deque([BAONPath(base_path)])
    files = []

    while len(scan_queue) > 0:
        if check_abort is not None and check_abort():
            raise ScanFilesAbortedError()

        path = scan_queue.popleft()
        file_ref = _scan_single_entry(path)

        directory_opened = False
        if file_ref.is_dir and not file_ref.is_link and (recursive or path.is_root()):
            try:
                files_in_dir = os.listdir(path.real_path())
                scan_queue.extend(path.extend(name) for name in files_in_dir)
                progress_tracker.report_more_total(len(files_in_dir))
                directory_opened = True
            except OSError as e:
                file_ref.problems.append(CannotExploreDirectoryError(inner_error=e))

        if not directory_opened:
            files.append(file_ref)

        progress_tracker.report_more_done(1)

    return sorted(files)
Ejemplo n.º 3
0
    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