Skip to content

Commit d247c2b

Browse files
committed
raise an error if new files are found in project folder before reset()
1 parent afbf54d commit d247c2b

1 file changed

Lines changed: 43 additions & 10 deletions

File tree

src/osekit/public/project.py

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import logging
1313
import shutil
14+
import typing
1415
from pathlib import Path
1516
from typing import TYPE_CHECKING, TypeVar
1617

@@ -50,6 +51,13 @@ class Project:
5051
5152
"""
5253

54+
SUBFOLDERS: typing.ClassVar = {
55+
"data": "data",
56+
"processed": "processed",
57+
"other": "other",
58+
"log": "log",
59+
}
60+
5361
def __init__( # noqa: PLR0913
5462
self,
5563
folder: Path,
@@ -164,14 +172,14 @@ def build(
164172
afm.close()
165173
move_tree(
166174
source=self.folder,
167-
destination=self.folder / "other",
175+
destination=self.folder / self.SUBFOLDERS["other"],
168176
excluded_paths={file.path for file in ads.files}
169177
| set(
170-
(self.folder / "log").iterdir()
171-
if (self.folder / "log").exists()
178+
(self.folder / self.SUBFOLDERS["log"]).iterdir()
179+
if (self.folder / self.SUBFOLDERS["log"]).exists()
172180
else (),
173181
)
174-
| {self.folder / "log"},
182+
| {self.folder / self.SUBFOLDERS["log"]},
175183
)
176184
self._sort_dataset(ads)
177185
ads.write_json(ads.folder)
@@ -228,7 +236,7 @@ def _create_logger(self) -> None:
228236
self.logger = logging.getLogger()
229237
return
230238

231-
logs_directory = self.folder / "log"
239+
logs_directory = self.folder / self.SUBFOLDERS["log"]
232240
if not logs_directory.exists():
233241
logs_directory.mkdir(mode=DPDEFAULT, parents=True)
234242
self.logger = logging.getLogger("project").getChild(self.folder.name)
@@ -250,10 +258,35 @@ def reset(self) -> None:
250258
afm.close()
251259

252260
files_to_remove = list(self.folder.iterdir())
261+
262+
misplaced_files = []
263+
for file in files_to_remove:
264+
if file.name == "project.json":
265+
continue
266+
if file in (
267+
self.folder / subfolder for subfolder in self.SUBFOLDERS.values()
268+
):
269+
continue
270+
if any(
271+
(self.folder / subfolder) in file.parents
272+
for subfolder in self.SUBFOLDERS.values()
273+
):
274+
continue
275+
misplaced_files.append(file)
276+
if misplaced_files:
277+
msg = (
278+
f"The following files would be deleted by a reset.\n"
279+
f"Either delete them manually or move them to the "
280+
f"{self.folder / self.SUBFOLDERS['other']} folder "
281+
f"before resetting the project:\n"
282+
)
283+
msg += "\n".join(file.name for file in misplaced_files)
284+
raise RuntimeError(msg)
285+
253286
self.get_output("original").move_files(self.folder)
254287

255-
if self.folder / "other" in files_to_remove:
256-
move_tree(self.folder / "other", self.folder)
288+
if self.folder / self.SUBFOLDERS["other"] in files_to_remove:
289+
move_tree(self.folder / self.SUBFOLDERS["other"], self.folder)
257290

258291
self.logger.handlers.clear()
259292

@@ -458,7 +491,7 @@ def _get_audio_dataset_subpath(
458491
) -> Path:
459492
return (
460493
self.folder
461-
/ "data"
494+
/ self.SUBFOLDERS["data"]
462495
/ "audio"
463496
/ (
464497
f"{round(ads.data_duration.total_seconds())}_{round(ads.sample_rate)}"
@@ -585,7 +618,7 @@ def export(
585618
"dataset-json-path": self.folder / "project.json",
586619
},
587620
name=name + (f"_{index}" if len(batch_indexes) > 1 else ""),
588-
output_folder=self.folder / "log",
621+
output_folder=self.folder / self.SUBFOLDERS["log"],
589622
)
590623
self.job_builder.submit_pbs()
591624

@@ -612,7 +645,7 @@ def _get_spectro_dataset_subpath(
612645
fft_folder = f"{sds.fft.mfft}_{sds.fft.win.shape[0]}_{sds.fft.hop}_linear"
613646
return (
614647
self.folder
615-
/ "processed"
648+
/ self.SUBFOLDERS["processed"]
616649
/ (ads_folder / fft_folder if sds.has_default_name else sds.name)
617650
)
618651

0 commit comments

Comments
 (0)