|
123456789101112131415161718192021222324252627282930 |
- from pathlib import Path
-
-
- def search_file_upwards(
- base_dir_path: Path,
- target_file_name: str,
- max_search_parent_depth: int,
- ) -> Path:
- """
- Find a target file in the current directory or its parent directories up to a specified depth.
- :param base_dir_path: Starting directory path to search from.
- :param target_file_name: Name of the file to search for.
- :param max_search_parent_depth: Maximum number of parent directories to search upwards.
- :return: Path of the file if found, otherwise None.
- """
- current_path = base_dir_path.resolve()
- for _ in range(max_search_parent_depth):
- candidate_path = current_path / target_file_name
- if candidate_path.is_file():
- return candidate_path
- parent_path = current_path.parent
- if parent_path == current_path: # reached the root directory
- break
- else:
- current_path = parent_path
-
- raise ValueError(
- f"File '{target_file_name}' not found in the directory '{base_dir_path.resolve()}' or its parent directories"
- f" in depth of {max_search_parent_depth}."
- )
|