aboutsummaryrefslogtreecommitdiff
path: root/paramiko/sftp_handle.py
diff options
context:
space:
mode:
Diffstat (limited to 'paramiko/sftp_handle.py')
-rw-r--r--paramiko/sftp_handle.py93
1 files changed, 42 insertions, 51 deletions
diff --git a/paramiko/sftp_handle.py b/paramiko/sftp_handle.py
index 29d3d0d..92dd9cf 100644
--- a/paramiko/sftp_handle.py
+++ b/paramiko/sftp_handle.py
@@ -21,9 +21,7 @@ Abstraction of an SFTP file handle (for server mode).
"""
import os
-
-from paramiko.common import *
-from paramiko.sftp import *
+from paramiko.sftp import SFTP_OP_UNSUPPORTED, SFTP_OK
class SFTPHandle (object):
@@ -33,21 +31,20 @@ class SFTPHandle (object):
by the client to refer to the underlying file.
Server implementations can (and should) subclass SFTPHandle to implement
- features of a file handle, like L{stat} or L{chattr}.
+ features of a file handle, like `stat` or `chattr`.
"""
def __init__(self, flags=0):
"""
Create a new file handle representing a local file being served over
- SFTP. If C{flags} is passed in, it's used to determine if the file
+ SFTP. If ``flags`` is passed in, it's used to determine if the file
is open in append mode.
- @param flags: optional flags as passed to L{SFTPServerInterface.open}
- @type flags: int
+ :param int flags: optional flags as passed to `.SFTPServerInterface.open`
"""
self.__flags = flags
self.__name = None
# only for handles to folders:
- self.__files = { }
+ self.__files = {}
self.__tell = None
def close(self):
@@ -56,10 +53,10 @@ class SFTPHandle (object):
Normally you would use this method to close the underlying OS level
file object(s).
- The default implementation checks for attributes on C{self} named
- C{readfile} and/or C{writefile}, and if either or both are present,
- their C{close()} methods are called. This means that if you are
- using the default implementations of L{read} and L{write}, this
+ The default implementation checks for attributes on ``self`` named
+ ``readfile`` and/or ``writefile``, and if either or both are present,
+ their ``close()`` methods are called. This means that if you are
+ using the default implementations of `read` and `write`, this
method's default implementation should be fine also.
"""
readfile = getattr(self, 'readfile', None)
@@ -71,24 +68,22 @@ class SFTPHandle (object):
def read(self, offset, length):
"""
- Read up to C{length} bytes from this file, starting at position
- C{offset}. The offset may be a python long, since SFTP allows it
+ Read up to ``length`` bytes from this file, starting at position
+ ``offset``. The offset may be a Python long, since SFTP allows it
to be 64 bits.
If the end of the file has been reached, this method may return an
- empty string to signify EOF, or it may also return L{SFTP_EOF}.
+ empty string to signify EOF, or it may also return `.SFTP_EOF`.
- The default implementation checks for an attribute on C{self} named
- C{readfile}, and if present, performs the read operation on the python
+ The default implementation checks for an attribute on ``self`` named
+ ``readfile``, and if present, performs the read operation on the Python
file-like object found there. (This is meant as a time saver for the
- common case where you are wrapping a python file object.)
+ common case where you are wrapping a Python file object.)
- @param offset: position in the file to start reading from.
- @type offset: int or long
- @param length: number of bytes to attempt to read.
- @type length: int
- @return: data read from the file, or an SFTP error code.
- @rtype: str
+ :param offset: position in the file to start reading from.
+ :type offset: int or long
+ :param int length: number of bytes to attempt to read.
+ :return: data read from the file, or an SFTP error code, as a `str`.
"""
readfile = getattr(self, 'readfile', None)
if readfile is None:
@@ -100,7 +95,7 @@ class SFTPHandle (object):
readfile.seek(offset)
self.__tell = offset
data = readfile.read(length)
- except IOError, e:
+ except IOError as e:
self.__tell = None
return SFTPServer.convert_errno(e.errno)
self.__tell += len(data)
@@ -108,23 +103,22 @@ class SFTPHandle (object):
def write(self, offset, data):
"""
- Write C{data} into this file at position C{offset}. Extending the
- file past its original end is expected. Unlike python's normal
- C{write()} methods, this method cannot do a partial write: it must
- write all of C{data} or else return an error.
+ Write ``data`` into this file at position ``offset``. Extending the
+ file past its original end is expected. Unlike Python's normal
+ ``write()`` methods, this method cannot do a partial write: it must
+ write all of ``data`` or else return an error.
- The default implementation checks for an attribute on C{self} named
- C{writefile}, and if present, performs the write operation on the
- python file-like object found there. The attribute is named
- differently from C{readfile} to make it easy to implement read-only
+ The default implementation checks for an attribute on ``self`` named
+ ``writefile``, and if present, performs the write operation on the
+ Python file-like object found there. The attribute is named
+ differently from ``readfile`` to make it easy to implement read-only
(or write-only) files, but if both attributes are present, they should
refer to the same file.
- @param offset: position in the file to start reading from.
- @type offset: int or long
- @param data: data to write into the file.
- @type data: str
- @return: an SFTP error code like L{SFTP_OK}.
+ :param offset: position in the file to start reading from.
+ :type offset: int or long
+ :param str data: data to write into the file.
+ :return: an SFTP error code like `.SFTP_OK`.
"""
writefile = getattr(self, 'writefile', None)
if writefile is None:
@@ -139,7 +133,7 @@ class SFTPHandle (object):
self.__tell = offset
writefile.write(data)
writefile.flush()
- except IOError, e:
+ except IOError as e:
self.__tell = None
return SFTPServer.convert_errno(e.errno)
if self.__tell is not None:
@@ -148,33 +142,30 @@ class SFTPHandle (object):
def stat(self):
"""
- Return an L{SFTPAttributes} object referring to this open file, or an
- error code. This is equivalent to L{SFTPServerInterface.stat}, except
+ Return an `.SFTPAttributes` object referring to this open file, or an
+ error code. This is equivalent to `.SFTPServerInterface.stat`, except
it's called on an open file instead of a path.
- @return: an attributes object for the given file, or an SFTP error
- code (like L{SFTP_PERMISSION_DENIED}).
- @rtype: L{SFTPAttributes} I{or error code}
+ :return:
+ an attributes object for the given file, or an SFTP error code
+ (like `.SFTP_PERMISSION_DENIED`).
+ :rtype: `.SFTPAttributes` or error code
"""
return SFTP_OP_UNSUPPORTED
def chattr(self, attr):
"""
- Change the attributes of this file. The C{attr} object will contain
+ Change the attributes of this file. The ``attr`` object will contain
only those fields provided by the client in its request, so you should
check for the presence of fields before using them.
- @param attr: the attributes to change on this file.
- @type attr: L{SFTPAttributes}
- @return: an error code like L{SFTP_OK}.
- @rtype: int
+ :param .SFTPAttributes attr: the attributes to change on this file.
+ :return: an `int` error code like `.SFTP_OK`.
"""
return SFTP_OP_UNSUPPORTED
-
### internals...
-
def _set_files(self, files):
"""
Used by the SFTP server code to cache a directory listing. (In