From 8eadfe3d790ff2473dfedd912d654304a179aea3 Mon Sep 17 00:00:00 2001 From: Massimo Date: Thu, 10 Jan 2013 13:01:12 -0600 Subject: [PATCH] fixed issue 1268, better grid search options, thanks Paolo Angulo --- VERSION | 2 +- gluon/globals.py | 6 ++++-- gluon/sqlhtml.py | 32 +++++++++++++++++++++++++------- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/VERSION b/VERSION index 73372cfc..c2bfd314 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.4.1-alpha.2+timestamp.2013.01.09.16.56.34 +Version 2.4.1-alpha.2+timestamp.2013.01.10.12.59.43 diff --git a/gluon/globals.py b/gluon/globals.py index c67348c1..11f3c7e5 100644 --- a/gluon/globals.py +++ b/gluon/globals.py @@ -375,7 +375,7 @@ class Response(Storage): wrapped = streamer(stream, chunk_size=chunk_size) return wrapped - def download(self, request, db, chunk_size=DEFAULT_CHUNK_SIZE, attachment=True): + def download(self, request, db, chunk_size=DEFAULT_CHUNK_SIZE, attachment=True, download_filename=None): """ example of usage in controller:: @@ -403,9 +403,11 @@ class Response(Storage): raise HTTP(404) headers = self.headers headers['Content-Type'] = contenttype(name) + if download_filename == None: + download_filename = filename if attachment: headers['Content-Disposition'] = \ - 'attachment; filename="%s"' % filename.replace('"','\"') + 'attachment; filename="%s"' % download_filename.replace('"','\"') return self.stream(stream, chunk_size=chunk_size, request=request) def json(self, data, default=None): diff --git a/gluon/sqlhtml.py b/gluon/sqlhtml.py index 973185c4..2f73fd6f 100644 --- a/gluon/sqlhtml.py +++ b/gluon/sqlhtml.py @@ -1623,7 +1623,7 @@ class SQLFORM(FORM): 'integer': ['=', '!=', '<', '>', '<=', '>=', 'in', 'not in'], 'double': ['=', '!=', '<', '>', '<=', '>='], 'id': ['=', '!=', '<', '>', '<=', '>=', 'in', 'not in'], - 'reference': ['=', '!=', '<', '>', '<=', '>=', 'in', 'not in'], + 'reference': ['=', '!='], 'boolean': ['=', '!=']} if fields[0]._db._adapter.dbengine == 'google:datastore': search_options['string'] = ['=', '!=', '<', '>', '<=', '>='] @@ -1641,15 +1641,33 @@ class SQLFORM(FORM): field.label, str) and T(field.label) or field.label selectfields.append(OPTION(label, _value=str(field))) operators = SELECT(*[OPTION(T(option), _value=option) for option in options]) + _id = "%s_%s" % (value_id,name) if field.type == 'boolean': + value_input = SQLFORM.widgets.boolean.widget(field,field.default,_id=_id) + elif field.type == 'double': + value_input = SQLFORM.widgets.double.widget(field,field.default,_id=_id) + elif field.type == 'time': + value_input = SQLFORM.widgets.time.widget(field,field.default,_id=_id) + elif field.type == 'date': + value_input = SQLFORM.widgets.date.widget(field,field.default,_id=_id) + elif field.type == 'datetime': + value_input = SQLFORM.widgets.datetime.widget(field,field.default,_id=_id) + elif (field.type.startswith('reference ') or + field.type.startswith('list:reference ')) and \ + hasattr(field.requires,'options'): value_input = SELECT( - OPTION(T("True"), _value="T"), - OPTION(T("False"), _value="F"), - _id="%s_%s" % (value_id,name)) + *[OPTION(v, _value=k) + for k,v in field.requires.options()], + **dict(_id=_id)) + elif field.type == 'integer' or \ + field.type.startswith('reference ') or \ + field.type.startswith('list:integer') or \ + field.type.startswith('list:reference '): + value_input = SQLFORM.widgets.integer.widget(field,field.default,_id=_id) else: - value_input = INPUT(_type='text', - _id="%s_%s" % (value_id,name), - _class=field.type) + value_input = INPUT( + _type='text', _id=_id, _class=field.type) + new_button = INPUT( _type="button", _value=T('New'), _class="btn", _onclick="%s_build_query('new','%s')" % (prefix,field))