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)