File tree Expand file tree Collapse file tree 2 files changed +19
-4
lines changed
Expand file tree Collapse file tree 2 files changed +19
-4
lines changed Original file line number Diff line number Diff line change @@ -185,11 +185,23 @@ def _initial_start_dir(self):
185185
186186 @staticmethod
187187 def _replace_extension (filename , extension ):
188- known_extensions = map (OWSave ._extension_from_filter , OWSave .filters )
189- for known_ext in sorted (known_extensions , key = len , reverse = True ):
190- if filename .endswith (known_ext ):
191- filename = filename [:- len (known_ext )]
188+ """
189+ Remove all extensions that appear in any filter.
190+
191+ Double extensions are broken in different weird ways across all systems,
192+ including omitting some, like turning iris.tab.gz to iris.gz. This
193+ function removes anything that can appear anywhere.
194+ """
195+ known_extensions = set ()
196+ for filt in OWSave .filters :
197+ known_extensions |= \
198+ set (OWSave ._extension_from_filter (filt ).split ("." ))
199+ known_extensions .remove ("" )
200+ while True :
201+ base , ext = os .path .splitext (filename )
202+ if ext [1 :] not in known_extensions :
192203 break
204+ filename = base
193205 return filename + extension
194206
195207 @staticmethod
Original file line number Diff line number Diff line change @@ -431,6 +431,9 @@ def test_save_file_dialog_enforces_extension_linux(self):
431431 dialog .selectFile ("high.tab.gz" )
432432 self .assertTrue (dialog .selectedFiles ()[0 ].endswith ("/high.csv" ))
433433
434+ dialog .selectFile ("high.tab.gz.tab.tab.gz" )
435+ self .assertTrue (dialog .selectedFiles ()[0 ].endswith ("/high.csv" ))
436+
434437 def test_save_file_dialog_uses_valid_filters_linux (self ):
435438 widget = self .widget
436439 widget ._valid_filters = lambda : ["a (*.a)" , "b (*.b)" ]
You can’t perform that action at this time.
0 commit comments