Document ftp: improve exception handling, size may return 404

bzr revid: p_christ@hol.gr-20100713205418-8oe6svsdvw2yy4jn
This commit is contained in:
P. Christeas 2010-07-13 23:54:18 +03:00
parent 766fd336d4
commit a47be2ef0d
2 changed files with 14 additions and 6 deletions

View File

@ -163,6 +163,8 @@ class abstracted_fs(object):
ret = child.open_data(cr, mode)
cr.commit()
return ret
except EnvironmentError:
raise
except Exception,e:
self._log.exception('Cannot create item %s at node %s', objname, repr(node))
raise OSError(1, 'Operation not permited.')
@ -432,7 +434,7 @@ class abstracted_fs(object):
def getsize(self, datacr):
"""Return the size of the specified file in bytes."""
if not (datacr and datacr[1]):
return 0L
raise IOError(errno.ENOENT, "No such file or directory")
if datacr[1].type in ('file', 'content'):
return datacr[1].get_data_len(datacr[0]) or 0L
return 0L

View File

@ -2565,9 +2565,12 @@ class FTPHandler(asynchat.async_chat):
# return
size = self.run_as_current_user(self.fs.getsize, datacr)
except EnvironmentError, err:
why = _strerror(err)
why = err.strerror
self.log('FAIL SIZE "%s". %s.' %(line, why))
self.respond('550 %s.' %why)
if err.errno == errno.ENOENT:
self.respond("404 %s." % why)
else:
self.respond('550 %s.' % why)
else:
self.respond("213 %s" %size)
self.log('OK SIZE "%s".' %line)
@ -2640,10 +2643,13 @@ class FTPHandler(asynchat.async_chat):
try:
datacr = self.fs.get_crdata(line, mode='delete')
self.run_as_current_user(self.fs.remove, datacr)
except OSError, err:
why = _strerror(err)
except EnvironmentError, err:
why = err.strerror
self.log('FAIL DELE "%s". %s.' %(line, why))
self.respond('550 %s.' %why)
if err.errno == errno.ENOENT:
self.respond('404 %s.' % why)
else:
self.respond('550 %s.' %why)
else:
self.log('OK DELE "%s".' %line)
self.respond("250 File removed.")