Writing files in a safe way. More...
Functions | |
| def | follow_symlinks |
| Follow a series of symbolic links and return the destination path. More... | |
| def | umask |
| Return the process's file mode creation mask. More... | |
| def | write |
| Write some data to a file in a reasonably safe way. More... | |
Variables | |
| int | MAXSYMLINKS = 256 |
How many symlinks to follow before returning ELOOP. More... | |
Writing files in a safe way.
| def xorn.fileutils.follow_symlinks | ( | filename | ) |
Follow a series of symbolic links and return the destination path.
This function calls readlink(2) recursively until some place that doesn't contain a symlink is found—either some other kind of file, or a non-existing file if the last symlink was broken. There may still be symlinks in the directory components of the returned path.
Definition at line 39 of file fileutils.py.
| def xorn.fileutils.umask | ( | ) |
Return the process's file mode creation mask.
Definition at line 75 of file fileutils.py.
| def xorn.fileutils.write | ( | filename, | |
| write_func, | |||
overwrite = False, |
|||
backup = True, |
|||
fsync = True |
|||
| ) |
Write some data to a file in a reasonably safe way.
Calls write_func to write some data to the file named filename. The data is first written to a temporary file which is then renamed to the final name. If write_func raises an exception, the temporary file is removed, and the original file is left untouched.
If backup is True (the default), an existing regular file called filename will be backed up after the data has successfully been written, replacing an existing backup file. Otherwise, it will be overwritten. An exception to this is if the user doesn't have write permission to the existing file and overwrite is False. (This solves gEDA bug #698565.) If filename exists but is not a regular file, an exception is raised.
If filename is a symbolic link, the (ultimately) linked file is replaced, not the link. The backup is created in the same directory as the linked file.
Hard links to filename will break. Also, since the file is recreated, existing access control lists, metadata etc. may be lost. The function tries to preserve owner, group and attributes but doen't treat failure to do so as an error.
| [in] | filename | The name of a file to write to. |
| [in] | write_func | A function that takes a file-like object as an argument and writes the data to it. |
| [in] | overwrite | Overwrite the file even if the user doen't have write permission. |
| [in] | backup | Back up the original file. Set this to False if the file was already saved in this invocation of the program. |
| [in] | fsync | Sync the temporary file to ensure the data is on disk when it is renamed over the destination. This may cause significant lag; but otherwise, if the system crashes, both the new and the old file may be lost on some filesystems (i.e. those that don't guarantee the data is written to the disk before the metadata). |
None.| IOError,OSError | if a filesystem error occurred |
Definition at line 132 of file fileutils.py.
| int xorn.fileutils.MAXSYMLINKS = 256 |
How many symlinks to follow before returning ELOOP.
A more conventional value for this is 20 or even 8, but gEDA uses 256, so we're using that, too.
Definition at line 30 of file fileutils.py.
1.8.8