diff --git a/src/batdetect2/outputs/formats/base.py b/src/batdetect2/outputs/formats/base.py index 9b0f012..12c12bd 100644 --- a/src/batdetect2/outputs/formats/base.py +++ b/src/batdetect2/outputs/formats/base.py @@ -27,6 +27,10 @@ def make_path_relative(path: PathLike, audio_dir: PathLike) -> Path: return path.relative_to(audio_dir) + audio_parts = audio_dir.parts + if audio_parts and path.parts[: len(audio_parts)] == audio_parts: + return Path(*path.parts[len(audio_parts) :]) + return path diff --git a/tests/test_outputs/test_base.py b/tests/test_outputs/test_base.py new file mode 100644 index 0000000..04c490b --- /dev/null +++ b/tests/test_outputs/test_base.py @@ -0,0 +1,21 @@ +from pathlib import Path + +from batdetect2.outputs.formats.base import make_path_relative + + +def test_make_path_relative_strips_shared_relative_prefix() -> None: + audio_dir = Path("example_data/audio") + path = Path("example_data/audio/subdir/clip.wav") + + relative = make_path_relative(path, audio_dir) + + assert relative == Path("subdir/clip.wav") + + +def test_make_path_relative_returns_dot_for_matching_relative_dir() -> None: + audio_dir = Path("example_data/audio") + path = Path("example_data/audio") + + relative = make_path_relative(path, audio_dir) + + assert relative == Path(".")