1 | {{extend 'layout.html'}} |
---|
2 | {{block sectionclass}}ticket{{end}} |
---|
3 | <!-- begin "ticket" block --> |
---|
4 | <h2>{{=T('Error ticket')}} for "{{=app}}"</h2> |
---|
5 | <h3>{{=T('Ticket ID')}}</h3> |
---|
6 | <p>{{=ticket}}</p> |
---|
7 | {{if output:}}<h4>{{=output}}</h4>{{pass}} |
---|
8 | <h3>{{=T('Version')}}</h3> |
---|
9 | <table class="versions"> |
---|
10 | <tbody> |
---|
11 | <tr> |
---|
12 | <th>web2py™</th> |
---|
13 | <td>Version {{=myversion}}</td> |
---|
14 | </tr> |
---|
15 | {{if snapshot:}} |
---|
16 | <tr> |
---|
17 | <th>Python</th> |
---|
18 | <td>{{=snapshot.get('pyver','')}}</td> |
---|
19 | </tr> |
---|
20 | {{pass}} |
---|
21 | </tbody> |
---|
22 | </table> |
---|
23 | {{if traceback or code or layer:}} |
---|
24 | <h3>{{=T('Traceback')}}</h3> |
---|
25 | <div class="inspect resp1">{{=traceback}}</div> |
---|
26 | {{if snapshot:}} |
---|
27 | {{try:}} |
---|
28 | <!-- ERROR SNAPSHOT --> |
---|
29 | <h3>{{=T('Error snapshot')}} |
---|
30 | <a href="#" rel="tooltip" data-placement="right" data-original-title="{{=T('Detailed traceback description')}}"> |
---|
31 | {{=helpicon()}} |
---|
32 | <span>{{=T("Detailed traceback description")}}</span> |
---|
33 | </a> |
---|
34 | </h3> |
---|
35 | <!-- SNAPSHOT LIST --> |
---|
36 | <div id="snapshot"> |
---|
37 | <!-- Exception details --> |
---|
38 | <p class="exception_object inspect"> |
---|
39 | <code>{{=snapshot['etype']}}({{=snapshot['evalue']}})</code> |
---|
40 | </p> |
---|
41 | <p class="controls"> |
---|
42 | <a class="button btn" onclick="collapse('exception_inner');"><span>{{=T('inspect attributes')}}</span></a> |
---|
43 | </p> |
---|
44 | <div id="exception_inner" class="hide"> |
---|
45 | <div class="inspect"> |
---|
46 | <h4>{{=T("Exception instance attributes")}}</h4> |
---|
47 | <table> |
---|
48 | <tbody> |
---|
49 | {{for k,v in snapshot['exception'].items():}} |
---|
50 | <tr> |
---|
51 | <th>{{=k}}</th> |
---|
52 | <td>{{=v}}</td> |
---|
53 | </tr> |
---|
54 | {{pass}} |
---|
55 | </tbody> |
---|
56 | </table> |
---|
57 | </div> |
---|
58 | </div> |
---|
59 | </div> |
---|
60 | <!-- FRAMES --> |
---|
61 | <div id="frames"> |
---|
62 | <h4>{{=T('Frames')}}</h4> |
---|
63 | <ul class="unstyled"> |
---|
64 | {{for i, frame in enumerate(snapshot['frames']):}} |
---|
65 | <li> |
---|
66 | {{is_hidden = (i != len(snapshot['frames'])-1 and 'hide' or 'inspect')}} |
---|
67 | <div class="framefile inspect controls"> |
---|
68 | <p> |
---|
69 | <strong>File {{="%s in %s at line %s" % (frame['file'], frame['func'], frame['lnum'])}}</strong> |
---|
70 | <a class="button tbbutton btn" onclick="collapse('{{='%s_code_inner' % i}}');"><span>{{=T("code")}}</span></a> |
---|
71 | <a class="button tbbutton btn" onclick="collapse('{{='%s_args_inner' % i}}');"><span>{{=T("arguments")}}</span></a> |
---|
72 | <a class="button tbbutton btn" onclick="collapse('{{='%s_vars_inner' % i}}');"><span>{{=T("variables")}}</span></a> |
---|
73 | </p> |
---|
74 | <div id="{{='%s_args_inner' % i}}" class="{{=is_hidden}}" style="width:100%;overflow:auto"> |
---|
75 | <h5>Function argument list</h5> |
---|
76 | <p>{{=frame['call']}}</p> |
---|
77 | </div> |
---|
78 | <div id="{{='%s_code_inner' % i}}" class="{{=is_hidden}}" style="width:100%;overflow:auto"> |
---|
79 | <h5>Code listing</h5> |
---|
80 | {{if frame['lines']:}} |
---|
81 | <pre>{{=CODE('\n'.join([x[1] for x in sorted(frame['lines'].items(),key=lambda x: x[0])]), |
---|
82 | language='python', link=None, counter=min(frame['lines'].keys()), highlight_line=frame['lnum'])}}</pre> |
---|
83 | {{pass}} |
---|
84 | </div> |
---|
85 | <div id="{{='%s_vars_inner' % i}}" class="{{=is_hidden}}" style="width:100%;overflow:auto"> |
---|
86 | <h5>Variables</h5> |
---|
87 | <table> |
---|
88 | <tbody> |
---|
89 | {{for k,v in frame['dump'].items():}} |
---|
90 | <tr> |
---|
91 | <th>{{=k}}</th> |
---|
92 | <td>{{=v}}</td> |
---|
93 | </tr> |
---|
94 | {{pass}} |
---|
95 | </tbody> |
---|
96 | </table> |
---|
97 | </div> |
---|
98 | </div> |
---|
99 | </li> |
---|
100 | {{pass}} |
---|
101 | </ul> |
---|
102 | </div> |
---|
103 | <!-- VIEW ENVIRONMENT --> |
---|
104 | <div class="viewenv"> |
---|
105 | <h4><span>Context</span></h4> |
---|
106 | <p class="controls"> |
---|
107 | <a class="button btn" onclick="jQuery('#locals').slideToggle()"><span>{{=T('locals')}}</span></a> |
---|
108 | <a class="button btn" onclick="jQuery('#request').slideToggle()"><span>{{=T('request')}}</span></a> |
---|
109 | <a class="button btn" onclick="jQuery('#session').slideToggle()"><span>{{=T('session')}}</span></a> |
---|
110 | <a class="button btn" onclick="jQuery('#response').slideToggle()"><span>{{=T('response')}}</span></a> |
---|
111 | </p> |
---|
112 | <div class="hide inspect resp1" id="locals"><h4>locals</h4> |
---|
113 | {{=BEAUTIFY(snapshot.get('locals','no locals available in snapshot'))}} |
---|
114 | </div> |
---|
115 | <div class="hide inspect" id="request"><h4>request</h4> |
---|
116 | {{=XML(snapshot.get('request','no request available in snapshot'))}} |
---|
117 | </div> |
---|
118 | <div class="hide inspect" id="session"><h4>session</h4> |
---|
119 | {{=XML(snapshot.get('session','no session available in snapshot'))}} |
---|
120 | </div> |
---|
121 | <div class="hide inspect" id="response"><h4>response</h4> |
---|
122 | {{=XML(snapshot.get('response','no response available in snapshot'))}} |
---|
123 | </div> |
---|
124 | </div> |
---|
125 | {{except Exception as e:}} |
---|
126 | <!-- this should not happen, just in case... (cannot output normal hmtl as we don't know current open tags) --> |
---|
127 | {{import traceback;tb=traceback.format_exc().replace("\n","\\n") }} |
---|
128 | <script language='javascript'>alert("Exception during snapshot rendering: {{=tb}} ");</script> |
---|
129 | {{pass}} |
---|
130 | {{pass}} |
---|
131 | |
---|
132 | <div class="errorsource"> |
---|
133 | <h3>In file: {{=layer}}</h3> |
---|
134 | {{=CODE(code.replace('\r',''),language='python',link='/examples/global/vars/')}} |
---|
135 | </div> |
---|
136 | {{else:}} |
---|
137 | <h3>{{=T('Ticket Missing')}}</h3> |
---|
138 | {{pass}} |
---|
139 | <!-- end "ticket" block --> |
---|