Skip to content

Commit 1a6c35e

Browse files
gdollecbrnr
andauthored
Fix export ffilter and extensions (#184)
* Fix export ffilter and extensions * Fix flake8 warn * Style * Remove unused re module * Update changelog * Move to "Fixed" section Co-authored-by: Clemens Brunner <[email protected]>
1 parent 23b1645 commit 1a6c35e

File tree

5 files changed

+35
-23
lines changed

5 files changed

+35
-23
lines changed

Diff for: CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
## [Unreleased] - XXXX-XX-XX
2+
### Fixed
3+
- Fix export functionality ([#184](https://github.com/cbrnr/mnelab/pull/184) by [Guillaume Dollé](https://github.com/gdolle))
4+
25
### Changed
36
- PySide2 installed by default if wrapped Qt bindings (PyQt5, PySide2) are not found ([#187](https://github.com/cbrnr/mnelab/pull/187) by [Guillaume Dollé](https://github.com/gdolle))
47

Diff for: mnelab/io/readers.py

+9-7
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,12 @@ def read_raw(fname, *args, **kwargs):
6464
This function supports reading different file formats. It uses the readers
6565
dict to dispatch the appropriate read function for a supported file type.
6666
"""
67-
ext = "".join(Path(fname).suffixes)
68-
if ext in readers:
69-
return readers[ext](fname, *args, **kwargs)
70-
else:
71-
raise ValueError(f"Unknown file type {ext}.")
72-
# here we could inspect the file signature to determine its type, which
73-
# would allow us to read file independently of their extensions
67+
maxsuffixes = max([ext.count(".") for ext in supported])
68+
suffixes = Path(fname).suffixes
69+
for i in range(-maxsuffixes, 0):
70+
ext = "".join(suffixes[i:])
71+
if ext in readers.keys():
72+
return readers[ext](fname, *args, **kwargs)
73+
raise ValueError(f"Unknown file type {suffixes}.")
74+
# here we could inspect the file signature to determine its type, which
75+
# would allow us to read file independently of their extensions

Diff for: mnelab/io/writers.py

+10-6
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414

1515
def write_fif(fname, raw):
16-
raw.save(fname)
16+
raw.save(fname, overwrite=True)
1717

1818

1919
def write_set(fname, raw):
@@ -47,7 +47,8 @@ def write_edf(fname, raw):
4747
"""Export raw to EDF/BDF file (requires pyEDFlib)."""
4848
import pyedflib
4949

50-
ext = "".join(Path(fname).suffixes)
50+
suffixes = Path(fname).suffixes
51+
ext = "".join(suffixes[-1:])
5152
if ext == ".edf":
5253
filetype = pyedflib.FILETYPE_EDFPLUS
5354
dmin, dmax = -32768, 32767
@@ -124,8 +125,11 @@ def write_bv(fname, raw, events=None):
124125

125126

126127
def write_raw(fname, raw):
127-
ext = "".join(Path(fname).suffixes)
128-
if ext in writers:
129-
writers[ext][0](fname, raw)
128+
maxsuffixes = max([ext.count(".") for ext in writers.keys()])
129+
suffixes = Path(fname).suffixes
130+
for i in range(-maxsuffixes, 0):
131+
ext = "".join(suffixes[i:])
132+
if ext in writers.keys():
133+
return writers[ext][0](fname, raw)
130134
else:
131-
raise ValueError(f"Unknown file type {ext}.")
135+
raise ValueError(f"Unknown file type '{suffixes}'.")

Diff for: mnelab/mainwindow.py

+12-5
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ def __init__(self, model):
132132
self.actions[action] = self.export_menu.addAction(
133133
f"{ext[1:].upper()} ({description[1]})...",
134134
partial(self.export_file, model.export_data, "Export data",
135-
ext))
135+
"*" + ext))
136136
self.actions["export_bads"] = file_menu.addAction(
137137
"Export &bad channels...",
138138
lambda: self.export_file(model.export_bads, "Export bad channels",
@@ -444,10 +444,17 @@ def export_file(self, f, text, ffilter="*"):
444444
"""Export to file."""
445445
fname = QFileDialog.getSaveFileName(self, text, filter=ffilter)[0]
446446
if fname:
447-
try:
448-
f(fname, ffilter)
449-
except TypeError:
450-
f(fname)
447+
if ffilter != "*":
448+
exts = [ext.replace("*", "") for ext in ffilter.split()]
449+
450+
maxsuffixes = max([ext.count(".") for ext in exts])
451+
suffixes = Path(fname).suffixes
452+
for i in range(-maxsuffixes, 0):
453+
ext = "".join(suffixes[i:])
454+
if ext in exts:
455+
return f(fname)
456+
fname = fname + exts[0]
457+
return f(fname)
451458

452459
def import_file(self, f, text, ffilter="*"):
453460
"""Import file."""

Diff for: mnelab/model.py

+1-5
Original file line numberDiff line numberDiff line change
@@ -159,12 +159,8 @@ def annotations_from_events(self):
159159
self.history.append(hist)
160160
self.history.append("data = data.set_annotations(annots)")
161161

162-
def export_data(self, fname, ffilter):
162+
def export_data(self, fname):
163163
"""Export raw to file."""
164-
ext = "".join(Path(fname).suffixes)
165-
if ext != ffilter:
166-
ext = ffilter
167-
fname += ext
168164
write_raw(fname, self.current["data"])
169165

170166
def export_bads(self, fname):

0 commit comments

Comments
 (0)