Skip to content
Snippets Groups Projects
Commit d5189334 authored by Julian Rother's avatar Julian Rother
Browse files

Introduce handle_errors decorator

parent 613902c6
No related branches found
No related tags found
No related merge requests found
...@@ -67,9 +67,20 @@ def render_endpoint(endpoint, flashtext=None, **kargs): ...@@ -67,9 +67,20 @@ def render_endpoint(endpoint, flashtext=None, **kargs):
request.url_rule = Rule(request.path, endpoint=endpoint) request.url_rule = Rule(request.path, endpoint=endpoint)
return app.view_functions[endpoint](**kargs) return app.view_functions[endpoint](**kargs)
def handle_errors(endpoint, text, code, *errors, **epargs):
def wrapper(func):
@wraps(func)
def decorator(*args, **kwargs):
try:
return func(*args, **kwargs)
except errors:
return render_endpoint(endpoint, text, **epargs), code
return decorator
return wrapper
@app.errorhandler(404) @app.errorhandler(404)
def handle_not_found(e): def handle_not_found(e):
return render_endpoint('index', 'Diese Seite existiert nicht!') return render_endpoint('index', 'Diese Seite existiert nicht!'), 404
@app.route('/') @app.route('/')
@register_navbar('Home', icon='home') @register_navbar('Home', icon='home')
...@@ -99,13 +110,12 @@ def videos(): ...@@ -99,13 +110,12 @@ def videos():
@app.route('/course/<id>') @app.route('/course/<id>')
@app.route('/course/<int:numid>') @app.route('/course/<int:numid>')
@handle_errors('videos', 'Diese Veranstaltung existiert nicht!', 404, IndexError)
def course(numid=None, id=None): def course(numid=None, id=None):
if numid: if numid:
courses = query('SELECT * FROM courses WHERE id = ? AND (? OR visible)', numid, ismod()) courses = query('SELECT * FROM courses WHERE id = ? AND (? OR visible)', numid, ismod())
else: else:
courses = query('SELECT * FROM courses WHERE handle = ? AND (? OR visible)', id, ismod()) courses = query('SELECT * FROM courses WHERE handle = ? AND (? OR visible)', id, ismod())
if not courses:
return render_endpoint('index', 'Diese Veranstaltung existiert nicht!'), 404
lectures = query('SELECT * FROM lectures WHERE course_id = ? AND (? OR visible)', courses[0]['id'], ismod()) lectures = query('SELECT * FROM lectures WHERE course_id = ? AND (? OR visible)', courses[0]['id'], ismod())
videos = query(''' videos = query('''
SELECT videos.*, (videos.downloadable AND courses.downloadable) as downloadable, formats.description AS format_description SELECT videos.*, (videos.downloadable AND courses.downloadable) as downloadable, formats.description AS format_description
...@@ -124,11 +134,10 @@ def faq(): ...@@ -124,11 +134,10 @@ def faq():
return render_template('faq.html') return render_template('faq.html')
@app.route('/play/<int:id>') @app.route('/play/<int:id>')
@handle_errors('videos', 'Diese Vorlesung existiert nicht!', 404, IndexError)
def play(id): def play(id):
lectures = query('SELECT * FROM lectures WHERE id = ? AND (? OR visible)', id, ismod()) lectures = query('SELECT * FROM lectures WHERE id = ? AND (? OR visible)', id, ismod())
videos = query('SELECT * FROM videos WHERE lecture_id = ? AND (? OR visible)', id, ismod()) videos = query('SELECT * FROM videos WHERE lecture_id = ? AND (? OR visible)', id, ismod())
if not lectures:
return render_endpoint('videos', 'Diese Vorlesung existiert nicht!'), 404
if not videos: if not videos:
flash('Zu dieser Vorlesung wurden noch keine Videos veröffentlicht!') flash('Zu dieser Vorlesung wurden noch keine Videos veröffentlicht!')
courses = query('SELECT * FROM courses WHERE id = ? AND (? OR (visible AND listed))', lectures[0]['course_id'], ismod()) courses = query('SELECT * FROM courses WHERE id = ? AND (? OR (visible AND listed))', lectures[0]['course_id'], ismod())
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment