From a12246781d159ce361d61ac648dd264db9a0ded8 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 16 Dec 2015 11:35:06 +0100 Subject: [PATCH] CuraProfileWriter use SaveFile instead of streams The SaveFile is safer since it should save the file atomically. This safety has proven important in the past so use it here too. Contributes to issue CURA-34. --- plugins/CuraProfileWriter/CuraProfileWriter.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/plugins/CuraProfileWriter/CuraProfileWriter.py b/plugins/CuraProfileWriter/CuraProfileWriter.py index 61e9fff47d..479b84f37e 100644 --- a/plugins/CuraProfileWriter/CuraProfileWriter.py +++ b/plugins/CuraProfileWriter/CuraProfileWriter.py @@ -2,18 +2,25 @@ # Copyright (c) 2013 David Braam # Uranium is released under the terms of the AGPLv3 or higher. +from UM.Logger import Logger +from UM.SaveFile import SaveFile from UM.Settings.Profile import Profile from UM.Settings.ProfileWriter import ProfileWriter ## Writes profiles to Cura's own profile format with config files. class CuraProfileWriter(ProfileWriter): - ## Writes a profile to the specified stream. + ## Writes a profile to the specified file path. # - # \param stream \type{IOStream} The stream to write the profile to. - # \param profile \type{Profile} The profile to write to that stream. + # \param path \type{string} The file to output to. + # \param profile \type{Profile} The profile to write to that file. # \return \code True \endcode if the writing was successful, or \code # False \endcode if it wasn't. - def write(self, stream, profile): + def write(self, path, profile): serialised = profile.serialise() - stream.write(serialised) + try: + with SaveFile(path, "wt", -1, "utf-8") as f: #Open the specified file. + f.write(serialised) + except Exception as e: + Logger.log("e", "Failed to write profile to %s: %s", path, str(e)) + return False return True