diff options
Diffstat (limited to 'pysite/views/wiki')
| -rw-r--r-- | pysite/views/wiki/edit.py | 35 | ||||
| -rw-r--r-- | pysite/views/wiki/page.py | 13 | ||||
| -rw-r--r-- | pysite/views/wiki/render.py | 4 | 
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): | 
