diff options
Diffstat (limited to 'pysite/views')
| -rw-r--r-- | pysite/views/error_handlers/http_4xx.py | 6 | ||||
| -rw-r--r-- | pysite/views/error_handlers/http_5xx.py | 6 | ||||
| -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 |
5 files changed, 38 insertions, 26 deletions
diff --git a/pysite/views/error_handlers/http_4xx.py b/pysite/views/error_handlers/http_4xx.py index 48ae7f0f..2d6c54c6 100644 --- a/pysite/views/error_handlers/http_4xx.py +++ b/pysite/views/error_handlers/http_4xx.py @@ -11,7 +11,6 @@ class Error400View(ErrorView): error_code = range(400, 430) def __init__(self): - # Direct errors for all methods at self.return_error methods = [ 'get', 'post', 'put', @@ -27,7 +26,6 @@ class Error400View(ErrorView): return self.render( "errors/error.html", code=error.code, req=request, error_title=error_desc, - error_message=error_desc + - " If you believe we have made a mistake, please " - "<a href='https://github.com/discord-python/site/issues'>open an issue on our GitHub</a>." + error_message=f"{error_desc} If you believe we have made a mistake, please " + "<a href='https://github.com/discord-python/site/issues'>open an issue on our GitHub</a>." ), error.code diff --git a/pysite/views/error_handlers/http_5xx.py b/pysite/views/error_handlers/http_5xx.py index 14c016c5..46c65e38 100644 --- a/pysite/views/error_handlers/http_5xx.py +++ b/pysite/views/error_handlers/http_5xx.py @@ -36,7 +36,7 @@ class Error500View(ErrorView): return self.render( "errors/error.html", code=error.code, req=request, error_title=error_desc, error_message="An error occurred while processing this request, please try " - "again later. If you believe we have made a mistake, please " - "<a href='https://github.com/discord-python/site/issues'>file an issue on our" - " GitHub</a>." + "again later. If you believe we have made a mistake, please " + "<a href='https://github.com/discord-python/site/issues'>file an issue on our" + " GitHub</a>." ), error.code 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): |