83
83
from paramiko.sftp import (SFTP_FLAG_WRITE, SFTP_FLAG_CREATE,
84
84
SFTP_FLAG_EXCL, SFTP_FLAG_TRUNC,
85
SFTP_OK, CMD_HANDLE, CMD_OPEN)
86
86
from paramiko.sftp_attr import SFTPAttributes
87
87
from paramiko.sftp_file import SFTPFile
389
389
self._host, self._port)
390
390
return connection, (user, password)
392
def disconnect(self):
393
connection = self._get_connection()
394
if connection is not None:
392
397
def _get_sftp(self):
393
398
"""Ensures that a connection is established"""
394
399
connection = self._get_connection()
715
720
if (e.args[0].startswith('Directory not empty: ')
716
721
or getattr(e, 'errno', None) == errno.ENOTEMPTY):
717
722
raise errors.DirectoryNotEmpty(path, str(e))
723
if e.args == ('Operation unsupported',):
724
raise errors.TransportNotPossible()
718
725
mutter('Raising exception with args %s', e.args)
719
726
if getattr(e, 'errno', None) is not None:
720
727
mutter('Raising exception with errno %s', e.errno)
810
817
"""Return the stat information for a file."""
811
818
path = self._remote_path(relpath)
813
return self._get_sftp().stat(path)
820
return self._get_sftp().lstat(path)
814
821
except (IOError, paramiko.SSHException), e:
815
822
self._translate_io_exception(e, path, ': unable to stat')
824
def readlink(self, relpath):
825
"""See Transport.readlink."""
826
path = self._remote_path(relpath)
828
return self._get_sftp().readlink(path)
829
except (IOError, paramiko.SSHException), e:
830
self._translate_io_exception(e, path, ': unable to readlink')
832
def symlink(self, source, link_name):
833
"""See Transport.symlink."""
835
conn = self._get_sftp()
836
sftp_retval = conn.symlink(source, link_name)
837
if SFTP_OK != sftp_retval:
838
raise TransportError(
839
'%r: unable to create symlink to %r' % (link_name, source),
842
except (IOError, paramiko.SSHException), e:
843
self._translate_io_exception(e, link_name,
844
': unable to create symlink to %r' % (source))
817
846
def lock_read(self, relpath):
819
848
Lock the given file for shared (read) access.