Mercurial > piecrust2
comparison piecrust/admin/views/edit.py @ 951:c50ff76e0596
admin: Fix old API calls and bugs when editing pages.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Thu, 05 Oct 2017 00:28:34 -0700 |
parents | 7ecb946bfafd |
children | a1c6050c9801 |
comparison
equal
deleted
inserted
replaced
950:18d6ac20a132 | 951:c50ff76e0596 |
---|---|
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={'url': ''}, methods=['GET', 'POST']) |
17 @foodtruck_bp.route('/edit/<path:slug>', methods=['GET', 'POST']) | 17 @foodtruck_bp.route('/edit/<path:url>', methods=['GET', 'POST']) |
18 @login_required | 18 @login_required |
19 def edit_page(slug): | 19 def edit_page(url): |
20 site = g.site | 20 site = g.site |
21 site_app = site.piecrust_app | 21 site_app = site.piecrust_app |
22 rp = get_requested_page(site_app, | 22 rp = get_requested_page(site_app, site.make_url('/preview/%s' % url)) |
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 page_text = request.form['page_text'] |
30 if request.form['is_dos_nl'] == '0': | 29 if request.form['is_dos_nl'] == '0': |
31 page_text = page_text.replace('\r\n', '\n') | 30 page_text = page_text.replace('\r\n', '\n') |
32 | 31 |
32 page_spec = page.content_spec | |
33 | |
33 if 'do_save' in request.form or 'do_save_and_commit' in request.form: | 34 if 'do_save' in request.form or 'do_save_and_commit' in request.form: |
34 logger.debug("Writing page: %s" % page.path) | 35 logger.debug("Writing page: %s" % page_spec) |
35 with open(page.path, 'w', encoding='utf8', newline='') as fp: | 36 with page.source.openItem(page.content_item, 'w', |
37 encoding='utf8', newline='') as fp: | |
36 fp.write(page_text) | 38 fp.write(page_text) |
37 flash("%s was saved." % os.path.relpath( | 39 flash("%s was saved." % page_spec) |
38 page.path, site_app.root_dir)) | |
39 | 40 |
40 if 'do_save_and_commit' in request.form: | 41 if 'do_save_and_commit' in request.form: |
41 message = request.form.get('commit_msg') | 42 message = request.form.get('commit_msg') |
42 if not message: | 43 if not message: |
43 message = "Edit %s" % os.path.relpath( | 44 message = "Edit %s" % page_spec |
44 page.path, site_app.root_dir) | |
45 if site.scm: | 45 if site.scm: |
46 commit_paths = [page.path] | 46 commit_paths = [page_spec] |
47 assets_dir = os.path.splitext(page.path)[0] + '-assets' | 47 assets_dir = os.path.splitext(page_spec)[0] + '-assets' |
48 if os.path.isdir(assets_dir): | 48 if os.path.isdir(assets_dir): |
49 commit_paths += list(os.listdir(assets_dir)) | 49 commit_paths += list(os.listdir(assets_dir)) |
50 site.scm.commit(commit_paths, message) | 50 site.scm.commit(commit_paths, message) |
51 | 51 |
52 if 'do_save' in request.form or 'do_save_and_commit' in request.form: | 52 if 'do_save' in request.form or 'do_save_and_commit' in request.form: |
53 return _edit_page_form(page, slug, site.name) | 53 return _edit_page_form(page, url) |
54 | 54 |
55 abort(400) | 55 abort(400) |
56 | 56 |
57 return _edit_page_form(page, slug, site.name) | 57 return _edit_page_form(page, url) |
58 | 58 |
59 | 59 |
60 @foodtruck_bp.route('/upload/<path:slug>', methods=['POST']) | 60 @foodtruck_bp.route('/upload/<path:url>', methods=['POST']) |
61 def upload_page_asset(slug): | 61 def upload_page_asset(url): |
62 if 'ft-asset-file' not in request.files: | 62 if 'ft-asset-file' not in request.files: |
63 return redirect(url_for('.edit_page', slug=slug)) | 63 return redirect(url_for('.edit_page', url=url)) |
64 | 64 |
65 asset_file = request.files['ft-asset-file'] | 65 asset_file = request.files['ft-asset-file'] |
66 if asset_file.filename == '': | 66 if asset_file.filename == '': |
67 return redirect(url_for('.edit_page', slug=slug)) | 67 return redirect(url_for('.edit_page', url=url)) |
68 | 68 |
69 site = g.site | 69 site = g.site |
70 site_app = site.piecrust_app | 70 site_app = site.piecrust_app |
71 rp = get_requested_page(site_app, | 71 rp = get_requested_page(site_app, site.make_url('/preview/%s' % url)) |
72 '/site/%s/%s' % (g.sites.current_site, slug)) | 72 page = rp.page |
73 page = rp.qualified_page | |
74 if page is None: | 73 if page is None: |
75 abort(404) | 74 abort(404) |
76 | 75 |
77 filename = asset_file.filename | 76 filename = asset_file.filename |
78 if request.form['ft-asset-name']: | 77 if request.form['ft-asset-name']: |
85 os.makedirs(dirname) | 84 os.makedirs(dirname) |
86 | 85 |
87 asset_path = os.path.join(dirname, filename) | 86 asset_path = os.path.join(dirname, filename) |
88 logger.info("Uploading file to: %s" % asset_path) | 87 logger.info("Uploading file to: %s" % asset_path) |
89 asset_file.save(asset_path) | 88 asset_file.save(asset_path) |
90 return redirect(url_for('.edit_page', slug=slug)) | 89 return redirect(url_for('.edit_page', url=url)) |
91 | 90 |
92 | 91 |
93 def _edit_page_form(page, slug, sitename): | 92 def _edit_page_form(page, url): |
94 data = {} | 93 data = {} |
95 data['is_new_page'] = False | 94 data['is_new_page'] = False |
96 data['url_postback'] = url_for('.edit_page', slug=slug) | 95 data['url_postback'] = url_for('.edit_page', url=url) |
97 data['url_upload_asset'] = url_for('.upload_page_asset', slug=slug) | 96 data['url_upload_asset'] = url_for('.upload_page_asset', url=url) |
98 data['url_preview'] = page.getUri() | 97 data['url_preview'] = url_for('.preview_page', url=url) |
99 data['url_cancel'] = url_for( | 98 data['url_cancel'] = url_for( |
100 '.list_source', source_name=page.source.name) | 99 '.list_source', source_name=page.source.name) |
101 with open(page.path, 'r', encoding='utf8', newline='') as fp: | 100 with page.source.openItem(page.content_item, 'r', |
101 encoding='utf8', newline='') as fp: | |
102 data['page_text'] = fp.read() | 102 data['page_text'] = fp.read() |
103 data['is_dos_nl'] = "1" if '\r\n' in data['page_text'] else "0" | 103 data['is_dos_nl'] = "1" if '\r\n' in data['page_text'] else "0" |
104 | 104 |
105 page.app.env.base_asset_url_format = \ | 105 page.app.env.base_asset_url_format = \ |
106 page.app.config.get('site/root') + '_asset/%path%' | 106 page.app.config.get('site/root') + '_asset/%path%' |
107 assetor = Assetor(page, 'blah') | 107 assetor = Assetor(page) |
108 assets_data = [] | 108 assets_data = [] |
109 for n in assetor.allNames(): | 109 for n in assetor._getAssetNames(): |
110 assets_data.append({'name': n, 'url': assetor[n]}) | 110 assets_data.append({'name': n, 'url': assetor[n]}) |
111 data['assets'] = assets_data | 111 data['assets'] = assets_data |
112 | 112 |
113 with_menu_context(data) | 113 with_menu_context(data) |
114 return render_template('edit_page.html', **data) | 114 return render_template('edit_page.html', **data) |