better handling of uploads in hypermedia.py

This commit is contained in:
mdipierro committed 2014-07-03 11:56:15 -05:00
1 parent 9a6f0b59ad
commit 1606c938a7
3 files changed
+21 -12

No files matched your search

+1 -1
View File
@@ -1 +1 @@
Version 2.9.5-trunk+timestamp.2014.07.02.18.33.22 Version 2.9.5-trunk+timestamp.2014.07.03.11.54.34
+12 -6
View File
@@ -41,21 +41,26 @@ class Collection(object):
self.extensions = extensions self.extensions = extensions
self.compact = compact self.compact = compact
def row2data(self,table,row): def row2data(self,table,row,text=False):
""" converts a DAL Row object into a collection.item """ """ converts a DAL Row object into a collection.item """
data = [] data = []
if self.compact: if self.compact:
for fieldname in (self.table_policy.get('fields',table.fields)): for fieldname in (self.table_policy.get('fields',table.fields)):
field = table[fieldname] field = table[fieldname]
if not (field.type.startswith('reference ') or if not ((field.type=='text' and text==False) or
field.type=='blob' or
field.type.startswith('reference ') or
field.type.startswith('list:reference ')) and field.name in row: field.type.startswith('list:reference ')) and field.name in row:
data.append(row[field.name]) data.append(row[field.name])
else: else:
for fieldname in (self.table_policy.get('fields',table.fields)): for fieldname in (self.table_policy.get('fields',table.fields)):
field = table[fieldname] field = table[fieldname]
if not (field.type.startswith('reference ') or if not ((field.type=='text' and text==False) or
field.type=='blob' or
field.type.startswith('reference ') or
field.type.startswith('list:reference ')) and field.name in row: field.type.startswith('list:reference ')) and field.name in row:
data.append({'name':field.name,'value':row[field.name],'prompt':field.label}) data.append({'name':field.name,'value':row[field.name],
'prompt':field.label, 'type':field.type})
return data return data
def row2links(self,table,row): def row2links(self,table,row):
@@ -205,6 +210,7 @@ class Collection(object):
r['items_found'] = db(query).count() r['items_found'] = db(query).count()
delta = limitby[1]-limitby[0]-1 delta = limitby[1]-limitby[0]-1
r['links'] = self.row2links(table,None) if self.compact else [] r['links'] = self.row2links(table,None) if self.compact else []
text = r['items_found']<2
for row in rows[:delta]: for row in rows[:delta]:
id = row.id id = row.id
for name in ('slug','fullname','title','name'): for name in ('slug','fullname','title','name'):
@@ -215,11 +221,11 @@ class Collection(object):
else: else:
href = URL(args=(tablename,id),scheme=True) href = URL(args=(tablename,id),scheme=True)
if self.compact: if self.compact:
items.append(self.row2data(table,row)) items.append(self.row2data(table,row,text))
else: else:
items.append({ items.append({
'href':href, 'href':href,
'data':self.row2data(table,row), 'data':self.row2data(table,row,text),
'links':self.row2links(table,row) 'links':self.row2links(table,row)
}); });
if self.extensions and len(rows)>delta: if self.extensions and len(rows)>delta:
+8 -5
View File
@@ -9223,13 +9223,15 @@ class Table(object):
for field in self: for field in self:
if field.type == 'upload' and field.name in fields: if field.type == 'upload' and field.name in fields:
value = fields[field.name] value = fields[field.name]
if not value in (None,{}) and not isinstance(value, str): if not (value is None or isinstance(value, str)):
if hasattr(value, 'file') and hasattr(value, 'filename'): if hasattr(value, 'file') and hasattr(value, 'filename'):
new_name = field.store(value.file, filename=value.filename) new_name = field.store(value.file, filename=value.filename)
elif (isinstance(value,dict) and elif isinstance(value,dict):
'data' in value and 'filename' in value): if 'data' in value and 'filename' in value:
stream = StringIO.StringIO(value['data']) stream = StringIO.StringIO(value['data'])
new_name = field.store(stream, filename=value['filename']) new_name = field.store(stream, filename=value['filename'])
else:
new_name = None
elif hasattr(value, 'read') and hasattr(value, 'name'): elif hasattr(value, 'read') and hasattr(value, 'name'):
new_name = field.store(value, filename=value.name) new_name = field.store(value, filename=value.name)
else: else:
@@ -10738,6 +10740,7 @@ class Set(object):
response.updated = None response.updated = None
else: else:
if not any(f(self, new_fields) for f in table._before_update): if not any(f(self, new_fields) for f in table._before_update):
table._attempt_upload(new_fields)
fields = table._listify(new_fields, update=True) fields = table._listify(new_fields, update=True)
if not fields: raise SyntaxError("No fields to update") if not fields: raise SyntaxError("No fields to update")
ret = self.db._adapter.update(tablename, self.query, fields) ret = self.db._adapter.update(tablename, self.query, fields)