def commitTemp(self, fileentry): """ This functions writes the file to the pool directory. If the file is not marked as tempfile, nothing is written. Files are processed in the following order: - a temp path is created - the file is written to this path - the original file is renamed to be deleted on success and stored as `file.deleteOnSuccess` - the tempfile is renamed to the original path - the original file can be removed by calling `Cleanup()` fileentry is the database entry the file is stored for. """ if not self.isTempFile(): # nothing to write -> return return True if not self.fileentry: self.fileentry = weakref.ref(fileentry) maxFileSize = fileentry.maxFileSize if self.size and self.size > maxFileSize: raise IOError, "File too big" # create temp path for current backupPath = None originalPath = DvPath(self._Path()) newPath = DvPath(self._CreatePath(self.filekey, self.filename)) tempPath = DvPath(str(newPath)) tempPath.SetName(u"_temp_" + unicode(uuid.uuid4())) tempPath.SetExtension(newPath.GetExtension()) if tempPath.Exists(): tempPath.Delete() tempPath.CreateDirectories() size = 0 try: out = open(tempPath.GetStr(), "wb") data = self.read(10000) while data: size += len(data) if maxFileSize and size > maxFileSize: raise IOError, "File too big" out.write(data) data = self.read(10000) out.close() #file.close() except Exception, e: try: self.file.close() except: pass try: out.close() except: pass # reset old file tempPath.Delete() raise Exception, e
def test_Create(self): n = self.name p = DvPath(n) self.assert_(p._path == n) self.assert_(str(p) == n) p = DvPath(DvPath(n)) self.assert_(str(p) == n) p.SetStr(n) self.assert_(str(p) == n) self.assert_(p.GetStr() == n)
def _CreatePath(self, key, filename): """ Create the physical path of the file """ root = str(self.fileentry().pool.root) aP = DvPath(root) aP.AppendSeperator() aP.AppendDirectory(self.fileentry().pool._GetDirectory(self.fileentry().id)) aP.AppendSeperator() aP.SetName(u"%06d_%s_" % (self.fileentry().id, key)) aP.SetExtension(DvPath(filename).GetExtension()) return aP.GetStr()
def _Path(self, absolute = True): """ Get the physical path of the file. Checks the database. """ if self.tempfile or not self.path: return u"" root = str(self.fileentry().pool.root) if absolute and self.path[:len(root)] != root: path = DvPath(root) path.AppendSeperator() path.Append(self.path) else: path = DvPath(self.path) return path.GetStr()