def _FlushToDisk(self): if self.readOnly or not self.filename: return s = self._GetSaveStr() try: blue.AtomicFileWrite(self.filename, s) except Exception: L.error('Failed writing %s, switching to read-only', self.filename) self.readOnly = True
def _WriterThreadFunc(self): if self._dirty: self._dirty = False fn = blue.paths.ResolvePathForWriting(self._filepath) try: if os.access(fn, os.F_OK) and not os.access(fn, os.W_OK): os.chmod(fn, 438) k = yaml.dump(self.datastore, Dumper=yaml.CSafeDumper) blue.AtomicFileWrite(fn, k) except Exception as e: log.LogError('Failed writing to disk', str(self), '-', repr(e))
def WriteToDisk(self): if self._dirty: self._dirty = False fn = blue.paths.ResolvePathForWriting(self._filepath) try: if os.access(fn, os.F_OK) and not os.access(fn, os.W_OK): os.chmod(fn, 438) k = blue.marshal.Save(self.datastore) blue.AtomicFileWrite(fn, k) except Exception as e: log.LogError('Failed writing to disk', str(self), '-', repr(e))
def __FlushCache(self, yieldFirst): if yieldFirst: blue.pyos.synchro.Yield() while self.lastChange: flushWhat, lastChange = self.lastChange.items()[0] del self.lastChange[flushWhat] what, key = flushWhat filename = self.cachePath + what + '/%s.cache' % self.KeyToFileName( key) if os.access(filename, os.F_OK) and not os.access(filename, os.W_OK): try: os.chmod(filename, 666) except StandardError: self.LogWarn( 'Failed to reset access priviledges on file from file system (', filename, ')') sys.exc_clear() try: store = getattr(self, what) if key not in store: try: os.unlink(filename) self.LogInfo('Deleted ', key, ' from file system (', filename, ')') except StandardError as e: self.LogWarn( 'Failed to delete file from file system (', filename, '):', e) sys.exc_clear() else: ob = store[key] if not isinstance(ob, uthread.Semaphore): blue.AtomicFileWrite(filename, blue.marshal.Save((key, ob))) self.LogInfo('Wrote ', key, ' to file (', filename, ')') self.lastFileWriteTime[self.__KeyFromFileName( filename)] = os.path.getmtime(filename) except Exception: log.LogException('Error while writing cached data') sys.exc_clear()
def SetVersion(self, changeID, branch, fullFileLock=False, systemFolderOK=True): versionData = { 'changeID': changeID, 'branch': branch, 'fullFileLock': fullFileLock, 'systemFolderOK': systemFolderOK } if not systemFolderOK: self._isSystemFolderOK = False if not self.IsSystemFolderOK(): versionData['systemFolderOK'] = False fileName = self.GetBulkCachePath() + VERSION_FILENAME marshalData = blue.marshal.Save(versionData) blue.AtomicFileWrite(fileName, marshalData) self._versionData = versionData
def SaveBulkToFile(self, bulkID, value): fileName = self.GetBulkCachePath() + str(bulkID) + BULK_FILE_EXT marshalData = blue.marshal.Save(value) blue.AtomicFileWrite(fileName, marshalData)