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
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)
def __init__(self, on_progress=None): self._last_reported_done = 0 self._last_reported_total = 0 if on_progress is not None: assert is_callable(on_progress) self._on_progress = on_progress