comparison foodtruck/views/edit.py @ 587:d4a01a023998

admin: Add "FoodTruck" admin panel from the side experiment project.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 16 Jan 2016 14:24:35 -0800
parents
children 3cec8634209a
comparison
equal deleted inserted replaced
586:59268b4d8c71 587:d4a01a023998
1 import os.path
2 import logging
3 from flask import (
4 g, request, abort, render_template, url_for, flash)
5 from flask.ext.login import login_required
6 from piecrust.rendering import (
7 PageRenderingContext, render_page)
8 from piecrust.serving.util import get_requested_page
9 from ..views import with_menu_context
10 from ..web import app
11
12
13 logger = logging.getLogger(__name__)
14
15
16 @app.route('/edit/', defaults={'slug': ''}, methods=['GET', 'POST'])
17 @app.route('/edit/<path:slug>', methods=['GET', 'POST'])
18 @login_required
19 def edit_page(slug):
20 site = g.sites.get()
21 site_app = site.piecrust_app
22 rp = get_requested_page(site_app,
23 '/site/%s/%s' % (g.sites.current_site, slug))
24 page = rp.qualified_page
25 if page is None:
26 abort(404)
27
28 if request.method == 'POST':
29 page_text = request.form['page_text']
30 if request.form['is_dos_nl'] == '0':
31 page_text = page_text.replace('\r\n', '\n')
32
33 if 'do_preview' in request.form or 'do_save' in request.form or \
34 'do_save_and_commit' in request.form:
35 logger.debug("Writing page: %s" % page.path)
36 with open(page.path, 'w', encoding='utf8') as fp:
37 fp.write(page_text)
38 flash("%s was saved." % os.path.relpath(
39 page.path, site_app.root_dir))
40
41 if 'do_save_and_commit' in request.form:
42 author = g.config.get('scm/username')
43 message = "Edit %s" % os.path.relpath(
44 page.path, site_app.root_dir)
45 site.scm.commit([page.path], author, message)
46
47 if 'do_preview' in request.form:
48 return _preview_page(page)
49
50 if 'do_save' in request.form or 'do_save_and_commit' in request.form:
51 return _edit_page_form(page)
52
53 abort(400)
54
55 return _edit_page_form(page)
56
57
58 def _preview_page(page):
59 render_ctx = PageRenderingContext(page, force_render=True)
60 rp = render_page(render_ctx)
61 return rp.content
62
63
64 def _edit_page_form(page):
65 data = {}
66 data['is_new_page'] = False
67 data['url_cancel'] = url_for('list_source', source_name=page.source.name)
68 with open(page.path, 'r', encoding='utf8') as fp:
69 data['page_text'] = fp.read()
70 data['is_dos_nl'] = "1" if '\r\n' in data['page_text'] else "0"
71
72 with_menu_context(data)
73 return render_template('edit_page.html', **data)
74