moved toolbar logic to dal, thanks Niphlod
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.2.1 (2012-10-29 18:11:45) stable
|
Version 2.2.1 (2012-10-29 18:13:39) stable
|
||||||
|
|||||||
+32
-2
@@ -180,7 +180,7 @@ if PYTHON_VERSION == 2:
|
|||||||
bytes, unicode = str, unicode
|
bytes, unicode = str, unicode
|
||||||
else:
|
else:
|
||||||
import pickle
|
import pickle
|
||||||
from io import StringIO as StringIO
|
from io import StringIO as StringIO
|
||||||
import copyreg
|
import copyreg
|
||||||
long = int
|
long = int
|
||||||
hashlib_md5 = lambda s: hashlib.md5(bytes(s,'utf8'))
|
hashlib_md5 = lambda s: hashlib.md5(bytes(s,'utf8'))
|
||||||
@@ -256,6 +256,7 @@ REGEX_STORE_PATTERN = re.compile('\.(?P<e>\w{1,5})$')
|
|||||||
REGEX_QUOTES = re.compile("'[^']*'")
|
REGEX_QUOTES = re.compile("'[^']*'")
|
||||||
REGEX_ALPHANUMERIC = re.compile('^[0-9a-zA-Z]\w*$')
|
REGEX_ALPHANUMERIC = re.compile('^[0-9a-zA-Z]\w*$')
|
||||||
REGEX_PASSWORD = re.compile('\://([^:@]*)\:')
|
REGEX_PASSWORD = re.compile('\://([^:@]*)\:')
|
||||||
|
REGEX_NOPASSWD = re.compile('(?<=\:)([^:@/]+)(?=@.+)')
|
||||||
|
|
||||||
# list of drivers will be built on the fly
|
# list of drivers will be built on the fly
|
||||||
# and lists only what is available
|
# and lists only what is available
|
||||||
@@ -2106,7 +2107,7 @@ class SQLiteAdapter(BaseAdapter):
|
|||||||
dbpath = pjoin(
|
dbpath = pjoin(
|
||||||
self.folder.decode(path_encoding).encode('utf8'), dbpath)
|
self.folder.decode(path_encoding).encode('utf8'), dbpath)
|
||||||
else:
|
else:
|
||||||
dbpath = pjoin(self.folder, dbpath)
|
dbpath = pjoin(self.folder, dbpath)
|
||||||
if not 'check_same_thread' in driver_args:
|
if not 'check_same_thread' in driver_args:
|
||||||
driver_args['check_same_thread'] = False
|
driver_args['check_same_thread'] = False
|
||||||
if not 'detect_types' in driver_args:
|
if not 'detect_types' in driver_args:
|
||||||
@@ -6661,6 +6662,35 @@ class DAL(object):
|
|||||||
"""
|
"""
|
||||||
BaseAdapter.set_folder(folder)
|
BaseAdapter.set_folder(folder)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_instances():
|
||||||
|
"""
|
||||||
|
Returns a dictionary with uri as key with timings and defined tables
|
||||||
|
{'sqlite://storage.sqlite': {
|
||||||
|
'dbstats': [(select auth_user.email from auth_user, 0.02009)],
|
||||||
|
'dbtables': {
|
||||||
|
'defined': ['auth_cas', 'auth_event', 'auth_group',
|
||||||
|
'auth_membership', 'auth_permission', 'auth_user'],
|
||||||
|
'lazy': '[]'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
dbs = getattr(THREAD_LOCAL,'db_instances',{}).items()
|
||||||
|
infos = {}
|
||||||
|
for db_uid, db_group in dbs:
|
||||||
|
for db in db_group:
|
||||||
|
if not db._uri:
|
||||||
|
continue
|
||||||
|
k = REGEX_NOPASSWD.sub('******',db._uri)
|
||||||
|
infos[k] = dict(dbstats = [(row[0], row[1]) for row in db._timings],
|
||||||
|
dbtables = {'defined':
|
||||||
|
sorted(list(set(db.tables) -
|
||||||
|
set(db._LAZY_TABLES.keys()))),
|
||||||
|
'lazy': sorted(db._LAZY_TABLES.keys())}
|
||||||
|
)
|
||||||
|
return infos
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def distributed_transaction_begin(*instances):
|
def distributed_transaction_begin(*instances):
|
||||||
if not instances:
|
if not instances:
|
||||||
|
|||||||
+13
-19
@@ -48,7 +48,6 @@ except ImportError:
|
|||||||
have_minify = False
|
have_minify = False
|
||||||
|
|
||||||
regex_session_id = re.compile('^([\w\-]+/)?[\w\-\.]+$')
|
regex_session_id = re.compile('^([\w\-]+/)?[\w\-\.]+$')
|
||||||
regex_nopasswd = re.compile('(?<=\:)([^:@/]+)(?=@.+)')
|
|
||||||
|
|
||||||
__all__ = ['Request', 'Response', 'Session']
|
__all__ = ['Request', 'Response', 'Session']
|
||||||
|
|
||||||
@@ -127,7 +126,10 @@ class Request(Storage):
|
|||||||
If request comes in over HTTP, redirect it to HTTPS
|
If request comes in over HTTP, redirect it to HTTPS
|
||||||
and secure the session.
|
and secure the session.
|
||||||
"""
|
"""
|
||||||
if not global_settings.cronjob and not self.is_https:
|
cmd_opts = global_settings.cmd_options
|
||||||
|
#checking if this is called within the scheduler or within the shell
|
||||||
|
#in addition to checking if it's not a cronjob
|
||||||
|
if not cmd_opts.shell and not cmd_opts.scheduler and not global_settings.cronjob and not self.is_https:
|
||||||
current.session.forget()
|
current.session.forget()
|
||||||
redirect(URL(scheme='https', args=self.args, vars=self.vars))
|
redirect(URL(scheme='https', args=self.args, vars=self.vars))
|
||||||
|
|
||||||
@@ -434,24 +436,16 @@ class Response(Storage):
|
|||||||
BUTTON = TAG.button
|
BUTTON = TAG.button
|
||||||
admin = URL("admin", "default", "design",
|
admin = URL("admin", "default", "design",
|
||||||
args=current.request.application)
|
args=current.request.application)
|
||||||
from gluon.dal import THREAD_LOCAL
|
from gluon.dal import DAL
|
||||||
dbs = getattr(THREAD_LOCAL,'db_instances',{}).items()
|
|
||||||
dbstats = []
|
dbstats = []
|
||||||
dbtables = {}
|
dbtables = {}
|
||||||
for db_uid, db_group in dbs:
|
infos = DAL.get_instances()
|
||||||
for db in db_group:
|
for k,v in infos.iteritems():
|
||||||
if not db._uri:
|
dbstats.append(TABLE(*[TR(PRE(row[0]),'%.2fms' %
|
||||||
continue
|
(row[1]*1000))
|
||||||
k = regex_nopasswd.sub('******',db._uri)
|
for row in v['dbstats']]))
|
||||||
dbstats.append(TABLE(*[TR(PRE(row[0]),'%.2fms' %
|
dbtables[k] = dict(defined=v['dbtables']['defined'] or '[no defined tables]',
|
||||||
(row[1]*1000)) \
|
lazy=v['dbtables']['lazy'] or '[no lazy tables]')
|
||||||
for row in db._timings]))
|
|
||||||
dbtables[k] = {'defined':
|
|
||||||
sorted(list(set(db.tables) -
|
|
||||||
set(db._LAZY_TABLES.keys()))) or
|
|
||||||
'[no defined tables]',
|
|
||||||
'lazy': sorted(db._LAZY_TABLES.keys()) or
|
|
||||||
'[no lazy tables]'}
|
|
||||||
u = web2py_uuid()
|
u = web2py_uuid()
|
||||||
backtotop = A('Back to top', _href="#totop-%s" % u)
|
backtotop = A('Back to top', _href="#totop-%s" % u)
|
||||||
return DIV(
|
return DIV(
|
||||||
@@ -509,7 +503,7 @@ class Session(Storage):
|
|||||||
request = current.request
|
request = current.request
|
||||||
if response is None:
|
if response is None:
|
||||||
response = current.response
|
response = current.response
|
||||||
if separate == True:
|
if separate is True:
|
||||||
separate = lambda session_name: session_name[-2:]
|
separate = lambda session_name: session_name[-2:]
|
||||||
self._unlock(response)
|
self._unlock(response)
|
||||||
if not masterapp:
|
if not masterapp:
|
||||||
|
|||||||
Reference in New Issue
Block a user