annotate piecrust/admin/web.py @ 857:d231a10d18f9

refactor: Make the data providers and blog archives source functional. Also, because of a behaviour change in Jinja, the blog archives sources is now offering monthly archives by itself.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 08 Jun 2017 08:49:33 -0700
parents 82509bce94ca
children dcdec4b951a1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
778
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 import os.path
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 import logging
812
82509bce94ca internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents: 808
diff changeset
3 from flask import Flask, render_template
778
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 from werkzeug import SharedDataMiddleware
783
a9f4a6e60b0b admin: Fix various crashes caused by incorrect Blueprint setup.
Ludovic Chabant <ludovic@chabant.com>
parents: 778
diff changeset
5 from .blueprint import foodtruck_bp
778
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 from .configuration import FoodTruckConfigNotFoundError
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 from .sites import InvalidSiteError
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10 logger = logging.getLogger(__name__)
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13 def create_foodtruck_app(extra_settings=None):
808
8f2d32f90095 admin: Don't have the static folder for the app collide with the blueprint's.
Ludovic Chabant <ludovic@chabant.com>
parents: 783
diff changeset
14 app = Flask(__name__.split('.')[0], static_folder=None)
778
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 app.config.from_object('piecrust.admin.settings')
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 app.config.from_envvar('FOODTRUCK_SETTINGS', silent=True)
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 if extra_settings:
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 app.config.update(extra_settings)
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 admin_root = app.config.setdefault('FOODTRUCK_ROOT', os.getcwd())
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 config_path = os.path.join(admin_root, 'app.cfg')
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22
812
82509bce94ca internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents: 808
diff changeset
23 # If we're being run as the `chef admin run` command, from inside a
82509bce94ca internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents: 808
diff changeset
24 # PieCrust website, do a few things differently.
778
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25 app.config['FOODTRUCK_PROCEDURAL_CONFIG'] = None
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 if (app.config.get('FOODTRUCK_CMDLINE_MODE', False) and
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27 os.path.isfile(os.path.join(admin_root, 'config.yml'))):
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 app.secret_key = os.urandom(22)
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29 app.config['LOGIN_DISABLED'] = True
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 app.config['FOODTRUCK_PROCEDURAL_CONFIG'] = {
812
82509bce94ca internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents: 808
diff changeset
31 'sites': {
82509bce94ca internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents: 808
diff changeset
32 'local': admin_root}
82509bce94ca internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents: 808
diff changeset
33 }
778
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35 # Add a special route for the `.well-known` directory.
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36 app.wsgi_app = SharedDataMiddleware(
812
82509bce94ca internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents: 808
diff changeset
37 app.wsgi_app,
82509bce94ca internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents: 808
diff changeset
38 {'/.well-known': os.path.join(admin_root, '.well-known')})
778
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40 if os.path.isfile(config_path):
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41 app.config.from_pyfile(config_path)
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43 if app.config['DEBUG']:
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 l = logging.getLogger()
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45 l.setLevel(logging.DEBUG)
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46 else:
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47 @app.errorhandler(FoodTruckConfigNotFoundError)
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 def _on_config_missing(ex):
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49 return render_template('install.html')
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51 @app.errorhandler(InvalidSiteError)
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52 def _on_invalid_site(ex):
812
82509bce94ca internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents: 808
diff changeset
53 data = {'error':
82509bce94ca internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents: 808
diff changeset
54 "The was an error with your configuration file: %s" %
778
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55 str(ex)}
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 return render_template('error.html', **data)
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58 if not app.secret_key:
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 # If there's no secret key, create a temp one but mark the app as not
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 # correctly installed so it shows the installation information page.
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 app.secret_key = 'temp-key'
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 # Register extensions and blueprints.
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64 app.register_blueprint(foodtruck_bp)
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 logger.debug("Created FoodTruck app with admin root: %s" % admin_root)
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68 return app
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69