Пример #1
0
 def __init__(self, sftp, handle, mode='r', bufsize=-1):
     BufferedFile.__init__(self)
     self.sftp = sftp
     self.handle = handle
     BufferedFile._set_mode(self, mode, bufsize)
     self.pipelined = False
     self._prefetching = False
     self._prefetch_done = False
     self._prefetch_data = {}
     self._prefetch_reads = []
     self._saved_exception = None
Пример #2
0
 def __init__(self, sftp, handle, mode='r', bufsize=-1):
     BufferedFile.__init__(self)
     self.sftp = sftp
     self.handle = handle
     BufferedFile._set_mode(self, mode, bufsize)
     self.pipelined = False
     self._prefetching = False
     self._prefetch_done = False
     self._prefetch_data = {}
     self._prefetch_reads = []
     self._saved_exception = None
Пример #3
0
class SFTPFile(BufferedFile):
    """
    Proxy object for a file on the remote server, in client mode SFTP.
    """

    # Some sftp servers will choke if you send read/write requests larger than
    # this size.
    MAX_REQUEST_SIZE = 32768

    def __init__(self, sftp, handle, mode='r', bufsize=-1):
        BufferedFile.__init__(self)
        self.sftp = sftp
        self.handle = handle
        BufferedFile._set_mode(self, mode, bufsize)
        self.pipelined = False
        self._prefetching = False
        self._prefetch_done = False
        self._prefetch_data = {}
        self._prefetch_reads = []
        self._saved_exception = None

    def __del__(self):
        self._close(async=True)

    def close(self):
        self._close(async=False)

    def _close(self, async=False):
        # We allow double-close without signaling an error, because real
        # Python file objects do.  However, we must protect against actually
        # sending multiple CMD_CLOSE packets, because after we close our
        # handle, the same handle may be re-allocated by the server, and we
        # may end up mysteriously closing some random other file.  (This is
        # especially important because we unconditionally call close() from
        # __del__.)
        if self._closed:
            return
        self.sftp._log(DEBUG, 'close(%s)' % hexlify(self.handle))
        if self.pipelined:
            self.sftp._finish_responses(self)
        BufferedFile.close(self)
        try:
            if async:
                # GC'd file handle could be called from an arbitrary thread -- don't wait for a response
                self.sftp._async_request(type(None), CMD_CLOSE, self.handle)
            else:
                self.sftp._request(CMD_CLOSE, self.handle)
        except EOFError:
            # may have outlived the Transport connection
            pass
        except (IOError, socket.error):
            # may have outlived the Transport connection
            pass
Пример #4
0
 def __init__(self, mode='r', bufsize=-1):
     BufferedFile.__init__(self)
     self._set_mode(mode, bufsize)
     self.buffer = ''
Пример #5
0
 def __init__(self, channel, mode='r', bufsize=-1):
     self.channel = channel
     BufferedFile.__init__(self)
     self._set_mode(mode, bufsize)
Пример #6
0
 def __init__(self, channel, mode = 'r', bufsize = -1):
     self.channel = channel
     BufferedFile.__init__(self)
     self._set_mode(mode, bufsize)
Пример #7
0
 def __init__(self, mode='r', bufsize=-1):
     BufferedFile.__init__(self)
     self._set_mode(mode, bufsize)
     self.buffer = ''