runtime/PLCObject.py
changeset 2651 231f8bd2cd7d
parent 2646 d692e01d94f4
child 2653 8b612b357679
equal deleted inserted replaced
2646:d692e01d94f4 2651:231f8bd2cd7d
   518         os.mkdir(self.tmpdir)
   518         os.mkdir(self.tmpdir)
   519 
   519 
   520     @RunInMain
   520     @RunInMain
   521     def SeedBlob(self, seed):
   521     def SeedBlob(self, seed):
   522         blob = (mkstemp(dir=self.tmpdir) + (hashlib.new('md5'),))
   522         blob = (mkstemp(dir=self.tmpdir) + (hashlib.new('md5'),))
   523         _fobj, _path, md5sum = blob
   523         _fd, _path, md5sum = blob
   524         md5sum.update(seed)
   524         md5sum.update(seed)
   525         newBlobID = md5sum.digest()
   525         newBlobID = md5sum.digest()
   526         self.blobs[newBlobID] = blob
   526         self.blobs[newBlobID] = blob
   527         return newBlobID
   527         return newBlobID
   528 
   528 
   531         blob = self.blobs.pop(blobID, None)
   531         blob = self.blobs.pop(blobID, None)
   532 
   532 
   533         if blob is None:
   533         if blob is None:
   534             return None
   534             return None
   535 
   535 
   536         fobj, _path, md5sum = blob
   536         fd, _path, md5sum = blob
   537         md5sum.update(data)
   537         md5sum.update(data)
   538         newBlobID = md5sum.digest()
   538         newBlobID = md5sum.digest()
   539         os.write(fobj, data)
   539         os.write(fd, data)
   540         self.blobs[newBlobID] = blob
   540         self.blobs[newBlobID] = blob
   541         return newBlobID
   541         return newBlobID
   542 
   542 
   543     @RunInMain
   543     @RunInMain
   544     def PurgeBlobs(self):
   544     def PurgeBlobs(self):
   545         for fobj, _path, _md5sum in self.blobs.values():
   545         for fd, _path, _md5sum in self.blobs.values():
   546             os.close(fobj)
   546             os.close(fd)
   547         self._init_blobs()
   547         self._init_blobs()
   548 
   548 
   549     def _BlobAsFile(self, blobID, newpath):
   549     def _BlobAsFile(self, blobID, newpath):
   550         blob = self.blobs.pop(blobID, None)
   550         blob = self.blobs.pop(blobID, None)
   551 
   551 
   552         if blob is None:
   552         if blob is None:
   553             raise Exception(_("Missing data to create file: {}").format(newpath))
   553             raise Exception(_("Missing data to create file: {}").format(newpath))
   554 
   554 
   555         fobj, path, _md5sum = blob
   555         fd, path, _md5sum = blob
   556         os.close(fobj)
   556         fobj = os.fdopen(fd)
       
   557         fobj.flush()
       
   558         os.fsync(fd)
       
   559         fobj.close()
   557         shutil.move(path, newpath)
   560         shutil.move(path, newpath)
   558 
   561 
   559     def _extra_files_log_path(self):
   562     def _extra_files_log_path(self):
   560         return os.path.join(self.workingdir, "extra_files.txt")
   563         return os.path.join(self.workingdir, "extra_files.txt")
   561 
   564