def render_summary(self, include_title=True, request=None): """Render the traceback for the interactive console.""" title = '' frames = [] classes = ['traceback'] if not self.frames: classes.append('noframe-traceback') if include_title: if self.is_syntax_error: title = text_('Syntax Error') else: title = text_('Traceback <em>(most recent call last)</em>:') for frame in self.frames: frames.append( text_('<li%s>%s') % (frame.info and text_(' title="%s"' % escape(frame.info)) or text_(''), frame.render())) if self.is_syntax_error: description_wrapper = text_('<pre class=syntaxerror>%s</pre>') else: description_wrapper = text_('<blockquote>%s</blockquote>') vars = { 'classes': text_(' '.join(classes)), 'title': title and text_('<h3>%s</h3>' % title) or text_(''), 'frames': text_('\n'.join(frames)), 'description': description_wrapper % escape(self.exception), } return render( 'pyramid_debugtoolbar:templates/exception_summary.dbtmako', vars, request=request)
def process_response(self, response): if self.has_content: traceback = self.request.pdbt_tb exc = escape(traceback.exception) summary = Traceback.render_summary(traceback, include_title=False, request=self.request) token = self.request.registry.pdtb_token url = '' # self.request.route_url(EXC_ROUTE_NAME, _query=qs) evalex = self.exc_history.eval_exc self.data = { 'evalex': evalex and 'true' or 'false', 'console': 'false', 'lodgeit_url': None, 'title': exc, 'exception': exc, 'exception_type': escape(traceback.exception_type), 'summary': summary, 'plaintext': traceback.plaintext, 'plaintext_cs': re.sub('-{2,}', '-', traceback.plaintext), 'traceback_id': traceback.id, 'token': token, 'url': url, }
def render_full(self, request, lodgeit_url=None): """Render the Full HTML page with the traceback info.""" static_path = request.static_url(STATIC_PATH) root_path = request.route_url(ROOT_ROUTE_NAME) exc = escape(self.exception) summary = self.render_summary(include_title=False, request=request) qs = {'token': request.exc_history.token, 'tb': str(self.id)} url = request.route_url(EXC_ROUTE_NAME, _query=qs) evalex = request.exc_history.eval_exc vars = { 'evalex': evalex and 'true' or 'false', 'console': 'false', 'lodgeit_url': escape(lodgeit_url), 'title': exc, 'exception': exc, 'exception_type': escape(self.exception_type), 'summary': summary, 'plaintext': self.plaintext, 'plaintext_cs': re.sub('-{2,}', '-', self.plaintext), 'traceback_id': self.id, 'static_path': static_path, 'token': request.exc_history.token, 'root_path': root_path, 'url': url, } return render('pyramid_debugtoolbar:templates/exception.dbtmako', vars, request=request)
def render_summary(self, include_title=True, request=None): """Render the traceback for the interactive console.""" title = '' frames = [] classes = ['traceback'] if not self.frames: classes.append('noframe-traceback') if include_title: if self.is_syntax_error: title = text_('Syntax Error') else: title = text_('Traceback <em>(most recent call last)</em>:') for frame in self.frames: frames.append( text_('<li%s>%s') % ( frame.info and text_(' title="%s"' % escape(frame.info)) or text_(''), frame.render() )) if self.is_syntax_error: description_wrapper = '<pre class=syntaxerror>%s</pre>' else: description_wrapper = '<blockquote>%s</blockquote>' vars = { 'classes': text_(' '.join(classes)), 'title': title and text_('<h3>%s</h3>' % title) or text_(''), 'frames': text_('\n'.join(frames)), 'description': text_(description_wrapper % escape(self.exception)), } return render('pyramid_debugtoolbar:templates/exception_summary.mako', vars, request=request)
def render(self): """Render a single frame in a traceback.""" return FRAME_HTML % { 'id': self.id, 'filename': escape(self.filename), 'lineno': self.lineno, 'function_name': escape(self.function_name), 'current_line': escape(self.current_line.strip()) }
def render_object_dump(self, items, title, repr=None): html_items = [] for key, value in items: html_items.append('<tr><th>%s<td><pre class=repr>%s</pre>' % (escape(key), value)) if not html_items: html_items.append('<tr><td><em>Nothing</em>') return OBJECT_DUMP_HTML % { 'title': escape(title), 'repr': repr and '<pre class=repr>%s</pre>' % repr or '', 'items': '\n'.join(html_items) }
def fallback_repr(self): try: info = ''.join(format_exception_only(*sys.exc_info()[:2])) except Exception: # pragma: no cover info = '?' return u'<span class="brokenrepr"><broken repr (%s)>' \ u'</span>' % escape(info.decode('utf-8', 'ignore').strip())
def fallback_repr(self): try: info = ''.join(format_exception_only(*sys.exc_info()[:2])) except Exception: # pragma: no cover info = '?' return text_('<span class="brokenrepr"><broken repr (%s)>' '</span>' % escape(text_(info, 'utf-8', 'ignore').strip()))
def py3_text_repr(self, obj, limit=70): buf = ['<span class="string">'] escaped = escape(obj) a = repr(escaped[:limit]) b = repr(escaped[limit:]) if b != "''": buf.extend((a[:-1], '<span class="extended">', b[1:], '</span>')) else: buf.append(a) buf.append('</span>') return _add_subclass_info(text_(''.join(buf)), obj, text_type)
def process_response(self, response): self.traceback = traceback = getattr(self.request.debug_toolbar, 'traceback', None) if self.traceback is not None: exc = escape(traceback.exception) evalex = self.request.registry.pdtb_eval_exc self.data = { 'evalex': evalex and 'true' or 'false', 'console': 'false', 'lodgeit_url': None, 'title': exc, 'exception': exc, 'exception_type': escape(traceback.exception_type), 'plaintext': traceback.plaintext, 'plaintext_cs': re.sub('-{2,}', '-', traceback.plaintext), 'pdtb_token': self.request.registry.pdtb_token, 'request_id': self.request.pdtb_id, } # stop hanging onto the request after the response is processed del self.request
def process_response(self, response): self.traceback = traceback = getattr( self.request.debug_toolbar, 'traceback', None) if self.traceback is not None: exc = escape(traceback.exception) evalex = self.request.registry.pdtb_eval_exc self.data = { 'evalex': evalex and 'true' or 'false', 'console': 'false', 'lodgeit_url': None, 'title': exc, 'exception': exc, 'exception_type': escape(traceback.exception_type), 'plaintext': traceback.plaintext, 'plaintext_cs': re.sub('-{2,}', '-', traceback.plaintext), 'pdtb_token': self.request.registry.pdtb_token, 'request_id': self.request.pdtb_id, } # stop hanging onto the request after the response is processed del self.request
def py2_string_repr(self, obj, limit=70): buf = ['<span class="string">'] escaped = escape(obj) a = repr(escaped[:limit]) b = repr(escaped[limit:]) if isinstance(obj, text_type): buf.append('u') a = a[1:] b = b[1:] if b != "''": buf.extend((a[:-1], '<span class="extended">', b[1:], '</span>')) else: buf.append(a) buf.append('</span>') return _add_subclass_info(text_('').join(buf), obj, (str, unicode))
def process_response(self, response): self.traceback = traceback = getattr(self.request, 'pdbt_tb', None) if self.traceback is not None: exc = escape(traceback.exception) token = self.request.registry.pdtb_token url = '' # self.request.route_url(EXC_ROUTE_NAME, _query=qs) evalex = self.exc_history.eval_exc self.data = { 'evalex': evalex and 'true' or 'false', 'console': 'false', 'lodgeit_url': None, 'title': exc, 'exception': exc, 'exception_type': escape(traceback.exception_type), 'plaintext': traceback.plaintext, 'plaintext_cs': re.sub('-{2,}', '-', traceback.plaintext), 'traceback_id': traceback.id, 'token': token, 'url': url, } # stop hanging onto the request after the response is processed del self.request
def test_escape(self): from pyramid_debugtoolbar.utils import escape class Foo(str): def __html__(self): return text_(self) assert escape(None) == '' assert escape(42) == '42' assert escape('<>') == '<>' assert escape('"foo"') == '"foo"' assert escape('"foo"', True) == '"foo"' assert escape(Foo('<foo>')) == '<foo>'
def test_escape(self): from pyramid_debugtoolbar.utils import escape class Foo(str): def __html__(self): return text_(self) assert escape(None) == "" assert escape(42) == "42" assert escape("<>") == "<>" assert escape('"foo"') == '"foo"' assert escape('"foo"', True) == ""foo"" assert escape(Foo("<foo>")) == "<foo>"
def write(self, x): self._write(escape(x))
def render(self): return SOURCE_LINE_HTML % { 'classes': text_(' '.join(self.classes)), 'lineno': self.lineno, 'code': escape(self.code) }
def object_repr(self, obj): return text_('<span class="object">%s</span>' % escape(text_(repr(obj), 'utf-8', 'replace')))
def writelines(self, x): self._write(escape(''.join(x)))
def object_repr(self, obj): return u'<span class="object">%s</span>' % \ escape(repr(obj).decode('utf-8', 'replace'))