Skip to content

Commit e9dff0c

Browse files
committed
brainvisionrawio: added error message when sidecar file seems to be missing
1 parent 961843b commit e9dff0c

File tree

1 file changed

+26
-3
lines changed

1 file changed

+26
-3
lines changed

neo/rawio/brainvisionrawio.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ def _parse_header(self):
5555
marker_filename = self.filename.replace(bname, vhdr_header["Common Infos"]["MarkerFile"])
5656
binary_filename = self.filename.replace(bname, vhdr_header["Common Infos"]["DataFile"])
5757

58-
binary_filename = self._ensure_filename(binary_filename, "data")
59-
marker_filename = self._ensure_filename(marker_filename, "marker")
58+
marker_filename = self._ensure_filename(marker_filename, "marker", "MarkerFile")
59+
binary_filename = self._ensure_filename(binary_filename, "data", "DataFile")
6060

6161
if vhdr_header["Common Infos"]["DataFormat"] != "BINARY":
6262
raise NeoReadWriteError(
@@ -239,7 +239,7 @@ def _rescale_event_timestamp(self, event_timestamps, dtype, event_channel_index)
239239
def _get_analogsignal_buffer_description(self, block_index, seg_index, buffer_id):
240240
return self._buffer_descriptions[block_index][seg_index][buffer_id]
241241

242-
def _ensure_filename(self, filename, kind):
242+
def _ensure_filename(self, filename, kind, entry_name):
243243
if not os.path.exists(filename):
244244
# file not found, subsequent import stage would fail
245245
ext = os.path.splitext(filename)[1]
@@ -256,6 +256,29 @@ def _ensure_filename(self, filename, kind):
256256
f"prefix matched the .vhdr ({os.path.basename(alt_name)}). Using "
257257
f"this file instead.")
258258
filename = alt_name
259+
else:
260+
# we neither found the file referenced in the .vhdr file nor a file of
261+
# same name as header with the desired extension; most likely a file went
262+
# missing or was renamed in an inconsistent fashion; generate a useful
263+
# error message
264+
header_dname = os.path.dirname(self.filename)
265+
header_bname = os.path.basename(self.filename)
266+
referenced_bname = os.path.basename(filename)
267+
alt_bname = os.path.basename(alt_name)
268+
if alt_bname != referenced_bname:
269+
# this is only needed when the two candidate file names differ
270+
detail = (f" is named either as per the {entry_name}={referenced_bname} "
271+
f"line in the .vhdr file, or")
272+
else:
273+
# we omit it if we can to make it less confusing
274+
detail = ""
275+
self.logger.error(
276+
f"Did not find the {kind} file associated with .vhdr (header) "
277+
f"file {header_bname!r} in folder {header_dname!r}.\n Please make "
278+
f"sure the file{detail} is named the same way as the .vhdr file, but "
279+
f"ending in {ext} (i.e. {alt_bname}).\n The import will likely fail, "
280+
f"but if it goes through, you can ignore this message (the check "
281+
f"can misfire on networked file systems).")
259282
return filename
260283

261284

0 commit comments

Comments
 (0)