Improve error reporting.
This commit is contained in:
		
							parent
							
								
									37af9ad1c0
								
							
						
					
					
						commit
						37e119f71d
					
				
							
								
								
									
										7
									
								
								app.py
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								app.py
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -7,6 +7,8 @@ from depicts import (utils, wdqs, commons, mediawiki, painting, saam, database,
 | 
			
		|||
from depicts.model import DepictsItem, DepictsItemAltLabel, Edit
 | 
			
		||||
from requests_oauthlib import OAuth1Session
 | 
			
		||||
from urllib.parse import urlencode
 | 
			
		||||
from werkzeug.exceptions import InternalServerError
 | 
			
		||||
from werkzeug.debug.tbtools import get_current_traceback
 | 
			
		||||
import requests.exceptions
 | 
			
		||||
import requests
 | 
			
		||||
import lxml.html
 | 
			
		||||
| 
						 | 
				
			
			@ -107,6 +109,11 @@ select distinct ?item where {
 | 
			
		|||
}
 | 
			
		||||
'''
 | 
			
		||||
 | 
			
		||||
@app.errorhandler(InternalServerError)
 | 
			
		||||
def exception_handler(e):
 | 
			
		||||
    tb = get_current_traceback()
 | 
			
		||||
    return render_template('show_error.html', tb=tb), 500
 | 
			
		||||
 | 
			
		||||
@app.template_global()
 | 
			
		||||
def set_url_args(**new_args):
 | 
			
		||||
    args = request.view_args.copy()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										90
									
								
								static/css/exception.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								static/css/exception.css
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,90 @@
 | 
			
		|||
div.debugger { text-align: left; padding: 12px; margin: auto;
 | 
			
		||||
               background-color: white; }
 | 
			
		||||
div.detail p { margin: 0 0 8px 13px; font-size: 14px; white-space: pre-wrap;
 | 
			
		||||
               font-family: monospace; }
 | 
			
		||||
div.explanation { margin: 20px 13px; font-size: 15px; color: #555; }
 | 
			
		||||
div.footer   { font-size: 13px; text-align: right; margin: 30px 0;
 | 
			
		||||
               color: #86989B; }
 | 
			
		||||
 | 
			
		||||
div.traceback, div.plain { border: 1px solid #ddd; margin: 0 0 1em 0; padding: 10px; }
 | 
			
		||||
div.plain p      { margin: 0; }
 | 
			
		||||
div.plain textarea,
 | 
			
		||||
div.plain pre { margin: 10px 0 0 0; padding: 4px;
 | 
			
		||||
                background-color: #E8EFF0; border: 1px solid #D3E7E9; }
 | 
			
		||||
div.plain textarea { width: 99%; height: 300px; }
 | 
			
		||||
div.traceback h3 { font-size: 1em; margin: 0 0 0.8em 0; }
 | 
			
		||||
div.traceback ul { list-style: none; margin: 0; padding: 0 0 0 1em; }
 | 
			
		||||
div.traceback h4 { font-size: 13px; font-weight: normal; margin: 0.7em 0 0.1em 0; }
 | 
			
		||||
div.traceback pre { margin: 0; padding: 5px 0 3px 15px;
 | 
			
		||||
                    background-color: #E8EFF0; border: 1px solid #D3E7E9; }
 | 
			
		||||
div.traceback pre:hover { background-color: #DDECEE; color: black; cursor: pointer; }
 | 
			
		||||
div.traceback div.source.expanded pre + pre { border-top: none; }
 | 
			
		||||
 | 
			
		||||
div.traceback span.ws { display: none; }
 | 
			
		||||
div.traceback pre.before, div.traceback pre.after { display: none; background: white; }
 | 
			
		||||
div.traceback div.source.expanded pre.before,
 | 
			
		||||
div.traceback div.source.expanded pre.after {
 | 
			
		||||
    display: block;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.traceback div.source.expanded span.ws {
 | 
			
		||||
    display: inline;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.traceback blockquote { margin: 1em 0 0 0; padding: 0; }
 | 
			
		||||
div.traceback img { float: right; padding: 2px; margin: -3px 2px 0 0; display: none; }
 | 
			
		||||
div.traceback img:hover { background-color: #ddd; cursor: pointer;
 | 
			
		||||
                          border-color: #BFDDE0; }
 | 
			
		||||
div.traceback pre:hover img { display: block; }
 | 
			
		||||
div.traceback cite.filename { font-style: normal; color: #3B666B; }
 | 
			
		||||
 | 
			
		||||
pre.console { border: 1px solid #ccc; background: white!important;
 | 
			
		||||
              color: black; padding: 5px!important;
 | 
			
		||||
              margin: 3px 0 0 0!important; cursor: default!important;
 | 
			
		||||
              max-height: 400px; overflow: auto; }
 | 
			
		||||
pre.console form { color: #555; }
 | 
			
		||||
pre.console input { background-color: transparent; color: #555;
 | 
			
		||||
                    width: 90%; font-family: 'Consolas', 'Deja Vu Sans Mono',
 | 
			
		||||
                    'Bitstream Vera Sans Mono', monospace; font-size: 14px;
 | 
			
		||||
                     border: none!important; }
 | 
			
		||||
 | 
			
		||||
span.string { color: #30799B; }
 | 
			
		||||
span.number { color: #9C1A1C; }
 | 
			
		||||
span.help   { color: #3A7734; }
 | 
			
		||||
span.object { color: #485F6E; }
 | 
			
		||||
span.extended { opacity: 0.5; }
 | 
			
		||||
span.extended:hover { opacity: 1; }
 | 
			
		||||
 | 
			
		||||
pre.console div.traceback,
 | 
			
		||||
pre.console div.box { margin: 5px 10px; white-space: normal;
 | 
			
		||||
                      border: 1px solid #11557C; padding: 10px;
 | 
			
		||||
                      font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva',
 | 
			
		||||
                      'Verdana', sans-serif;  }
 | 
			
		||||
pre.console div.box h3,
 | 
			
		||||
pre.console div.traceback h3 { margin: -10px -10px 10px -10px; padding: 5px;
 | 
			
		||||
                               background: #11557C; color: white; }
 | 
			
		||||
 | 
			
		||||
pre.console div.traceback pre:hover { cursor: default; background: #E8EFF0; }
 | 
			
		||||
pre.console div.traceback pre.syntaxerror { background: inherit; border: none;
 | 
			
		||||
                                            margin: 20px -10px -10px -10px;
 | 
			
		||||
                                            padding: 10px; border-top: 1px solid #BFDDE0;
 | 
			
		||||
                                            background: #E8EFF0; }
 | 
			
		||||
pre.console div.noframe-traceback pre.syntaxerror { margin-top: -10px; border: none; }
 | 
			
		||||
 | 
			
		||||
pre.console div.box pre.repr { padding: 0; margin: 0; background-color: white; border: none; }
 | 
			
		||||
pre.console div.box table { margin-top: 6px; }
 | 
			
		||||
pre.console div.box pre { border: none; }
 | 
			
		||||
pre.console div.box pre.help { background-color: white; }
 | 
			
		||||
pre.console div.box pre.help:hover { cursor: default; }
 | 
			
		||||
pre.console table tr { vertical-align: top; }
 | 
			
		||||
div.console { border: 1px solid #ccc; padding: 4px; background-color: #fafafa; }
 | 
			
		||||
 | 
			
		||||
div.traceback pre, div.console pre {
 | 
			
		||||
    white-space: pre-wrap;       /* css-3 should we be so lucky... */
 | 
			
		||||
    white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
 | 
			
		||||
    white-space: -pre-wrap;      /* Opera 4-6 ?? */
 | 
			
		||||
    white-space: -o-pre-wrap;    /* Opera 7 ?? */
 | 
			
		||||
    word-wrap: break-word;       /* Internet Explorer 5.5+ */
 | 
			
		||||
    _white-space: pre;           /* IE only hack to re-specify in
 | 
			
		||||
                                 addition to word-wrap  */
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										27
									
								
								templates/show_error.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								templates/show_error.html
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,27 @@
 | 
			
		|||
{% extends "base.html" %}
 | 
			
		||||
 | 
			
		||||
{% block style %}
 | 
			
		||||
<link rel="stylesheet" href="{{url_for('static', filename='css/exception.css')}}" />
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
{% block content %}
 | 
			
		||||
<div class="p-2">
 | 
			
		||||
 | 
			
		||||
<h1>Software error: {{ tb.exception_type }}</h1>
 | 
			
		||||
<div>
 | 
			
		||||
  <p>{{ tb.exception }}</p>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
{% set body %}
 | 
			
		||||
URL: {{ request.url }}
 | 
			
		||||
 | 
			
		||||
{{ tb.plaintext | safe }}
 | 
			
		||||
{% endset %}
 | 
			
		||||
 | 
			
		||||
<p><a class="btn btn-primary btn-lg" role="button" href="https://github.com/EdwardBetts/depicts/issues/new?title={{ tb.exception + " " + request.url | urlencode }}&body={{ body | urlencode }}">Submit as an issue on GitHub</a> (requires an account with GitHub)</p>
 | 
			
		||||
 | 
			
		||||
<h2 class="traceback">Traceback <em>(most recent call last)</em></h2>
 | 
			
		||||
{{ tb.render_summary(include_title=False) | safe }}
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
{% endblock %}
 | 
			
		||||
		Loading…
	
		Reference in a new issue