(dir_path: str, ignores: List[str] = None, add_base_to_relative: bool = False)
return result
List all files recursively in a given directory while ignoring given file and directory names.
    Returns list of tuples containing both absolute and relative paths.
List all files recursively in a given directory while ignoring given file and directory names.
    Returns list of tuples containing both absolute and relative paths.
List all files recursively in a given directory while ignoring given file and directory names . Returns list of tuples containing both absolute and relative paths .
def list_dir_recursively_with_ignore(dir_path: str, ignores: List[str] = None, add_base_to_relative: bool = False) -> List[Tuple[str, str]]:
    """List all files recursively in a given directory while ignoring given file and directory names.
    Returns list of tuples containing both absolute and relative paths."""
    assert os.path.isdir(dir_path)
    base_name = os.path.basename(os.path.normpath(dir_path))

    if ignores is None:
        ignores = []

    result = []

    for root, dirs, files in os.walk(dir_path, topdown=True):
        for ignore_ in ignores:
            dirs_to_remove = [d for d in dirs if fnmatch.fnmatch(d, ignore_)]

            # dirs need to be edited in-place
            for d in dirs_to_remove:
                dirs.remove(d)

            files = [f for f in files if not fnmatch.fnmatch(f, ignore_)]

        absolute_paths = [os.path.join(root, f) for f in files]
        relative_paths = [os.path.relpath(p, dir_path) for p in absolute_paths]

        if add_base_to_relative:
            relative_paths = [os.path.join(base_name, p) for p in relative_paths]

        assert len(absolute_paths) == len(relative_paths)
        result += zip(absolute_paths, relative_paths)

    return result
def list_dir_recursively_with_ignore ( dir_path : str , ignores : List [ str ] = None , add_base_to_relative : bool = False ) -> List [ Tuple [ str , str ] ] : assert os . path . isdir ( dir_path ) base_name = os . path . basename ( os . path . normpath ( dir_path ) ) if ignores is None : ignores = [ ] result = [ ] for root , dirs , files in os . walk ( dir_path , topdown = True ) : for ignore_ in ignores : dirs_to_remove = [ d for d in dirs if fnmatch . fnmatch ( d , ignore_ ) ] # dirs need to be edited in-place for d in dirs_to_remove : dirs . remove ( d ) files = [ f for f in files if not fnmatch . fnmatch ( f , ignore_ ) ] absolute_paths = [ os . path . join ( root , f ) for f in files ] relative_paths = [ os . path . relpath ( p , dir_path ) for p in absolute_paths ] if add_base_to_relative : relative_paths = [ os . path . join ( base_name , p ) for p in relative_paths ] assert len ( absolute_paths ) == len ( relative_paths ) result += zip ( absolute_paths , relative_paths ) return result