better handling of uploads in hypermedia.py
This commit is contained in:
1 parent
9a6f0b59ad
commit
1606c938a7
3 files changed
+21
-12
No files matched your search
@@ -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
|
||||||
@@ -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
@@ -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)
|
||||||
|
|||||||
Reference in new issue
Block a user