Commit e8947311 authored by Laurent Peuch's avatar Laurent Peuch
Browse files

[debug-toolbar/display_source_code] add a pyramid view that display syntax...

[debug-toolbar/display_source_code] add a pyramid view that display syntax highlighted python source file

This will be used for tool building for easier debugging.

Closes #17256791
parent be0864a2eec8
......@@ -28,6 +28,8 @@ import warnings
import wsgicors
from cubicweb.cwconfig import CubicWebConfiguration as cwcfg
from cubicweb.pyramid.debug_source_code import debug_display_source_code, DEBUG_DISPLAY_SOURCE_CODE_PATH
from pyramid.config import Configurator
from pyramid.exceptions import ConfigurationError
from pyramid.settings import asbool, aslist
......@@ -109,6 +111,11 @@ def wsgi_application_from_cwconfig(
config.add_route('profile_ping', '_profile/ping')
config.add_route('profile_cnx', '_profile/cnx')
if debugtoolbar:
config.add_route('debug_display_source_code', DEBUG_DISPLAY_SOURCE_CODE_PATH)
config.add_view(debug_display_source_code, route_name='debug_display_source_code')
app = config.make_wsgi_app()
# This replaces completely web/, which is not used by
# cubicweb.pyramid anymore
# copyright 2019 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# contact --
# This file is part of CubicWeb.
# CubicWeb is free software: you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free
# Software Foundation, either version 2.1 of the License, or (at your option)
# any later version.
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
# You should have received a copy of the GNU Lesser General Public License along
# with CubicWeb. If not, see <>.
Debug view for pyramid debug toolbar and others to help development
import os
from pyramid.response import Response
from mako.template import Template
from cubicweb.misc.source_highlight import highlight_html, generate_css, has_pygments
DEBUG_DISPLAY_SOURCE_CODE_PATH = '_debug_display_source_code'
def debug_display_source_code(request):
This view display a python source file content for making debugging easier.
It is only activated on debug mode (-D) for pyramid during development.
It will uses pygment if installed to colorize the source code.
if "file" not in request.params:
return Response('Error: you should have end up on this page following a link in the '
'pyramid debug toolbar with the correct parameters.')
source_code_file = request.params["file"]
if not os.path.exists(source_code_file):
return Response("Error: file '%s' doesn't exist on the filesystem." % source_code_file)
content = open(source_code_file, "r").read()
except Exception as e:
return Response("Error: while opening file '%s' got the error: %s" % (source_code_file, e))
lines = []
line_begin = request.params.get("line", None)
if line_begin:
line_end = request.params.get("end", line_begin)
lines = list(range(int(line_begin), int(line_end) + 1))
this_file_directory = os.path.split(os.path.realpath(__file__))[0]
template_filename = os.path.join(this_file_directory,
html = Template(filename=template_filename).render(
return Response(html)
% if has_pygments:
${highlight_html(content, "python", linenos=True, hl_lines=lines, lineanchors="line")}
% else:
<table class="rawtable">
% for line_number, source_line in enumerate(content.split("\n"), start=1):
<td class="line_number">
% if line_number in lines:
<a class="highlight-line" name="line-${line_number}">
% else:
<a name="line-${line_number}">
% endif
<pre>${source_line.rstrip()} </pre>
% endfor
% endif
h2 {
text-align: center;
width: 100%%;
color: #fefefe;
background-color: #333333;
padding: 10px;
font-family: sans;
margin: 0;
body {
margin: 0;
.highlighttable, .rawtable {
margin: auto;
font-size: larger;
border: 2px solid black;
border-top: 0;
border-bottom: 0;
.rawtable {
padding: 10px;
pre {
margin: 0;
.line_number {
text-align: right;
.rawtable td {
padding: 0;
.hll {
display: block;
.highlight-line > pre {
background-color: #ffffcc;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment