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