Mercurial > piecrust2
diff foodtruck/web.py @ 597:79a31a3c947b
admin: Better production config for FoodTruck, provide proper first site.
* Use a `settings` object to configure Flask.
* Accept an `app.cfg` file in the admin folder to configure Flask.
* Get a proper first site name when the cookie isn't set yet.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Wed, 20 Jan 2016 21:39:18 -0800 |
parents | d4a01a023998 |
children | effbc78b5528 |
line wrap: on
line diff
--- a/foodtruck/web.py Wed Jan 20 21:36:51 2016 -0800 +++ b/foodtruck/web.py Wed Jan 20 21:39:18 2016 -0800 @@ -1,3 +1,5 @@ +import os +import os.path import logging from flask import Flask, g, request, render_template from .config import ( @@ -8,10 +10,19 @@ logger = logging.getLogger(__name__) app = Flask(__name__) +app.config.from_object('foodtruck.settings') +app.config.from_envvar('FOODTRUCK_SETTINGS', silent=True) -c = get_foodtruck_config() -app.secret_key = c.get('foodtruck/secret_key') -del c +admin_root = app.config['FOODTRUCK_ROOT'] or os.getcwd() +config_path = os.path.join(admin_root, 'app.cfg') +if os.path.isfile(config_path): + app.config.from_pyfile(config_path) + +if app.config['DEBUG']: + l = logging.getLogger() + l.setLevel(logging.DEBUG) + +app.logger.debug("Using FoodTruck admin root: %s" % admin_root) def after_this_request(f): @@ -36,11 +47,20 @@ @app.before_request def _setup_foodtruck_globals(): + def _get_config(): + return get_foodtruck_config(admin_root) + def _get_sites(): - s = FoodTruckSites(g.config, - request.cookies.get('foodtruck_site_name')) + current = request.cookies.get('foodtruck_site_name') + if current is None: + names = g.config.get('sites') + if not names or not isinstance(names, dict): + raise FoodTruckConfigNotFoundError() + current = next(iter(names.keys())) + s = FoodTruckSites(g.config, current) return s - g.config = LazySomething(get_foodtruck_config) + + g.config = LazySomething(_get_config) g.sites = LazySomething(_get_sites)