def writeChunk(self, offset, data): self.bytesReceived += len(data) if self.bytesReceivedLimit and self.bytesReceived > self.bytesReceivedLimit: raise filetransfer.SFTPError(filetransfer.FX_FAILURE, "Quota exceeded") self.sftpserver.fs.lseek(self.fd, offset, os.SEEK_SET) self.sftpserver.fs.write(self.fd, data)
def writeChunk(self, offset, data): """ """ self.bytes_written += len(data) if self.bytesReceivedLimit and self.bytes_written > self.bytesReceivedLimit: log.msg(eventid='KIPP0015', format='Data upload limit reached') raise filetransfer.SFTPError( filetransfer.FX_FAILURE, "Quota exceeded" ) self.sftpserver.fs.lseek(self.fd, offset, os.SEEK_SET) self.sftpserver.fs.write(self.fd, data)
def open(self, event, data): transfer_type = server.detect_transfer_type(data['flags']) if (transfer_type == 'upload'): if not (data['filename'].endswith('gpg') or data['filename'].endswith('pgp')): raise filetransfer.SFTPError( filetransfer.FX_OP_UNSUPPORTED, "Uploaded files *must* be GPG/PGP-encrypted") else: print 'download'
def writeChunk(self, offset, data): """See `ISFTPFile`.""" if not self._shouldWrite(): raise filetransfer.SFTPError( filetransfer.FX_PERMISSION_DENIED, "%r was opened read-only." % self._unescaped_relpath) if self._shouldTruncate(): deferred = self._truncateFile() else: deferred = defer.succeed(None) self._written = True if self._shouldAppend(): deferred.addCallback(lambda ignored: self.transport.append_bytes( self._escaped_path, data)) else: deferred.addCallback(lambda ignored: self.transport.writeChunk( self._escaped_path, offset, data)) return deferred
def translateError(failure, func_name): """Translate Bazaar errors to `filetransfer.SFTPError` instances.""" types_to_codes = { bzr_errors.PermissionDenied: filetransfer.FX_PERMISSION_DENIED, bzr_errors.TransportNotPossible: filetransfer.FX_PERMISSION_DENIED, bzr_errors.NoSuchFile: filetransfer.FX_NO_SUCH_FILE, bzr_errors.FileExists: filetransfer.FX_FILE_ALREADY_EXISTS, bzr_errors.DirectoryNotEmpty: filetransfer.FX_FAILURE, bzr_errors.TransportError: filetransfer.FX_FAILURE, FileIsADirectory: filetransfer.FX_FILE_IS_A_DIRECTORY, } # Bazaar expects makeDirectory to fail with exactly the string "mkdir # failed". names_to_messages = { 'makeDirectory': 'mkdir failed', } try: sftp_code = types_to_codes[failure.type] except KeyError: failure.raiseException() message = names_to_messages.get(func_name, failure.getErrorMessage()) raise filetransfer.SFTPError(sftp_code, message)
def open_file(stat_result): if stat.S_ISDIR(stat_result.st_mode): return TransportSFTPFile(self.transport, path, flags, self) else: raise filetransfer.SFTPError(filetransfer.FX_NO_SUCH_FILE, directory)