aboutsummaryrefslogtreecommitdiffstats
path: root/pysite/views/wiki/render.py
diff options
context:
space:
mode:
authorGravatar Gareth Coles <[email protected]>2018-04-05 14:14:05 +0100
committerGravatar Gareth Coles <[email protected]>2018-04-05 14:14:05 +0100
commit6a5de7cfdf5b419acd8258d5dbbd0b164662c140 (patch)
tree6a15fb90025330f615c954cb3a3aa7119410061e /pysite/views/wiki/render.py
parentThat was a little dumb. (diff)
More work towards the wiki
Diffstat (limited to 'pysite/views/wiki/render.py')
-rw-r--r--pysite/views/wiki/render.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/pysite/views/wiki/render.py b/pysite/views/wiki/render.py
new file mode 100644
index 00000000..01b5e6fa
--- /dev/null
+++ b/pysite/views/wiki/render.py
@@ -0,0 +1,34 @@
+# coding=utf-8
+from docutils.core import publish_parts
+from flask import jsonify
+from schema import Schema
+
+from pysite.base_route import APIView
+from pysite.constants import ALL_STAFF_ROLES, ValidationTypes
+from pysite.decorators import csrf, require_roles, api_params
+
+SCHEMA = Schema([{
+ "data": str
+}])
+
+
+class RenderView(APIView):
+ path = "/render" # "path" means that it accepts slashes
+ name = "render"
+
+ @csrf
+ @require_roles(*ALL_STAFF_ROLES)
+ @api_params(schema=SCHEMA, validation_type=ValidationTypes.json)
+ def post(self, data):
+ if not len(data):
+ return jsonify({"error": "No data!"})
+
+ data = data[0]["data"]
+ try:
+ html = publish_parts(
+ source=data, writer_name="html5", settings_overrides={"traceback": True, "halt_level": 2}
+ )["html_body"]
+
+ return jsonify({"data": html})
+ except Exception as e:
+ return jsonify({"error": str(e)})