- Automatically call the close() method of a storage backend when the
object is garbage collected.
- Calling stat in the SFTP backend when the file doesn't exist will raise
a Cumulus NotFoundError instead of a generic IOError.
- Avoid the use of keyword arguments when calling SFTPClient methods (in
my testing the first argument might be called 'path' instead of
'filename', but avoid the problem altogether by just using positional
arguments).
+ def __del__(self):
+ self.close()
+
def open(url):
return Store(url)
def open(url):
return Store(url)
key_file = os.path.expanduser(self.config['identityfile'])
#not really nice but i don't see a cleaner way atm...
try:
key_file = os.path.expanduser(self.config['identityfile'])
#not really nice but i don't see a cleaner way atm...
try:
- self.auth_key = RSAKey (filename = key_file)
+ self.auth_key = RSAKey (key_file)
except SSHException, e:
if e.message == 'Unable to parse file':
except SSHException, e:
if e.message == 'Unable to parse file':
- self.auth_key = DSAKey (filename = key_file)
+ self.auth_key = DSAKey (key_file)
else:
raise
else:
filename = os.path.expanduser('~/.ssh/id_rsa')
if os.path.exists(filename):
else:
raise
else:
filename = os.path.expanduser('~/.ssh/id_rsa')
if os.path.exists(filename):
- self.auth_key = RSAKey(filename = filename)
+ self.auth_key = RSAKey(filename)
else:
filename = os.path.expanduser('~/.ssh/id_dsa')
if (os.path.exists(filename)):
else:
filename = os.path.expanduser('~/.ssh/id_dsa')
if (os.path.exists(filename)):
- self.auth_key = DSSKey (filename = filename)
+ self.auth_key = DSSKey (filename)
return filter(type_patterns[type].match, self.client.listdir(self.path))
def get(self, type, name):
return filter(type_patterns[type].match, self.client.listdir(self.path))
def get(self, type, name):
- return self.client.open(filename = self.__build_fn(name), mode = 'rb')
+ return self.client.open(self.__build_fn(name), mode = 'rb')
def put(self, type, name, fp):
def put(self, type, name, fp):
- remote_file = self.client.open(filename = self.__build_fn(name), mode = 'wb')
+ remote_file = self.client.open(self.__build_fn(name), mode = 'wb')
buf = fp.read(4096)
while (len(buf) > 0):
remote_file.write(buf)
buf = fp.read(4096)
while (len(buf) > 0):
remote_file.write(buf)
remote_file.close()
def delete(self, type, name):
remote_file.close()
def delete(self, type, name):
- self.client.remove(filename = self.__build_fn(name))
+ self.client.remove(self.__build_fn(name))
def stat(self, type, name):
def stat(self, type, name):
- stat = self.client.stat(filename = self.__build_fn(name))
- return {'size': stat.st_size}
+ try:
+ stat = self.client.stat(self.__build_fn(name))
+ return {'size': stat.st_size}
+ except IOError:
+ raise NotFoundError
def close(self):
"""connection has to be explicitly closed, otherwise
def close(self):
"""connection has to be explicitly closed, otherwise