summaryrefslogtreecommitdiff
path: root/addons/document/ftpserver
diff options
context:
space:
mode:
authorFabien Pinckaers <fp@tinyerp.com>2008-10-28 21:57:46 +0100
committerFabien Pinckaers <fp@tinyerp.com>2008-10-28 21:57:46 +0100
commit19df0c75aacba17dc8cea288f780bd0e85cd039b (patch)
tree9fb1ad0a33c027788d1267fef49ad9ff2ec5eb49 /addons/document/ftpserver
parentd4d04d9d2cde46f5cf731e064a29d39d4282946f (diff)
parentb7a4dffa63a44a160ca05d1fc7f412dbb47cab90 (diff)
improvement
bzr revid: fp@tinyerp.com-20081028205746-uyukxvtprkmte8xi
Diffstat (limited to 'addons/document/ftpserver')
-rw-r--r--addons/document/ftpserver/abstracted_fs.py71
1 files changed, 47 insertions, 24 deletions
diff --git a/addons/document/ftpserver/abstracted_fs.py b/addons/document/ftpserver/abstracted_fs.py
index b774ea94c17..5e8ff3601f9 100644
--- a/addons/document/ftpserver/abstracted_fs.py
+++ b/addons/document/ftpserver/abstracted_fs.py
@@ -12,6 +12,43 @@ import netsvc
import os
from service import security
+class file_wrapper(StringIO.StringIO):
+ def __init__(self, sstr='', ressource_id=False, dbname=None, uid=1, name=''):
+ StringIO.StringIO.__init__(self, sstr)
+ self.ressource_id = ressource_id
+ self.name = name
+ self.dbname = dbname
+ self.uid = uid
+ def close(self, *args, **kwargs):
+ db,pool = pooler.get_db_and_pool(self.dbname)
+ cr = db.cursor()
+ uid =self.uid
+ val = self.getvalue()
+ val2 = {
+ 'datas': base64.encodestring(val),
+ 'file_size': len(val),
+ }
+ pool.get('ir.attachment').write(cr, uid, [self.ressource_id], val2)
+ cr.commit()
+ StringIO.StringIO.close(self, *args, **kwargs)
+
+class content_wrapper(StringIO.StringIO):
+ def __init__(self, dbname, uid, pool, node, name=''):
+ StringIO.StringIO.__init__(self, '')
+ self.dbname = dbname
+ self.uid = uid
+ self.node = node
+ self.pool = pool
+ self.name = name
+ def close(self, *args, **kwargs):
+ db,pool = pooler.get_db_and_pool(self.dbname)
+ cr = db.cursor()
+ getattr(self.pool.get('document.directory.content'), 'process_write_'+self.node.content.extension[1:])(cr, self.uid, self.node, self.getvalue())
+ StringIO.StringIO.close(self, *args, **kwargs)
+ cr.commit()
+ cr.close()
+
+
class abstracted_fs:
"""A class used to interact with the file system, providing a high
level, cross-platform interface compatible with both Windows and
@@ -114,31 +151,17 @@ class abstracted_fs:
# Ok
def create(self, node, objname, mode):
+ cr = node.cr
+ uid = node.uid
+ pool = pooler.get_pool(cr.dbname)
+ child = node.child(objname)
+ if child:
+ if child.type in ('collection','database'):
+ raise OSError(1, 'Operation not permited.')
+ if child.type=='content':
+ s = content_wrapper(cr.dbname, uid, pool, child)
+ return s
try:
- class file_wrapper(StringIO.StringIO):
- def __init__(self, sstr='', ressource_id=False, dbname=None, uid=1, name=''):
- StringIO.StringIO.__init__(self, sstr)
- self.ressource_id = ressource_id
- self.name = name
- self.dbname = dbname
- self.uid = uid
- def close(self, *args, **kwargs):
- db,pool = pooler.get_db_and_pool(self.dbname)
- cr = db.cursor()
- uid =self.uid
- val = self.getvalue()
- val2 = {
- 'datas': base64.encodestring(val),
- 'file_size': len(val),
- }
- pool.get('ir.attachment').write(cr, uid, [self.ressource_id], val2)
- cr.commit()
- StringIO.StringIO.close(self, *args, **kwargs)
-
- cr = node.cr
- uid = node.uid
- pool = pooler.get_pool(cr.dbname)
-
fobj = pool.get('ir.attachment')
ext = objname.find('.') >0 and objname.split('.')[1] or False