From 335cbb58f1681268eb61a04205b6a18f09f0a03a Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 20 Sep 2008 21:18:48 -0400 Subject: jquery now optional --- debug_toolbar/middleware.py | 6 +++++- debug_toolbar/templates/debug_toolbar/base.html | 1 - debug_toolbar/toolbar/loader.py | 3 +-- 3 files changed, 6 insertions(+), 4 deletions(-) (limited to 'debug_toolbar') diff --git a/debug_toolbar/middleware.py b/debug_toolbar/middleware.py index 9c8581c..bb8dbbc 100644 --- a/debug_toolbar/middleware.py +++ b/debug_toolbar/middleware.py @@ -12,6 +12,7 @@ _HTML_TYPES = ('text/html', 'application/xhtml+xml') _END_HEAD_RE = re.compile(r'', re.IGNORECASE) _START_BODY_RE = re.compile(r'
', re.IGNORECASE) _END_BODY_RE = re.compile(r'', re.IGNORECASE) +_CONTAINS_JQUERY_RE = re.compile("src=(?:(\"(.*?)jquery(.*?)\.js\")|('(.*?)jquery(.*?)\.js'))", re.IGNORECASE) class DebugToolbarMiddleware(object): """ @@ -53,8 +54,11 @@ class DebugToolbarMiddleware(object): return response if self.show_toolbar(request): if response['Content-Type'].split(';')[0] in _HTML_TYPES: + script_loc = request.META.get('SCRIPT_NAME', '') # Saving this here in case we ever need to inject into #response.content = _END_HEAD_RE.sub(smart_str(self.debug_toolbar.render_styles() + "%s" % match.group()), response.content) response.content = _START_BODY_RE.sub(smart_str('' + self.debug_toolbar.render_toolbar()), response.content) - response.content = _END_BODY_RE.sub(smart_str(''), response.content) + if not _CONTAINS_JQUERY_RE.search(response.content): + response.content = _END_BODY_RE.sub(smart_str('' % script_loc), response.content) + response.content = _END_BODY_RE.sub(smart_str('', re.IGNORECASE) _END_BODY_RE = re.compile(r'' + self.debug_toolbar.render_toolbar()), response.content) - if not _CONTAINS_JQUERY_RE.search(response.content): - response.content = _END_BODY_RE.sub(smart_str('' % script_loc), response.content) return response diff --git a/debug_toolbar/templates/debug_toolbar/base.html b/debug_toolbar/templates/debug_toolbar/base.html index e1d66c5..ba13294 100644 --- a/debug_toolbar/templates/debug_toolbar/base.html +++ b/debug_toolbar/templates/debug_toolbar/base.html @@ -1,4 +1,3 @@ - diff --git a/debug_toolbar/toolbar/loader.py b/debug_toolbar/toolbar/loader.py index 935f45c..f45cbda 100644 --- a/debug_toolbar/toolbar/loader.py +++ b/debug_toolbar/toolbar/loader.py @@ -59,6 +59,5 @@ class DebugToolbar(object): Renders the overall Toolbar with panels inside. """ return render_to_string('debug_toolbar/base.html', { - 'panels': self.panels, - 'BASE_URL': self.request.META.get('SCRIPT_NAME', '') + 'panels': self.panels }) -- cgit v1.2.3 From 54c81b918db04b62a55f810d891de9dd71b57ab9 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 21 Sep 2008 11:56:43 -0400 Subject: pluralize query correctly, stolen from swillison --- debug_toolbar/panels/sql.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'debug_toolbar') diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py index 4b059ac..fd08395 100644 --- a/debug_toolbar/panels/sql.py +++ b/debug_toolbar/panels/sql.py @@ -39,7 +39,11 @@ class SQLDebugPanel(DebugPanel): def title(self): self._sql_time = sum(map(lambda q: float(q['time']) * 1000, connection.queries)) - return '%d SQL Queries (%.2fms)' % (len(connection.queries), self._sql_time) + return '%d SQL Quer%s (%.2fms)' % ( + len(connection.queries), + len(connection.queries) == 1 and 'y' or 'ies', + self._sql_time + ) def url(self): return '' -- cgit v1.2.3 From 9a7fe9e528c72d39efb1954275e1e588b2bb541c Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 21 Sep 2008 12:19:30 -0400 Subject: made jquery really optional, also switched to using google to serve jquery --- debug_toolbar/middleware.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'debug_toolbar') diff --git a/debug_toolbar/middleware.py b/debug_toolbar/middleware.py index bb8dbbc..c17c424 100644 --- a/debug_toolbar/middleware.py +++ b/debug_toolbar/middleware.py @@ -12,7 +12,16 @@ _HTML_TYPES = ('text/html', 'application/xhtml+xml') _END_HEAD_RE = re.compile(r'', re.IGNORECASE) _START_BODY_RE = re.compile(r'
', re.IGNORECASE) -_CONTAINS_JQUERY_RE = re.compile("src=(?:(\"(.*?)jquery(.*?)\.js\")|('(.*?)jquery(.*?)\.js'))", re.IGNORECASE) + + +_JQUERY_OPTIONAL = """ + +""" class DebugToolbarMiddleware(object): """ @@ -58,7 +67,6 @@ class DebugToolbarMiddleware(object): # Saving this here in case we ever need to inject into
#response.content = _END_HEAD_RE.sub(smart_str(self.debug_toolbar.render_styles() + "%s" % match.group()), response.content) response.content = _START_BODY_RE.sub(smart_str('
' % script_loc), response.content) + response.content = _END_BODY_RE.sub(smart_str('%s' % _JQUERY_OPTIONAL), response.content) response.content = _END_BODY_RE.sub(smart_str('' % script_loc), response.content) return response -- cgit v1.2.3 From c70df302e1564a7f7fe7883d3e042419ece1d9e6 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 27 Sep 2008 15:50:47 -0400 Subject: added logger panel --- debug_toolbar/media/toolbar.css | 2 +- debug_toolbar/panels/logger.py | 73 ++++++++++++++++++++++ .../templates/debug_toolbar/panels/logger.html | 26 ++++++++ debug_toolbar/toolbar/loader.py | 1 + 4 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 debug_toolbar/panels/logger.py create mode 100644 debug_toolbar/templates/debug_toolbar/panels/logger.html (limited to 'debug_toolbar') diff --git a/debug_toolbar/media/toolbar.css b/debug_toolbar/media/toolbar.css index 43ac588..bad28c5 100644 --- a/debug_toolbar/media/toolbar.css +++ b/debug_toolbar/media/toolbar.css @@ -22,7 +22,7 @@ margin: 0; padding: 0; line-height: 30px; - padding: 8px 10px 9px; + padding: 8px 9px 9px; position: relative; width: auto; } diff --git a/debug_toolbar/panels/logger.py b/debug_toolbar/panels/logger.py new file mode 100644 index 0000000..e3fd21e --- /dev/null +++ b/debug_toolbar/panels/logger.py @@ -0,0 +1,73 @@ +import datetime +import logging + +try: + import threading +except ImportError: + threading = None + +from django.template.loader import render_to_string + +from debug_toolbar.panels import DebugPanel + +class ThreadTrackingHandler(logging.Handler): + def __init__(self): + if threading is None: + raise NotImplementedError("threading module is not available, \ + the logging panel cannot be used without it") + logging.Handler.__init__(self) + self.records = {} # a dictionary that maps threads to log records + + def emit(self, record): + self.get_records().append(record) + + def get_records(self, thread=None): + """ + Returns a list of records for the provided thread, of if none is provided, + returns a list for the current thread. + """ + if thread is None: + thread = threading.currentThread() + if thread not in self.records: + self.records[thread] = [] + return self.records[thread] + + def clear_records(self, thread=None): + if thread is None: + thread = threading.currentThread() + if thread in self.records: + del self.records[thread] + +handler = ThreadTrackingHandler() +logging.root.setLevel(logging.NOTSET) +logging.root.addHandler(handler) + +class LoggingPanel(DebugPanel): + name = 'Logging' + has_content = True + + def process_request(self, request): + handler.clear_records() + + def get_and_delete(self): + records = handler.get_records() + handler.clear_records() + return records + + def title(self): + return "Logging (%s message%s)" % (len(handler.get_records()), (len(handler.get_records()) == 1) and '' or 's') + + def url(self): + return '' + + def content(self): + records = [] + for record in self.get_and_delete(): + records.append({ + 'message': record.getMessage(), + 'time': datetime.datetime.fromtimestamp(record.created), + 'level': record.levelname, + 'file': record.pathname, + 'line': record.lineno, + }) + return render_to_string('debug_toolbar/panels/logger.html', {'records': records}) diff --git a/debug_toolbar/templates/debug_toolbar/panels/logger.html b/debug_toolbar/templates/debug_toolbar/panels/logger.html new file mode 100644 index 0000000..93443be --- /dev/null +++ b/debug_toolbar/templates/debug_toolbar/panels/logger.html @@ -0,0 +1,26 @@ +
+{% if records %} +
| Level | +Time | +Message | +Location | +
|---|---|---|---|
| {{ record.level }} | +{{ record.time|date:"h:i:s m/d/Y" }} | +{{ record.message }} | +{{ record.file }}:{{ record.line }} | +
+{% else %} +
No messages logged.
+{% endif %} + diff --git a/debug_toolbar/toolbar/loader.py b/debug_toolbar/toolbar/loader.py index 0ac9096..e2c9793 100644 --- a/debug_toolbar/toolbar/loader.py +++ b/debug_toolbar/toolbar/loader.py @@ -17,6 +17,7 @@ class DebugToolbar(object): 'debug_toolbar.panels.sql.SQLDebugPanel', 'debug_toolbar.panels.cache.CacheDebugPanel', 'debug_toolbar.panels.template.TemplateDebugPanel', + 'debug_toolbar.panels.logger.LoggingPanel', ) self.load_panels() -- cgit v1.2.3