Mercurial > piecrust2
view piecrust/admin/views/create.py @ 1151:0d699f04968c
cm: Update dependencies and fix imports of Flask plugins.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sat, 03 Nov 2018 19:42:02 -0700 |
parents | 18d6ac20a132 |
children | ea23f62cb3c1 |
line wrap: on
line source
import logging from flask import ( g, request, abort, render_template, url_for, redirect, flash) from flask_login import login_required from piecrust.page import Page from piecrust.sources.interfaces import IInteractiveSource from piecrust.uriutil import split_uri from ..blueprint import foodtruck_bp from ..views import with_menu_context logger = logging.getLogger(__name__) @foodtruck_bp.route('/write/<source_name>', methods=['GET', 'POST']) @login_required def write_page(source_name): pcapp = g.site.piecrust_app source = pcapp.getSource(source_name) if source is None: abort(400) if not isinstance(source, IInteractiveSource): abort(400) if request.method == 'POST': if 'do_save' in request.form: return _submit_page_form(pcapp, source) abort(400) return _write_page_form(source) def _write_page_form(source): data = {} data['is_new_page'] = True data['source_name'] = source.name data['url_postback'] = url_for('.write_page', source_name=source.name) data['fields'] = [] for f in source.getInteractiveFields(): data['fields'].append({ 'name': f.name, 'display_name': f.name, 'type': f.field_type, 'value': f.default_value}) 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("Creating item with metadata: %s" % metadata) content_item = source.createContent(metadata) if content_item is None: logger.error("Can't create item for: %s" % metadata) abort(500) logger.debug("Creating content: %s" % content_item.spec) with source.openItem(content_item, 'w') as fp: fp.write('---\n') fp.write('draft: true\n') fp.write('---\n') fp.write('\n') fp.write("Start writing!\n") flash("'%s' was created." % content_item.spec) page = Page(source, content_item) uri = page.getUri() logger.debug("Redirecting to: %s" % uri) _, rel_url = split_uri(page.app, uri) return redirect(url_for('.edit_page', url=rel_url))