Mercurial > piecrust2
diff piecrust/admin/views/create.py @ 886:dcdec4b951a1
admin: Get the admin panel working again.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 20 Jun 2017 21:13:08 -0700 |
parents | 4850f8c21b6e |
children | 942565723e99 |
line wrap: on
line diff
--- a/piecrust/admin/views/create.py Tue Jun 20 21:12:35 2017 -0700 +++ b/piecrust/admin/views/create.py Tue Jun 20 21:13:08 2017 -0700 @@ -1,11 +1,9 @@ -import os -import os.path import logging from flask import ( g, request, abort, render_template, url_for, redirect, flash) from flask.ext.login import login_required +from piecrust.page import Page from piecrust.sources.interfaces import IInteractiveSource -from piecrust.routing import create_route_metadata from ..blueprint import foodtruck_bp from ..views import with_menu_context @@ -16,8 +14,8 @@ @foodtruck_bp.route('/write/<source_name>', methods=['GET', 'POST']) @login_required def write_page(source_name): - site = g.site.piecrust_app - source = site.getSource(source_name) + pcapp = g.site.piecrust_app + source = pcapp.getSource(source_name) if source is None: abort(400) if not isinstance(source, IInteractiveSource): @@ -25,52 +23,11 @@ if request.method == 'POST': if 'do_save' in request.form: - metadata = {} - for f in source.getInteractiveFields(): - metadata[f.name] = f.default_value - for fk, fv in request.form.items(): - if fk.startswith('meta-'): - metadata[fk[5:]] = fv - - logger.debug("Searching for page with metadata: %s" % metadata) - fac = source.findPageFactory(metadata, MODE_CREATING) - if fac is None: - logger.error("Can't find page for %s" % metadata) - abort(500) - - logger.debug("Creating page: %s" % fac.path) - os.makedirs(os.path.dirname(fac.path), exist_ok=True) - with open(fac.path, 'w', encoding='utf8') as fp: - fp.write('') - flash("%s was created." % os.path.relpath(fac.path, site.root_dir)) - - route = site.getSourceRoute(source.name, fac.metadata) - if route is None: - logger.error("Can't find route for page: %s" % fac.path) - abort(500) - - dummy = _DummyPage(fac) - route_metadata = create_route_metadata(dummy) - uri = route.getUri(route_metadata) - uri_root = '/site/%s/' % g.site.name - uri = uri[len(uri_root):] - logger.debug("Redirecting to: %s" % uri) - - return redirect(url_for('.edit_page', slug=uri)) - + return _submit_page_form(pcapp, source) abort(400) - return _write_page_form(source) -class _DummyPage: - def __init__(self, fac): - self.source_metadata = fac.metadata - - def getRouteMetadata(self): - return {} - - def _write_page_form(source): data = {} data['is_new_page'] = True @@ -87,3 +44,42 @@ with_menu_context(data) return render_template('create_page.html', **data) + +def _submit_page_form(pcapp, source): + metadata = {} + for f in source.getInteractiveFields(): + metadata[f.name] = f.default_value + for fk, fv in request.form.items(): + if fk.startswith('meta-'): + metadata[fk[5:]] = fv + + logger.debug("Searching for item with metadata: %s" % metadata) + content_item = source.findContent(metadata) + if content_item is None: + logger.error("Can't find item for: %s" % metadata) + abort(500) + + logger.debug("Creating item: %s" % content_item.spec) + with source.openItem(content_item, mode='w') as fp: + fp.write('') + flash("'%s' was created." % content_item.spec) + + route = pcapp.getSourceRoute(source.name) + if route is None: + logger.error("Can't find route for source: %s" % source.name) + abort(500) + + page = Page(source, content_item) + uri = page.getUri() + logger.debug("Redirecting to: %s" % uri) + return redirect(url_for('.edit_page', uri=uri)) + + +class _DummyPage: + def __init__(self, fac): + self.source_metadata = fac.metadata + + def getRouteMetadata(self): + return {} + +