예제 #1
0
    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
예제 #2
0
 def test_Set(self):
     n = self.name
     p = DvPath(n)
     self.assert_(str(p) == n)
     p.SetName("new")
     self.assert_(str(p) == self.base + "new.txt", str(p))
     p.SetExtension("png")
     self.assert_(str(p) == self.base + "new.png")
     p.SetNameExtension("another.txt")
     self.assert_(str(p) == self.base + "another.txt")
예제 #3
0
파일: files.py 프로젝트: comlorda/nive
    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()