diff --git a/VERSION b/VERSION index 805d0588..d75c30d9 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.7.4-stable+timestamp.2013.10.19.17.40.27 +Version 2.7.4-stable+timestamp.2013.10.20.15.42.03 diff --git a/applications/admin/controllers/appadmin.py b/applications/admin/controllers/appadmin.py index 7a9fb58e..44efa2d5 100644 --- a/applications/admin/controllers/appadmin.py +++ b/applications/admin/controllers/appadmin.py @@ -186,6 +186,10 @@ def select(): import re db = get_database(request) dbname = request.args[0] + try: + is_imap = db._uri.startswith("imap://") + except (KeyError, AttributeError, TypeError): + is_imap = False regex = re.compile('(?P\w+)\.(?P\w+)=(?P\d+)') if len(request.args) > 1 and hasattr(db[request.args[1]], '_primarykey'): regex = re.compile('(?P
\w+)\.(?P\w+)=(?P.+)') @@ -203,7 +207,15 @@ def select(): else: start = 0 nrows = 0 - stop = start + 100 + + step = 100 + fields = [] + + if is_imap: + step = 3 + + stop = start + step + table = None rows = [] orderby = request.vars.orderby @@ -244,12 +256,18 @@ def select(): db(query, ignore_common_filters=True).delete() response.flash = T('%s %%{row} deleted', nrows) nrows = db(query, ignore_common_filters=True).count() + + if is_imap: + fields = [db[table][name] for name in + ("id", "uid", "created", "to", + "sender", "subject")] if orderby: - rows = db(query, ignore_common_filters=True).select(limitby=( - start, stop), orderby=eval_in_global_env(orderby)) + rows = db(query, ignore_common_filters=True).select( + *fields, limitby=(start, stop), + orderby=eval_in_global_env(orderby)) else: rows = db(query, ignore_common_filters=True).select( - limitby=(start, stop)) + *fields, limitby=(start, stop)) except Exception, e: import traceback tb = traceback.format_exc() @@ -278,11 +296,12 @@ def select(): table=table, start=start, stop=stop, + step=step, nrows=nrows, rows=rows, query=request.vars.query, formcsv=formcsv, - tb=tb, + tb=tb ) diff --git a/applications/admin/views/appadmin.html b/applications/admin/views/appadmin.html index 617daeeb..054efd49 100644 --- a/applications/admin/views/appadmin.html +++ b/applications/admin/views/appadmin.html @@ -62,8 +62,8 @@ {{=T('"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN')}}



{{=T("%s selected", nrows)}}

- {{if start>0:}}{{=A(T('previous 100 rows'),_href=URL('select',args=request.args[0],vars=dict(start=start-100)),_class="btn")}}{{pass}} - {{if stop0:}}{{=A(T('previous %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start-step)),_class="btn")}}{{pass}} + {{if stop {{linkto = lambda f, t, r: URL('update', args=[request.args[0], r, f]) if f else "#"}} diff --git a/applications/examples/controllers/appadmin.py b/applications/examples/controllers/appadmin.py index 7a9fb58e..44efa2d5 100644 --- a/applications/examples/controllers/appadmin.py +++ b/applications/examples/controllers/appadmin.py @@ -186,6 +186,10 @@ def select(): import re db = get_database(request) dbname = request.args[0] + try: + is_imap = db._uri.startswith("imap://") + except (KeyError, AttributeError, TypeError): + is_imap = False regex = re.compile('(?P
\w+)\.(?P\w+)=(?P\d+)') if len(request.args) > 1 and hasattr(db[request.args[1]], '_primarykey'): regex = re.compile('(?P
\w+)\.(?P\w+)=(?P.+)') @@ -203,7 +207,15 @@ def select(): else: start = 0 nrows = 0 - stop = start + 100 + + step = 100 + fields = [] + + if is_imap: + step = 3 + + stop = start + step + table = None rows = [] orderby = request.vars.orderby @@ -244,12 +256,18 @@ def select(): db(query, ignore_common_filters=True).delete() response.flash = T('%s %%{row} deleted', nrows) nrows = db(query, ignore_common_filters=True).count() + + if is_imap: + fields = [db[table][name] for name in + ("id", "uid", "created", "to", + "sender", "subject")] if orderby: - rows = db(query, ignore_common_filters=True).select(limitby=( - start, stop), orderby=eval_in_global_env(orderby)) + rows = db(query, ignore_common_filters=True).select( + *fields, limitby=(start, stop), + orderby=eval_in_global_env(orderby)) else: rows = db(query, ignore_common_filters=True).select( - limitby=(start, stop)) + *fields, limitby=(start, stop)) except Exception, e: import traceback tb = traceback.format_exc() @@ -278,11 +296,12 @@ def select(): table=table, start=start, stop=stop, + step=step, nrows=nrows, rows=rows, query=request.vars.query, formcsv=formcsv, - tb=tb, + tb=tb ) diff --git a/applications/examples/views/appadmin.html b/applications/examples/views/appadmin.html index 617daeeb..054efd49 100644 --- a/applications/examples/views/appadmin.html +++ b/applications/examples/views/appadmin.html @@ -62,8 +62,8 @@ {{=T('"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN')}}



{{=T("%s selected", nrows)}}

- {{if start>0:}}{{=A(T('previous 100 rows'),_href=URL('select',args=request.args[0],vars=dict(start=start-100)),_class="btn")}}{{pass}} - {{if stop0:}}{{=A(T('previous %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start-step)),_class="btn")}}{{pass}} + {{if stop {{linkto = lambda f, t, r: URL('update', args=[request.args[0], r, f]) if f else "#"}} diff --git a/applications/welcome/models/db.py b/applications/welcome/models/db.py index 38a1b797..75aac0f0 100644 --- a/applications/welcome/models/db.py +++ b/applications/welcome/models/db.py @@ -28,7 +28,8 @@ response.generic_patterns = ['*'] if request.is_local else [] ## (optional) optimize handling of static files # response.optimize_css = 'concat,minify,inline' # response.optimize_js = 'concat,minify,inline' - +## (optional) static assets folder versioning +# response.static_version = '0.0.0' ######################################################################### ## Here is sample code if you need for ## - email capabilities diff --git a/gluon/dal.py b/gluon/dal.py index 77f4bc43..bd2988ba 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -2248,6 +2248,8 @@ class SQLiteAdapter(BaseAdapter): self.db = db self.dbengine = "sqlite" self.uri = uri + if adapter_args.get('foreign_keys',True) and not after_connection: + after_connection = lambda db: db.execute('PRAGMA foreign_keys=ON;') if do_connect: self.find_driver(adapter_args) self.pool_size = 0 self.folder = folder @@ -2271,7 +2273,7 @@ class SQLiteAdapter(BaseAdapter): if not 'detect_types' in driver_args and do_connect: driver_args['detect_types'] = self.driver.PARSE_DECLTYPES def connector(dbpath=self.dbpath, driver_args=driver_args): - return self.driver.Connection(dbpath, **driver_args) + return self.driver.Connection(dbpath, **driver_args) self.connector = connector if do_connect: self.reconnect()