annotate piecrust/admin/web.py @ 1088:c5f1936e9e89

data: Fix recently introduced bug with blog data provider.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 15 Feb 2018 23:46:37 -0800
parents 45ad976712ec
children
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
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents: 812
diff changeset
3 from flask import Flask
778
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 logger = logging.getLogger(__name__)
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8
935
7ecb946bfafd admin: Lots of fixes for running the admin panel in a WSGI server.
Ludovic Chabant <ludovic@chabant.com>
parents: 894
diff changeset
9 def create_foodtruck_app(extra_settings=None, url_prefix=None):
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents: 812
diff changeset
10 from .blueprint import foodtruck_bp
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents: 812
diff changeset
11
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
12 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
13 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
14 if extra_settings:
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 app.config.update(extra_settings)
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16
935
7ecb946bfafd admin: Lots of fixes for running the admin panel in a WSGI server.
Ludovic Chabant <ludovic@chabant.com>
parents: 894
diff changeset
17 root_dir = app.config.setdefault('FOODTRUCK_ROOT_DIR', os.getcwd())
778
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18
894
ca357249a321 admin: Read an optional Flask-app configuration file.
Ludovic Chabant <ludovic@chabant.com>
parents: 886
diff changeset
19 app.config.from_pyfile(os.path.join(root_dir, 'admin_app.cfg'),
ca357249a321 admin: Read an optional Flask-app configuration file.
Ludovic Chabant <ludovic@chabant.com>
parents: 886
diff changeset
20 silent=True)
ca357249a321 admin: Read an optional Flask-app configuration file.
Ludovic Chabant <ludovic@chabant.com>
parents: 886
diff changeset
21 app.config.from_envvar('FOODTRUCK_SETTINGS', silent=True)
ca357249a321 admin: Read an optional Flask-app configuration file.
Ludovic Chabant <ludovic@chabant.com>
parents: 886
diff changeset
22
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents: 812
diff changeset
23 # Setup logging/error handling.
778
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 if app.config['DEBUG']:
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25 l = logging.getLogger()
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 l.setLevel(logging.DEBUG)
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents: 812
diff changeset
28 if not app.config['SECRET_KEY']:
778
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29 # 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
30 # correctly installed so it shows the installation information page.
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents: 812
diff changeset
31 app.config['SECRET_KEY'] = 'temp-key'
778
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 # Register extensions and blueprints.
935
7ecb946bfafd admin: Lots of fixes for running the admin panel in a WSGI server.
Ludovic Chabant <ludovic@chabant.com>
parents: 894
diff changeset
34 app.register_blueprint(foodtruck_bp, url_prefix=url_prefix)
7ecb946bfafd admin: Lots of fixes for running the admin panel in a WSGI server.
Ludovic Chabant <ludovic@chabant.com>
parents: 894
diff changeset
35
7ecb946bfafd admin: Lots of fixes for running the admin panel in a WSGI server.
Ludovic Chabant <ludovic@chabant.com>
parents: 894
diff changeset
36 # Debugging stuff
958
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
37 if app.config.get('FOODTRUCK_DEBUG_404'):
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
38 @app.errorhandler(404)
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
39 def page_not_found(e):
979
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 958
diff changeset
40 return _debug_page_not_found(app, e)
778
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents: 812
diff changeset
42 logger.debug("Created FoodTruck app with admin root: %s" % root_dir)
778
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 return app
5e91bc0e3b4d internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45
958
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
46
979
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 958
diff changeset
47 def _debug_page_not_found(app, e):
958
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
48 from flask import request, url_for
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
49 output = []
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
50 for rule in app.url_map.iter_rules():
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
51 options = {}
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
52 for arg in rule.arguments:
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
53 options[arg] = "[{0}]".format(arg)
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
54 methods = ','.join(rule.methods)
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
55 try:
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
56 url = url_for(rule.endpoint, **options)
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
57 except:
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
58 url = '???'
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
59 line = ("{:50s} {:20s} {}".format(rule.endpoint, methods, url))
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
60 output.append(line)
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
61
979
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 958
diff changeset
62 resp = 'FOODTRUCK_ROOT_URL=%s<br/>\n' % str(
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 958
diff changeset
63 app.config['FOODTRUCK_ROOT_URL'])
958
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
64 resp += 'PATH=%s<br/>\n' % request.path
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
65 resp += 'ENVIRON=%s<br/>\n' % str(request.environ)
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
66 resp += 'URL RULES:<br/>\n'
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
67 resp += '<br/>\n'.join(sorted(output))
e1cadbfddb48 admin: Move 404 debugging into a separate function.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
68 return resp, 404