Mercurial > piecrust2
comparison 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 |
comparison
equal
deleted
inserted
replaced
885:13e8b50a2113 | 886:dcdec4b951a1 |
---|---|
11 | 11 |
12 | 12 |
13 logger = logging.getLogger(__name__) | 13 logger = logging.getLogger(__name__) |
14 | 14 |
15 | 15 |
16 @foodtruck_bp.route('/edit/', defaults={'slug': ''}, methods=['GET', 'POST']) | 16 @foodtruck_bp.route('/edit/', defaults={'uri': ''}, methods=['GET', 'POST']) |
17 @foodtruck_bp.route('/edit/<path:slug>', methods=['GET', 'POST']) | 17 @foodtruck_bp.route('/edit/<path:uri>', methods=['GET', 'POST']) |
18 @login_required | 18 @login_required |
19 def edit_page(slug): | 19 def edit_page(uri): |
20 site = g.site | 20 site = g.site |
21 site_app = site.piecrust_app | 21 pcapp = site.piecrust_app |
22 rp = get_requested_page(site_app, | 22 rp = get_requested_page(pcapp, '%s/preview/%s' % (site.url_prefix, uri)) |
23 '/site/%s/%s' % (g.sites.current_site, slug)) | 23 page = rp.page |
24 page = rp.qualified_page | |
25 if page is None: | 24 if page is None: |
26 abort(404) | 25 abort(404) |
27 | 26 |
28 if request.method == 'POST': | 27 if request.method == 'POST': |
29 page_text = request.form['page_text'] | 28 return _submit_page_form(page, uri) |
30 if request.form['is_dos_nl'] == '0': | |
31 page_text = page_text.replace('\r\n', '\n') | |
32 | 29 |
33 if 'do_save' in request.form or 'do_save_and_commit' in request.form: | 30 return _edit_page_form(page, uri) |
34 logger.debug("Writing page: %s" % page.path) | |
35 with open(page.path, 'w', encoding='utf8', newline='') as fp: | |
36 fp.write(page_text) | |
37 flash("%s was saved." % os.path.relpath( | |
38 page.path, site_app.root_dir)) | |
39 | |
40 if 'do_save_and_commit' in request.form: | |
41 message = request.form.get('commit_msg') | |
42 if not message: | |
43 message = "Edit %s" % os.path.relpath( | |
44 page.path, site_app.root_dir) | |
45 if site.scm: | |
46 site.scm.commit([page.path], message) | |
47 | |
48 if 'do_save' in request.form or 'do_save_and_commit' in request.form: | |
49 return _edit_page_form(page, slug, site.name) | |
50 | |
51 abort(400) | |
52 | |
53 return _edit_page_form(page, slug, site.name) | |
54 | 31 |
55 | 32 |
56 @foodtruck_bp.route('/upload/<path:slug>', methods=['POST']) | 33 def _edit_page_form(page, uri): |
57 def upload_page_asset(slug): | 34 data = {} |
35 data['is_new_page'] = False | |
36 data['url_postback'] = url_for('.edit_page', uri=uri) | |
37 data['url_upload_asset'] = url_for('.upload_page_asset', uri=uri) | |
38 data['url_preview'] = page.getUri() | |
39 data['url_cancel'] = url_for( | |
40 '.list_source', source_name=page.source.name) | |
41 | |
42 with page.source.openItem(page.content_item, 'r') as fp: | |
43 data['page_text'] = fp.read() | |
44 data['is_dos_nl'] = "1" if '\r\n' in data['page_text'] else "0" | |
45 | |
46 assetor = Assetor(page) | |
47 assets_data = [] | |
48 for i, n in enumerate(assetor._getAssetNames()): | |
49 assets_data.append({'name': n, 'url': assetor[i]}) | |
50 data['assets'] = assets_data | |
51 | |
52 data['has_scm'] = (g.site.scm is not None) | |
53 | |
54 with_menu_context(data) | |
55 return render_template('edit_page.html', **data) | |
56 | |
57 | |
58 def _submit_page_form(page, uri): | |
59 page_text = request.form['page_text'] | |
60 if request.form['is_dos_nl'] == '0': | |
61 page_text = page_text.replace('\r\n', '\n') | |
62 | |
63 if 'do_save' in request.form or 'do_save_and_commit' in request.form: | |
64 logger.debug("Writing page: %s" % page.content_spec) | |
65 with page.source.openItem(page.content_item, 'w') as fp: | |
66 fp.write(page_text) | |
67 flash("%s was saved." % page.content_spec) | |
68 | |
69 scm = g.site.scm | |
70 if 'do_save_and_commit' in request.form and scm is not None: | |
71 message = request.form.get('commit_msg') | |
72 if not message: | |
73 message = "Edit %s" % page.content_spec | |
74 scm.commit([page.content_spec], message) | |
75 | |
76 if 'do_save' in request.form or 'do_save_and_commit' in request.form: | |
77 return _edit_page_form(page, uri) | |
78 | |
79 abort(400) | |
80 | |
81 | |
82 @foodtruck_bp.route('/upload/<path:uri>', methods=['POST']) | |
83 def upload_page_asset(uri): | |
58 if 'ft-asset-file' not in request.files: | 84 if 'ft-asset-file' not in request.files: |
59 return redirect(url_for('.edit_page', slug=slug)) | 85 return redirect(url_for('.edit_page', uri=uri)) |
60 | 86 |
61 asset_file = request.files['ft-asset-file'] | 87 asset_file = request.files['ft-asset-file'] |
62 if asset_file.filename == '': | 88 if asset_file.filename == '': |
63 return redirect(url_for('.edit_page', slug=slug)) | 89 return redirect(url_for('.edit_page', uri=uri)) |
64 | 90 |
65 site = g.site | 91 site = g.site |
66 site_app = site.piecrust_app | 92 pcapp = site.piecrust_app |
67 rp = get_requested_page(site_app, | 93 rp = get_requested_page(pcapp, |
68 '/site/%s/%s' % (g.sites.current_site, slug)) | 94 '/site/%s/%s' % (g.sites.current_site, uri)) |
69 page = rp.qualified_page | 95 page = rp.qualified_page |
70 if page is None: | 96 if page is None: |
71 abort(404) | 97 abort(404) |
72 | 98 |
73 filename = asset_file.filename | 99 filename = asset_file.filename |
81 os.makedirs(dirname) | 107 os.makedirs(dirname) |
82 | 108 |
83 asset_path = os.path.join(dirname, filename) | 109 asset_path = os.path.join(dirname, filename) |
84 logger.info("Uploading file to: %s" % asset_path) | 110 logger.info("Uploading file to: %s" % asset_path) |
85 asset_file.save(asset_path) | 111 asset_file.save(asset_path) |
86 return redirect(url_for('.edit_page', slug=slug)) | 112 return redirect(url_for('.edit_page', uri=uri)) |
87 | |
88 | |
89 def _edit_page_form(page, slug, sitename): | |
90 data = {} | |
91 data['is_new_page'] = False | |
92 data['url_postback'] = url_for('.edit_page', slug=slug) | |
93 data['url_upload_asset'] = url_for('.upload_page_asset', slug=slug) | |
94 data['url_preview'] = page.getUri() | |
95 data['url_cancel'] = url_for( | |
96 '.list_source', source_name=page.source.name) | |
97 with open(page.path, 'r', encoding='utf8', newline='') as fp: | |
98 data['page_text'] = fp.read() | |
99 data['is_dos_nl'] = "1" if '\r\n' in data['page_text'] else "0" | |
100 | |
101 page.app.env.base_asset_url_format = \ | |
102 page.app.config.get('site/root') + '_asset/%path%' | |
103 assetor = Assetor(page, 'blah') | |
104 assets_data = [] | |
105 for n in assetor.allNames(): | |
106 assets_data.append({'name': n, 'url': assetor[n]}) | |
107 data['assets'] = assets_data | |
108 | |
109 with_menu_context(data) | |
110 return render_template('edit_page.html', **data) | |
111 |