Document ftp: improve exception handling, size may return 404
[odoo/odoo.git] / addons / document_ftp / ftpserver / abstracted_fs.py
index 565f003..ddd34e2 100644 (file)
@@ -150,6 +150,7 @@ class abstracted_fs(object):
                     raise OSError(1, 'Operation not permited.')
 
                 ret = child.open_data(cr, mode)
+                cr.commit()
                 return ret
         except EnvironmentError:
             raise
@@ -159,7 +160,11 @@ class abstracted_fs(object):
 
         try:
             child = node.create_child(cr, objname, data=None)
-            return child.open_data(cr, mode)
+            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.')
@@ -169,7 +174,11 @@ class abstracted_fs(object):
             raise OSError(1, 'Operation not permited.')
         # Reading operation
         cr, node, rem = datacr
-        res = node.open_data(cr, mode)
+        try:
+            res = node.open_data(cr, mode)
+            cr.commit()
+        except TypeError, e:
+            raise IOError(errno.EINVAL, "No data")
         return res
 
     # ok, but need test more
@@ -425,9 +434,9 @@ 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].content_length or 0L
+            return datacr[1].get_data_len(datacr[0]) or 0L
         return 0L
 
     # Ok