diff options
| author | P. Christeas <p_christ@hol.gr> | 2010-07-13 23:54:18 +0300 |
|---|---|---|
| committer | P. Christeas <p_christ@hol.gr> | 2010-07-13 23:54:18 +0300 |
| commit | a47be2ef0d72c5de183b9af1d44f33055c6c2dcc (patch) | |
| tree | 03d0c54e54ed454858e56980e247d579ab16cd3e /addons/document_ftp/ftpserver | |
| parent | 766fd336d4f8f0e17a05741542bf0a6e440e06bc (diff) | |
Document ftp: improve exception handling, size may return 404
bzr revid: p_christ@hol.gr-20100713205418-8oe6svsdvw2yy4jn
Diffstat (limited to 'addons/document_ftp/ftpserver')
| -rw-r--r-- | addons/document_ftp/ftpserver/abstracted_fs.py | 4 | ||||
| -rw-r--r-- | addons/document_ftp/ftpserver/ftpserver.py | 16 |
2 files changed, 14 insertions, 6 deletions
diff --git a/addons/document_ftp/ftpserver/abstracted_fs.py b/addons/document_ftp/ftpserver/abstracted_fs.py index 5e7c8c1b31c..ddd34e2a04d 100644 --- a/addons/document_ftp/ftpserver/abstracted_fs.py +++ b/addons/document_ftp/ftpserver/abstracted_fs.py @@ -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 diff --git a/addons/document_ftp/ftpserver/ftpserver.py b/addons/document_ftp/ftpserver/ftpserver.py index e267216ddec..528ce057ff9 100644 --- a/addons/document_ftp/ftpserver/ftpserver.py +++ b/addons/document_ftp/ftpserver/ftpserver.py @@ -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.") |
