db.table.insert(uploadfield=...), ... can not be file or FieldStorage, issue 570

This commit is contained in:
Massimo Di Pierro
2012-05-02 14:28:13 -05:00
parent 0d04e5f68b
commit 3ca82dae7f
2 changed files with 16 additions and 1 deletions
+1 -1
View File
@@ -1 +1 @@
Version 1.99.7 (2012-05-02 14:11:05) dev
Version 1.99.7 (2012-05-02 14:27:33) dev
+15
View File
@@ -7215,10 +7215,24 @@ class Table(dict):
raise SyntaxError,'Table: missing required field: %s' % ofield.name
return new_fields
def _attempt_upload(self, fields):
for field in self:
if field.type=='upload' and field.name in fields:
value = fields[field.name]
if not isinstance(value,str):
if hasattr(value,'file') and hasattr(value,'filename'):
new_name = field.store(value.file,filename=value.filename)
elif hasattr(value,'read') and hasattr(value,'name'):
new_name = field.store(value,filename=value.name)
else:
raise RuntimeError, "Unable to handle upload"
fields[field.name] = new_name
def _insert(self, **fields):
return self._db._adapter._insert(self,self._listify(fields))
def insert(self, **fields):
self._attempt_upload(fields)
if any(f(fields) for f in self._before_insert): return 0
ret = self._db._adapter.insert(self,self._listify(fields))
ret and [f(fields,ret) for f in self._after_insert]
@@ -8052,6 +8066,7 @@ class Set(object):
def update(self, **update_fields):
tablename = self.db._adapter.get_table(self.query)
table = self.db[tablename]
table._attempt_upload(update_fields)
if any(f(self,update_fields) for f in table._before_update): return 0
fields = table._listify(update_fields,update=True)
if not fields: raise SyntaxError, "No fields to update"