Skip to content

Commit 9e53f41

Browse files
authored
Merge pull request #330 from krystofair/krystofair/extension-in-saving-workflow
[FIX] Workflow saving: fix cancel, add ows extension by default
2 parents 840d84c + abe7ba9 commit 9e53f41

File tree

2 files changed

+14
-13
lines changed

2 files changed

+14
-13
lines changed

orangecanvas/application/canvasmain.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,13 +1549,15 @@ def save_scheme_as(self):
15491549
acceptMode=QFileDialog.AcceptSave,
15501550
windowModality=Qt.WindowModal,
15511551
objectName="save-as-ows-filedialog",
1552+
defaultSuffix=".ows"
15521553
)
15531554
dialog.setNameFilter(self.tr("Orange Workflow (*.ows)"))
1554-
dialog.exec()
1555-
files = dialog.selectedFiles()
1555+
# `deleteLater` can be ivoked before `exec` as PyQt 6.9 doc says, that
1556+
# it is activated after `exec`, and work on PyQt 5 version well (here)
15561557
dialog.deleteLater()
1557-
if files:
1558-
filename = files[0]
1558+
# dialog.exec waits for user action
1559+
if dialog.exec():
1560+
filename = dialog.selectedFiles()[0]
15591561
settings.setValue("last-scheme-dir", os.path.dirname(filename))
15601562
if self.save_scheme_to(curr_scheme, filename):
15611563
document.setPath(filename)
@@ -1591,7 +1593,7 @@ def save_scheme_to(self, scheme, filename):
15911593
exc_info=True,
15921594
parent=self
15931595
)
1594-
return False
1596+
return False # return False here because there is second part
15951597

15961598
try:
15971599
with open(filename, "wb") as f:
@@ -1608,7 +1610,6 @@ def save_scheme_to(self, scheme, filename):
16081610
informative_text=self.tr("Choose another location."),
16091611
parent=self
16101612
)
1611-
return False
16121613
except PermissionError as ex:
16131614
log.error("%s saving '%s'", type(ex).__name__, filename,
16141615
exc_info=True)
@@ -1621,7 +1622,6 @@ def save_scheme_to(self, scheme, filename):
16211622
"another location."),
16221623
parent=self
16231624
)
1624-
return False
16251625
except OSError as ex:
16261626
log.error("%s saving '%s'", type(ex).__name__, filename,
16271627
exc_info=True)
@@ -1632,8 +1632,6 @@ def save_scheme_to(self, scheme, filename):
16321632
exc_info=True,
16331633
parent=self
16341634
)
1635-
return False
1636-
16371635
except Exception: # pylint: disable=broad-except
16381636
log.error("Error saving %r to %r", scheme, filename, exc_info=True)
16391637
message_critical(
@@ -1643,7 +1641,7 @@ def save_scheme_to(self, scheme, filename):
16431641
exc_info=True,
16441642
parent=self
16451643
)
1646-
return False
1644+
return False # default behaviour
16471645

16481646
def save_swp(self):
16491647
"""

orangecanvas/application/tests/test_mainwindow.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import io
22
import os
33
import tempfile
4-
from unittest.mock import patch
4+
from unittest.mock import patch, Mock
55

66
from AnyQt.QtGui import QWhatsThisClickedEvent
77
from AnyQt.QtWidgets import (
@@ -149,7 +149,7 @@ class TestMainWindowLoad(TestMainWindowBase):
149149

150150
def setUp(self):
151151
super().setUp()
152-
fd, filename = tempfile.mkstemp()
152+
fd, filename = tempfile.mkstemp(suffix=".ows")
153153
self.file = os.fdopen(fd, "w+b")
154154
self.filename = filename
155155

@@ -182,8 +182,11 @@ def exec(myself):
182182
myself.setOption(QFileDialog.DontConfirmOverwrite)
183183
myself.selectFile(self.filename)
184184
myself.accept()
185+
return True
185186

186-
with patch("AnyQt.QtWidgets.QFileDialog.exec", exec):
187+
with (patch("AnyQt.QtWidgets.QFileDialog.exec", exec),
188+
patch("AnyQt.QtWidgets.QMessageBox.question",
189+
new=Mock(return_value=QMessageBox.Yes))):
187190
w.save_scheme()
188191
self.assertTrue(os.path.samefile(w.current_document().path(), self.filename))
189192

0 commit comments

Comments
 (0)