comparison foodtruck/web.py @ 601:effbc78b5528

admin: Better error reporting, general clean-up.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 24 Jan 2016 10:42:33 -0800
parents 79a31a3c947b
children c6bc0ef03f82
comparison
equal deleted inserted replaced
600:c37307a72f79 601:effbc78b5528
1 import os 1 import os
2 import os.path 2 import os.path
3 import logging 3 import logging
4 from flask import Flask, g, request, render_template 4 from flask import Flask, g, request, render_template
5 from .config import ( 5 from .configuration import (
6 FoodTruckConfigNotFoundError, get_foodtruck_config) 6 FoodTruckConfigNotFoundError, get_foodtruck_config)
7 from .sites import FoodTruckSites 7 from .sites import FoodTruckSites, InvalidSiteError
8 8
9 9
10 logger = logging.getLogger(__name__) 10 logger = logging.getLogger(__name__)
11 11
12 app = Flask(__name__) 12 app = Flask(__name__)
53 def _get_sites(): 53 def _get_sites():
54 current = request.cookies.get('foodtruck_site_name') 54 current = request.cookies.get('foodtruck_site_name')
55 if current is None: 55 if current is None:
56 names = g.config.get('sites') 56 names = g.config.get('sites')
57 if not names or not isinstance(names, dict): 57 if not names or not isinstance(names, dict):
58 raise FoodTruckConfigNotFoundError() 58 raise InvalidSiteError(
59 "No sites are defined in the configuration file.")
59 current = next(iter(names.keys())) 60 current = next(iter(names.keys()))
60 s = FoodTruckSites(g.config, current) 61 s = FoodTruckSites(g.config, current)
61 return s 62 return s
62 63
63 g.config = LazySomething(_get_config) 64 g.config = LazySomething(_get_config)
69 for callback in getattr(g, 'after_request_callbacks', ()): 70 for callback in getattr(g, 'after_request_callbacks', ()):
70 callback(response) 71 callback(response)
71 return response 72 return response
72 73
73 74
74 @app.errorhandler(FoodTruckConfigNotFoundError) 75 if not app.config['DEBUG']:
75 def _on_config_missing(ex): 76 app.logger.debug("Registering exception handlers.")
76 return render_template('install.html') 77
78 @app.errorhandler(FoodTruckConfigNotFoundError)
79 def _on_config_missing(ex):
80 return render_template('install.html')
81
82 @app.errorhandler(InvalidSiteError)
83 def _on_invalid_site(ex):
84 data = {'error': 'invalid_site', 'exception': str(ex)}
85 return render_template('error.html', **data)
77 86
78 87
79 @app.errorhandler 88 @app.errorhandler
80 def _on_error(ex): 89 def _on_error(ex):
81 logging.exception(ex) 90 logging.exception(ex)
130 app.bcrypt = Bcrypt(app) 139 app.bcrypt = Bcrypt(app)
131 140
132 141
133 import foodtruck.views.baking # NOQA 142 import foodtruck.views.baking # NOQA
134 import foodtruck.views.create # NOQA 143 import foodtruck.views.create # NOQA
144 import foodtruck.views.dashboard # NOQA
135 import foodtruck.views.edit # NOQA 145 import foodtruck.views.edit # NOQA
136 import foodtruck.views.main # NOQA
137 import foodtruck.views.menu # NOQA 146 import foodtruck.views.menu # NOQA
138 import foodtruck.views.preview # NOQA 147 import foodtruck.views.preview # NOQA
139 import foodtruck.views.settings # NOQA 148 import foodtruck.views.settings # NOQA
140 import foodtruck.views.sources # NOQA 149 import foodtruck.views.sources # NOQA
141 150