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()