Skip to content

Commit 06becf8

Browse files
authored
Merge pull request #99 from Nautilus-Cyberneering/issue-98-error-validating-paths-for-renaming
Fix error validating path for renamed files
2 parents dd064ba + d7d1a9b commit 06becf8

File tree

4 files changed

+59
-28
lines changed

4 files changed

+59
-28
lines changed

src/nautilus_librarian/mods/dvc/domain/utils.py

+32-15
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,6 @@ def extract_all_added_and_modified_and_renamed_files_from_dvc_diff(
2828
return all_files
2929

3030

31-
def extract_added_and_modified_and_renamed_files_from_dvc_diff(
32-
dvc_diff_json, only_basename=True
33-
):
34-
all_files = extract_all_added_and_modified_and_renamed_files_from_dvc_diff(
35-
dvc_diff_json, only_basename
36-
)
37-
files = filter_media_library_files(all_files)
38-
return files
39-
40-
4131
def extract_all_changed_files_from_dvc_diff(dvc_diff_json, only_basename=True):
4232
"""
4333
It gets a plain string list with the added, modified, deleted or renamed files from the dvc diff json.
@@ -166,13 +156,40 @@ def extract_renamed_files_from_dvc_diff(dvc_diff_json, only_basename=True):
166156
return media_files
167157

168158

169-
def extract_list_of_media_file_changes_from_dvc_diff_output(
170-
dvc_diff, only_basename=True
171-
):
172-
return extract_added_and_modified_and_renamed_files_from_dvc_diff(
173-
dvc_diff, only_basename
159+
def extract_list_of_new_or_renamed_files_from_dvc_diff_output(dvc_diff_json):
160+
dvc_diff = DvcDiffParser.from_json(dvc_diff_json)
161+
162+
added_files = dvc_diff.filter(
163+
exclude_added=False,
164+
exclude_modified=True,
165+
exclude_deleted=True,
166+
exclude_renamed=True,
167+
only_basename=False,
174168
)
175169

170+
renamed_files = dvc_diff.filter(
171+
exclude_added=True,
172+
exclude_modified=True,
173+
exclude_deleted=True,
174+
exclude_renamed=False,
175+
only_basename=False,
176+
)
177+
178+
# Renamed files are not plain filename list. They are a dict like this:
179+
# {
180+
# "new": "000002-32.600.2.tif",
181+
# "old": "000001-32.600.2.tif",
182+
# }
183+
# That means the image was renamed from "000001-32.600.2.tif" to "000002-32.600.2.tif"
184+
185+
flat_renamed_files = map(lambda file: file["new"], renamed_files)
186+
187+
all_files = added_files + list(flat_renamed_files)
188+
189+
files = filter_media_library_files(all_files)
190+
191+
return files
192+
176193

177194
def extract_added_files_from_dvc_diff(dvc_diff_json):
178195
"""

src/nautilus_librarian/typer/commands/workflows/actions/validate_filepaths_action.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from nautilus_librarian.domain.validate_filepaths import validate_filepath
22
from nautilus_librarian.mods.dvc.domain.utils import (
3-
extract_list_of_media_file_changes_from_dvc_diff_output,
3+
extract_list_of_new_or_renamed_files_from_dvc_diff_output,
44
get_new_filepath_if_is_a_renaming_dict,
55
)
66
from nautilus_librarian.typer.commands.workflows.actions.action_result import (
@@ -20,9 +20,7 @@ def validate_filepaths_action(dvc_diff):
2020
ResultCode.EXIT, [Message("No media library file changes found")]
2121
)
2222

23-
filepaths = extract_list_of_media_file_changes_from_dvc_diff_output(
24-
dvc_diff, only_basename=False
25-
)
23+
filepaths = extract_list_of_new_or_renamed_files_from_dvc_diff_output(dvc_diff)
2624

2725
messages = []
2826

tests/test_nautilus_librarian/test_mods/test_dvc/test_domain/test_utils.py

+15-5
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,38 @@
33
from nautilus_librarian.mods.dvc.domain.utils import (
44
extract_added_files_from_dvc_diff,
55
extract_deleted_files_from_dvc_diff,
6-
extract_list_of_media_file_changes_from_dvc_diff_output,
6+
extract_list_of_new_or_renamed_files_from_dvc_diff_output,
77
extract_modified_files_from_dvc_diff,
88
extract_renamed_files_from_dvc_diff,
99
get_new_filepath_if_is_a_renaming_dict,
1010
)
1111

1212

13-
def test_extract_list_of_media_file_changes_from_dvc_diff_output():
13+
def test_extract_list_of_new_or_renamed_files_from_dvc_diff_output():
1414
dvc_diff = {
1515
"added": [
1616
{"path": "data/000001/32/000001-32.600.2.tif"},
1717
],
1818
"deleted": [],
1919
"modified": [],
20-
"renamed": [],
20+
"renamed": [
21+
{
22+
"path": {
23+
"old": "data/000003/32/000003-32.600.2.tif",
24+
"new": "data/000002/32/000002-32.600.2.tif",
25+
}
26+
}
27+
],
2128
}
2229

23-
filenames = extract_list_of_media_file_changes_from_dvc_diff_output(
30+
filenames = extract_list_of_new_or_renamed_files_from_dvc_diff_output(
2431
compact_json(dvc_diff)
2532
)
2633

27-
assert filenames == ["000001-32.600.2.tif"]
34+
assert filenames == [
35+
"data/000001/32/000001-32.600.2.tif",
36+
"data/000002/32/000002-32.600.2.tif", # We include only the new name of the file for renamed ones.
37+
]
2838

2939

3040
def test_extract_added_files_from_dvc_diff():

tests/test_nautilus_librarian/test_typer/test_commands/test_workflows/test_actions/test_validate_filepaths_action.py

+10-4
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def given_a_dvc_diff_object_it_should_validate_the_filepath_of_the_new_media_fil
2323
assert result.contains_text("000001-32.600.2.tif ✓")
2424

2525

26-
def given_a_dvc_diff_object_it_should_validate_the_filepath_of_the_modified_media_files():
26+
def given_a_dvc_diff_object_it_should_not_validate_the_filepath_of_the_modified_media_files():
2727

2828
dvc_diff_with_modified_image = {
2929
"added": [],
@@ -37,7 +37,7 @@ def given_a_dvc_diff_object_it_should_validate_the_filepath_of_the_modified_medi
3737
result = validate_filepaths_action(compact_json(dvc_diff_with_modified_image))
3838

3939
assert result.code == ResultCode.CONTINUE
40-
assert result.contains_text("000002-32.600.2.tif ✓")
40+
assert not result.contains_text("000002-32.600.2.tif ✓")
4141

4242

4343
def given_a_dvc_diff_object_it_should_validate_the_filepath_of_the_renamed_media_files():
@@ -47,14 +47,20 @@ def given_a_dvc_diff_object_it_should_validate_the_filepath_of_the_renamed_media
4747
"deleted": [],
4848
"modified": [],
4949
"renamed": [
50-
{"path": "data/000003/32/000003-32.600.2.tif"},
50+
{
51+
"path": {
52+
"old": "data/000001/32/000001-32.600.2.tif",
53+
"new": "data/000002/32/000002-32.600.2.tif",
54+
}
55+
}
5156
],
5257
}
5358

5459
result = validate_filepaths_action(compact_json(dvc_diff_with_renamed_image))
5560

5661
assert result.code == ResultCode.CONTINUE
57-
assert result.contains_text("000003-32.600.2.tif ✓")
62+
assert result.contains_text("000002-32.600.2.tif ✓")
63+
assert not result.contains_text("000001-32.600.2.tif ✓")
5864

5965

6066
def given_a_wrong_media_filepath_it_should_show_an_error():

0 commit comments

Comments
 (0)