diff --git a/VERSION b/VERSION index 3adc1820..9af8bbcc 100644 --- a/VERSION +++ b/VERSION @@ -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 diff --git a/gluon/contrib/hypermedia.py b/gluon/contrib/hypermedia.py index 81003877..a0cf7a85 100644 --- a/gluon/contrib/hypermedia.py +++ b/gluon/contrib/hypermedia.py @@ -41,21 +41,26 @@ class Collection(object): self.extensions = extensions self.compact = compact - def row2data(self,table,row): + def row2data(self,table,row,text=False): """ converts a DAL Row object into a collection.item """ data = [] if self.compact: for fieldname in (self.table_policy.get('fields',table.fields)): 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: data.append(row[field.name]) else: for fieldname in (self.table_policy.get('fields',table.fields)): 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: - 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 def row2links(self,table,row): @@ -205,6 +210,7 @@ class Collection(object): r['items_found'] = db(query).count() delta = limitby[1]-limitby[0]-1 r['links'] = self.row2links(table,None) if self.compact else [] + text = r['items_found']<2 for row in rows[:delta]: id = row.id for name in ('slug','fullname','title','name'): @@ -215,11 +221,11 @@ class Collection(object): else: href = URL(args=(tablename,id),scheme=True) if self.compact: - items.append(self.row2data(table,row)) + items.append(self.row2data(table,row,text)) else: items.append({ 'href':href, - 'data':self.row2data(table,row), + 'data':self.row2data(table,row,text), 'links':self.row2links(table,row) }); if self.extensions and len(rows)>delta: diff --git a/gluon/dal.py b/gluon/dal.py index ac9de438..0dcd6fee 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -9223,13 +9223,15 @@ class Table(object): for field in self: if field.type == 'upload' and field.name in fields: 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'): new_name = field.store(value.file, filename=value.filename) - elif (isinstance(value,dict) and - 'data' in value and 'filename' in value): - stream = StringIO.StringIO(value['data']) - new_name = field.store(stream, filename=value['filename']) + elif isinstance(value,dict): + if 'data' in value and 'filename' in value: + stream = StringIO.StringIO(value['data']) + new_name = field.store(stream, filename=value['filename']) + else: + new_name = None elif hasattr(value, 'read') and hasattr(value, 'name'): new_name = field.store(value, filename=value.name) else: @@ -10738,6 +10740,7 @@ class Set(object): response.updated = None else: 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) if not fields: raise SyntaxError("No fields to update") ret = self.db._adapter.update(tablename, self.query, fields)