comparison foodtruck/views/create.py @ 628:14c51f5accc9

admin: Fix crashes when creating a new page. * Use proper default values when the user doesn't provide any. * Make sure the new page's directory exists.
author Ludovic Chabant <ludovic@chabant.com>
date Mon, 08 Feb 2016 23:28:39 -0800
parents efc1dc916e7c
children a7726e4862c4
comparison
equal deleted inserted replaced
627:6c205066067a 628:14c51f5accc9
1 import os
1 import os.path 2 import os.path
2 import logging 3 import logging
3 from flask import ( 4 from flask import (
4 g, request, abort, render_template, url_for, redirect, flash) 5 g, request, abort, render_template, url_for, redirect, flash)
5 from flask.ext.login import login_required 6 from flask.ext.login import login_required
24 abort(400) 25 abort(400)
25 26
26 if request.method == 'POST': 27 if request.method == 'POST':
27 if 'do_save' in request.form: 28 if 'do_save' in request.form:
28 metadata = {} 29 metadata = {}
30 for f in source.getInteractiveFields():
31 metadata[f.name] = f.default_value
29 for fk, fv in request.form.items(): 32 for fk, fv in request.form.items():
30 if fk.startswith('meta-'): 33 if fk.startswith('meta-'):
31 metadata[fk[5:]] = fv 34 metadata[fk[5:]] = fv
32 35
33 logger.debug("Searching for page with metadata: %s" % metadata) 36 logger.debug("Searching for page with metadata: %s" % metadata)
35 if fac is None: 38 if fac is None:
36 logger.error("Can't find page for %s" % metadata) 39 logger.error("Can't find page for %s" % metadata)
37 abort(500) 40 abort(500)
38 41
39 logger.debug("Creating page: %s" % fac.path) 42 logger.debug("Creating page: %s" % fac.path)
43 os.makedirs(os.path.dirname(fac.path), exist_ok=True)
40 with open(fac.path, 'w', encoding='utf8') as fp: 44 with open(fac.path, 'w', encoding='utf8') as fp:
41 fp.write('') 45 fp.write('')
42 flash("%s was created." % os.path.relpath(fac.path, site.root_dir)) 46 flash("%s was created." % os.path.relpath(fac.path, site.root_dir))
43 47
44 route = site.getRoute(source.name, fac.metadata, 48 route = site.getRoute(source.name, fac.metadata,