[PythonCAD] Post nineteenth release plans
ewilhelm at sbcglobal.net
Wed Nov 17 00:15:48 CET 2004
# The following was supposedly scribed by
# Art Haas
# on Tuesday 16 November 2004 09:24 am:
>A better approach
>would be to save the file with a temporary name, and if that save is
>successful then make the backup and rename the temporary file to the
>correct name. This way, the existing file is not tampered with until
> the new file has been completely saved, so any glitches in saving
> the new file will not require you to rename a backup copy.
One caveat in this scheme: You cannot save into a symlink (or a hard
link for that matter.)
Maybe this is solved by getting all of the XML into an in-memory
string, and then open(file, 'w') the file and write into it.
However, here I'm assuming that your main concern about failed saves
is during creation of the XML.
If you really need an atomic write action, then you would have to
follow a symlink back to the original and perform your os.rename()
operation there. However, readlink() only works on symlinks, not
hard links, so this scheme doesn't do everything that open(file, 'w')
Let's forget about links for a second and just note that using a
rename will lose any existing permissions on a file, creating
problems where a file is shared between users (if I set a file as a+r
and that is not the default of my umask, then pythoncad will make my
setting go away whenever I save.) There is also an issue of who
saves the file (I believe any user can write into a file with a+w
permissions, but only the owner can remove it (or move, or rename on
top of it.)) Also, note the implications of same on your backup file
strategy. Maybe you need to actually open() the backup and then read
the current file into it, then open() the destination file and write
the new XML. Then, as long as you have write permission on both
files, everything is okay, regardless of who owns them.
The opinions expressed in this e-mail were randomly generated by
the computer and do not necessarily reflect the views of its owner.
More information about the PythonCAD