Handle IO error on document save (#961)
* Add try/except to document replace call * Try the os.replace command 5 times * Just use else condition on for loop instead * Make the exceptions explicitly OSError * Revert the os.replace loop, as this is not the issue
This commit is contained in:
committed by
GitHub
parent
8b603d15a5
commit
ec07cebb51
@@ -162,7 +162,11 @@ class NWDoc():
|
||||
|
||||
# If we're here, the file was successfully saved, so we can
|
||||
# replace the temp file with the actual file
|
||||
os.replace(docTemp, docPath)
|
||||
try:
|
||||
os.replace(docTemp, docPath)
|
||||
except OSError as exc:
|
||||
self._docError = formatException(exc)
|
||||
return False
|
||||
|
||||
self._prevHash = sha256sum(docPath)
|
||||
self._currHash = self._prevHash
|
||||
|
||||
@@ -715,7 +715,7 @@ class NWProject():
|
||||
if os.path.isfile(saveFile):
|
||||
os.replace(saveFile, backFile)
|
||||
os.replace(tempFile, saveFile)
|
||||
except Exception as exc:
|
||||
except OSError as exc:
|
||||
self.theParent.makeAlert(self.tr(
|
||||
"Failed to save project."
|
||||
), nwAlert.ERROR, exception=exc)
|
||||
|
||||
@@ -112,6 +112,18 @@ def testCoreDocument_LoadSave(monkeypatch, mockGUI, nwMinimal):
|
||||
assert theDoc.writeDocument(theText) is False
|
||||
assert theDoc.getError() == "OSError: Mock OSError"
|
||||
|
||||
theDoc._docError = ""
|
||||
assert theDoc.getError() == ""
|
||||
|
||||
# Cause os.replace() to fail while saving
|
||||
with monkeypatch.context() as mp:
|
||||
mp.setattr("os.replace", causeOSError)
|
||||
assert theDoc.writeDocument(theText) is False
|
||||
assert theDoc.getError() == "OSError: Mock OSError"
|
||||
|
||||
theDoc._docError = ""
|
||||
assert theDoc.getError() == ""
|
||||
|
||||
# Saving with no handle
|
||||
theDoc._docHandle = None
|
||||
assert theDoc.writeDocument(theText) is False
|
||||
|
||||
Reference in New Issue
Block a user