11import os
22import subprocess
3- from flask import Flask , redirect , request
3+ from flask import Flask , redirect , request , render_template , g
44from flask_sqlalchemy import SQLAlchemy
55from flask_migrate import Migrate
66from csh_ldap import CSHLDAP
7+ from raven import fetch_git_sha
8+ from raven .contrib .flask import Sentry
9+ from raven .exceptions import InvalidGitRepository
710import structlog
811
912app = Flask (__name__ )
1013
11- config = os .path .join (os .getcwd (), "config.py" )
14+ config = os .path .join (app . config . get ( 'ROOT_DIR' , os .getcwd () ), "config.py" )
1215
1316app .config .from_pyfile (config )
1417app .config ["SQLALCHEMY_TRACK_MODIFICATIONS" ] = False
1518
16- app .config ["GIT_REVISION" ] = subprocess .check_output (['git' ,
17- 'rev-parse' ,
18- '--short' ,
19- 'HEAD' ]).decode ('utf-8' ).rstrip ()
19+ try :
20+ app .config ["GIT_REVISION" ] = fetch_git_sha (app .config ["ROOT_DIR" ])[:7 ]
21+ except (InvalidGitRepository , KeyError ):
22+ app .config ["GIT_REVISION" ] = "unknown"
23+
2024db = SQLAlchemy (app )
2125migrate = Migrate (app , db )
2226logger = structlog .get_logger ()
27+ sentry = Sentry (app )
2328
2429ldap = CSHLDAP (app .config ['LDAP_BIND_DN' ],
2530 app .config ['LDAP_BIND_PW' ],
5156app .register_blueprint (slideshow_bp )
5257app .register_blueprint (cache_bp )
5358
54- from conditional .util .flask import render_template
5559from conditional .util .ldap import ldap_get_member
5660
5761@app .route ('/<path:path>' )
@@ -67,16 +71,38 @@ def default_route():
6771@app .errorhandler (404 )
6872@app .errorhandler (500 )
6973def route_errors (error ):
70- username = request .headers .get ('x-webauth-user' )
71- member = ldap_get_member (username )
7274 data = dict ()
73- data ['username' ] = member .uid
74- data ['name' ] = member .cn
75- code = error .code
76- return render_template (request = request ,
77- template_name = 'errors.html' ,
78- error = str (error ),
75+ username = request .headers .get ('x-webauth-user' )
76+
77+ # Handle the case where the header isn't present
78+ if username is not None :
79+ member = ldap_get_member (username )
80+ data ['username' ] = member .uid
81+ data ['name' ] = member .cn
82+ else :
83+ data ['username' ] = "unknown"
84+ data ['name' ] = "Unknown"
85+
86+ # Figure out what kind of error was passed
87+ if isinstance (error , int ):
88+ code = error
89+ elif hasattr (error , 'code' ):
90+ code = error .code
91+ else :
92+ # Unhandled exception
93+ code = 500
94+
95+ # Is this a 404?
96+ if code == 404 :
97+ error_desc = "Page Not Found"
98+ else :
99+ error_desc = type (error ).__name__
100+
101+ return render_template ('errors.html' ,
102+ error = error_desc ,
79103 error_code = code ,
104+ event_id = g .sentry_event_id ,
105+ public_dsn = sentry .client .get_public_dsn ('https' ),
80106 ** data ), int (code )
81107
82108@app .cli .command ()
0 commit comments