aboutsummaryrefslogtreecommitdiffstats
path: root/pysite/views/wiki
diff options
context:
space:
mode:
Diffstat (limited to 'pysite/views/wiki')
-rw-r--r--pysite/views/wiki/edit.py35
-rw-r--r--pysite/views/wiki/page.py13
-rw-r--r--pysite/views/wiki/render.py4
3 files changed, 33 insertions, 19 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
diff --git a/pysite/views/wiki/page.py b/pysite/views/wiki/page.py
index 01c8fa8a..a7f60f02 100644
--- a/pysite/views/wiki/page.py
+++ b/pysite/views/wiki/page.py
@@ -1,8 +1,9 @@
# coding=utf-8
from flask import redirect, url_for
+from werkzeug.exceptions import NotFound
from pysite.base_route import RouteView
-from pysite.constants import ALL_STAFF_ROLES
+from pysite.constants import DEBUG_MODE, EDITOR_ROLES
from pysite.mixins import DBMixin
@@ -18,19 +19,21 @@ class PageView(RouteView, DBMixin):
if obj is None:
if self.is_staff():
- return redirect(url_for("wiki.edit", page=page))
+ return redirect(url_for("wiki.edit", page=page, can_edit=False))
- return self.render("wiki/page_missing.html", page=page)
- return self.render("wiki/page_view.html", page=page, data=obj)
+ raise NotFound()
+ return self.render("wiki/page_view.html", page=page, data=obj, can_edit=self.is_staff())
def is_staff(self):
+ if DEBUG_MODE:
+ return True
if not self.logged_in:
return False
roles = self.user_data.get("roles", [])
for role in roles:
- if role in ALL_STAFF_ROLES:
+ if role in EDITOR_ROLES:
return True
return False
diff --git a/pysite/views/wiki/render.py b/pysite/views/wiki/render.py
index 73c38731..131db1d3 100644
--- a/pysite/views/wiki/render.py
+++ b/pysite/views/wiki/render.py
@@ -7,7 +7,7 @@ from flask import jsonify
from schema import Schema
from pysite.base_route import APIView
-from pysite.constants import ALL_STAFF_ROLES, ValidationTypes
+from pysite.constants import EDITOR_ROLES, ValidationTypes
from pysite.decorators import api_params, csrf, require_roles
SCHEMA = Schema([{
@@ -22,7 +22,7 @@ class RenderView(APIView):
name = "render"
@csrf
- @require_roles(*ALL_STAFF_ROLES)
+ @require_roles(*EDITOR_ROLES)
@api_params(schema=SCHEMA, validation_type=ValidationTypes.json)
def post(self, data):
if not len(data):