aboutsummaryrefslogtreecommitdiffstats
path: root/pysite/views/wiki/edit.py
diff options
context:
space:
mode:
Diffstat (limited to 'pysite/views/wiki/edit.py')
-rw-r--r--pysite/views/wiki/edit.py35
1 files changed, 23 insertions, 12 deletions
diff --git a/pysite/views/wiki/edit.py b/pysite/views/wiki/edit.py
index 1a100b8b..0a0af15b 100644
--- a/pysite/views/wiki/edit.py
+++ b/pysite/views/wiki/edit.py
@@ -1,9 +1,10 @@
# coding=utf-8
-from flask import url_for
+from docutils.core import publish_parts
+from flask import request, url_for
from werkzeug.utils import redirect
from pysite.base_route import RouteView
-from pysite.constants import ALL_STAFF_ROLES
+from pysite.constants import EDITOR_ROLES
from pysite.decorators import csrf, require_roles
from pysite.mixins import DBMixin
@@ -15,28 +16,38 @@ class EditView(RouteView, DBMixin):
table_name = "wiki"
table_primary_key = "slug"
- @require_roles(*ALL_STAFF_ROLES)
+ @require_roles(*EDITOR_ROLES)
def get(self, page):
rst = ""
title = ""
+ preview = "<p>Preview will appear here.</p>"
obj = self.db.get(self.table_name, page)
if obj:
rst = obj["rst"]
title = obj["title"]
+ preview = obj["html"]
- return self.render("wiki/page_edit.html", page=page, rst=rst, title=title)
+ return self.render("wiki/page_edit.html", page=page, rst=rst, title=title, preview=preview)
- @require_roles(*ALL_STAFF_ROLES)
+ @require_roles(*EDITOR_ROLES)
@csrf
def post(self, page):
- # rst = request.form["rst"]
- # obj = {
- # "slug": page,
- # "title": request.form["title"],
- # "rst": request.form["rst"],
- # "html": ""
- # }
+ rst = request.form["rst"]
+ obj = {
+ "slug": page,
+ "title": request.form["title"],
+ "rst": rst,
+ "html": publish_parts(
+ source=rst, writer_name="html5", settings_overrides={"halt_level": 2}
+ )["html_body"]
+ }
+
+ self.db.insert(
+ self.table_name,
+ obj,
+ conflict="replace"
+ )
return redirect(url_for("wiki.page", page=page), code=303) # Redirect, ensuring a GET