Mercurial > piecrust2
diff piecrust/admin/views/edit.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 | 82509bce94ca |
children | 41db689d36b6 |
line wrap: on
line diff
--- a/piecrust/admin/views/edit.py Tue Jun 20 21:12:35 2017 -0700 +++ b/piecrust/admin/views/edit.py Tue Jun 20 21:13:08 2017 -0700 @@ -13,59 +13,85 @@ logger = logging.getLogger(__name__) -@foodtruck_bp.route('/edit/', defaults={'slug': ''}, methods=['GET', 'POST']) -@foodtruck_bp.route('/edit/<path:slug>', methods=['GET', 'POST']) +@foodtruck_bp.route('/edit/', defaults={'uri': ''}, methods=['GET', 'POST']) +@foodtruck_bp.route('/edit/<path:uri>', methods=['GET', 'POST']) @login_required -def edit_page(slug): +def edit_page(uri): site = g.site - site_app = site.piecrust_app - rp = get_requested_page(site_app, - '/site/%s/%s' % (g.sites.current_site, slug)) - page = rp.qualified_page + pcapp = site.piecrust_app + rp = get_requested_page(pcapp, '%s/preview/%s' % (site.url_prefix, uri)) + page = rp.page if page is None: abort(404) if request.method == 'POST': - page_text = request.form['page_text'] - if request.form['is_dos_nl'] == '0': - page_text = page_text.replace('\r\n', '\n') - - if 'do_save' in request.form or 'do_save_and_commit' in request.form: - logger.debug("Writing page: %s" % page.path) - with open(page.path, 'w', encoding='utf8', newline='') as fp: - fp.write(page_text) - flash("%s was saved." % os.path.relpath( - page.path, site_app.root_dir)) + return _submit_page_form(page, uri) - if 'do_save_and_commit' in request.form: - message = request.form.get('commit_msg') - if not message: - message = "Edit %s" % os.path.relpath( - page.path, site_app.root_dir) - if site.scm: - site.scm.commit([page.path], message) - - if 'do_save' in request.form or 'do_save_and_commit' in request.form: - return _edit_page_form(page, slug, site.name) - - abort(400) - - return _edit_page_form(page, slug, site.name) + return _edit_page_form(page, uri) -@foodtruck_bp.route('/upload/<path:slug>', methods=['POST']) -def upload_page_asset(slug): +def _edit_page_form(page, uri): + data = {} + data['is_new_page'] = False + data['url_postback'] = url_for('.edit_page', uri=uri) + data['url_upload_asset'] = url_for('.upload_page_asset', uri=uri) + data['url_preview'] = page.getUri() + data['url_cancel'] = url_for( + '.list_source', source_name=page.source.name) + + with page.source.openItem(page.content_item, 'r') as fp: + data['page_text'] = fp.read() + data['is_dos_nl'] = "1" if '\r\n' in data['page_text'] else "0" + + assetor = Assetor(page) + assets_data = [] + for i, n in enumerate(assetor._getAssetNames()): + assets_data.append({'name': n, 'url': assetor[i]}) + data['assets'] = assets_data + + data['has_scm'] = (g.site.scm is not None) + + with_menu_context(data) + return render_template('edit_page.html', **data) + + +def _submit_page_form(page, uri): + page_text = request.form['page_text'] + if request.form['is_dos_nl'] == '0': + page_text = page_text.replace('\r\n', '\n') + + if 'do_save' in request.form or 'do_save_and_commit' in request.form: + logger.debug("Writing page: %s" % page.content_spec) + with page.source.openItem(page.content_item, 'w') as fp: + fp.write(page_text) + flash("%s was saved." % page.content_spec) + + scm = g.site.scm + if 'do_save_and_commit' in request.form and scm is not None: + message = request.form.get('commit_msg') + if not message: + message = "Edit %s" % page.content_spec + scm.commit([page.content_spec], message) + + if 'do_save' in request.form or 'do_save_and_commit' in request.form: + return _edit_page_form(page, uri) + + abort(400) + + +@foodtruck_bp.route('/upload/<path:uri>', methods=['POST']) +def upload_page_asset(uri): if 'ft-asset-file' not in request.files: - return redirect(url_for('.edit_page', slug=slug)) + return redirect(url_for('.edit_page', uri=uri)) asset_file = request.files['ft-asset-file'] if asset_file.filename == '': - return redirect(url_for('.edit_page', slug=slug)) + return redirect(url_for('.edit_page', uri=uri)) site = g.site - site_app = site.piecrust_app - rp = get_requested_page(site_app, - '/site/%s/%s' % (g.sites.current_site, slug)) + pcapp = site.piecrust_app + rp = get_requested_page(pcapp, + '/site/%s/%s' % (g.sites.current_site, uri)) page = rp.qualified_page if page is None: abort(404) @@ -83,29 +109,4 @@ asset_path = os.path.join(dirname, filename) logger.info("Uploading file to: %s" % asset_path) asset_file.save(asset_path) - return redirect(url_for('.edit_page', slug=slug)) - - -def _edit_page_form(page, slug, sitename): - data = {} - data['is_new_page'] = False - data['url_postback'] = url_for('.edit_page', slug=slug) - data['url_upload_asset'] = url_for('.upload_page_asset', slug=slug) - data['url_preview'] = page.getUri() - data['url_cancel'] = url_for( - '.list_source', source_name=page.source.name) - with open(page.path, 'r', encoding='utf8', newline='') as fp: - data['page_text'] = fp.read() - data['is_dos_nl'] = "1" if '\r\n' in data['page_text'] else "0" - - page.app.env.base_asset_url_format = \ - page.app.config.get('site/root') + '_asset/%path%' - assetor = Assetor(page, 'blah') - assets_data = [] - for n in assetor.allNames(): - assets_data.append({'name': n, 'url': assetor[n]}) - data['assets'] = assets_data - - with_menu_context(data) - return render_template('edit_page.html', **data) - + return redirect(url_for('.edit_page', uri=uri))