comparison foodtruck/views/create.py @ 606:f1e03f85f14d

admin: Fix creating pages.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 27 Jan 2016 22:47:00 -0800
parents d4a01a023998
children efc1dc916e7c
comparison
equal deleted inserted replaced
605:cb92d6eca543 606:f1e03f85f14d
23 if not isinstance(source, IInteractiveSource): 23 if not isinstance(source, IInteractiveSource):
24 abort(400) 24 abort(400)
25 25
26 if request.method == 'POST': 26 if request.method == 'POST':
27 if 'do_save' in request.form: 27 if 'do_save' in request.form:
28 metadata = dict(request.form.items()) 28 metadata = {}
29 form_keys = list(metadata.keys()) 29 for fk, fv in request.form.items():
30 for k in filter(lambda k: not k.startswith('meta-'), form_keys): 30 if fk.startswith('meta-'):
31 del metadata[k] 31 metadata[fk[5:]] = fv
32 32
33 logger.debug("Searching for page with metadata: %s" % metadata)
33 fac = source.findPageFactory(metadata, MODE_CREATING) 34 fac = source.findPageFactory(metadata, MODE_CREATING)
34 if fac is None: 35 if fac is None:
35 raise Exception("Can't find page for %s" % metadata) 36 logger.error("Can't find page for %s" % metadata)
36 abort(400) 37 abort(500)
37 38
38 logger.debug("Creating page: %s" % fac.path) 39 logger.debug("Creating page: %s" % fac.path)
39 with open(fac.path, 'w', encoding='utf8') as fp: 40 with open(fac.path, 'w', encoding='utf8') as fp:
40 fp.write(request.form['page_text']) 41 fp.write('')
41 flash("%s was created." % os.path.relpath(fac.path, site.root_dir)) 42 flash("%s was created." % os.path.relpath(fac.path, site.root_dir))
42 43
43 route = site.getRoute(source.name, fac.metadata, 44 route = site.getRoute(source.name, fac.metadata,
44 skip_taxonomies=True) 45 skip_taxonomies=True)
45 dummy = object() 46 if route is None:
46 dummy.source_metadata = fac.metadata 47 logger.error("Can't find route for page: %s" % fac.path)
47 dummy.getRouteMetadata = lambda: {} 48 abort(500)
49
50 dummy = _DummyPage(fac)
48 route_metadata = create_route_metadata(dummy) 51 route_metadata = create_route_metadata(dummy)
49 uri = route.getUri(route_metadata) 52 uri = route.getUri(route_metadata)
53 uri_root = '/site/%s/' % g.sites.get().name
54 uri = uri[len(uri_root):]
55 logger.debug("Redirecting to: %s" % uri)
50 56
51 return redirect(url_for('edit_page', slug=uri)) 57 return redirect(url_for('edit_page', slug=uri))
52 58
53 abort(400) 59 abort(400)
54 60
55 return _write_page_form(source) 61 return _write_page_form(source)
62
63
64 class _DummyPage:
65 def __init__(self, fac):
66 self.source_metadata = fac.metadata
67
68 def getRouteMetadata(self):
69 return {}
56 70
57 71
58 def _write_page_form(source): 72 def _write_page_form(source):
59 data = {} 73 data = {}
60 data['is_new_page'] = True 74 data['is_new_page'] = True