aboutsummaryrefslogtreecommitdiffstats
path: root/pysite/views/wiki/render.py
diff options
context:
space:
mode:
authorGravatar Gareth Coles <[email protected]>2018-04-06 11:12:08 +0100
committerGravatar Gareth Coles <[email protected]>2018-04-06 11:13:16 +0100
commit02e40b76817b06816ae37510c2fde2a88aecea37 (patch)
tree1587ae82d2304efc4ce7fc01d6491266f2c9df4e /pysite/views/wiki/render.py
parent5XX error view non-werkzeug exception support (diff)
Updated wiki editing system with live-previewing
Diffstat (limited to 'pysite/views/wiki/render.py')
-rw-r--r--pysite/views/wiki/render.py33
1 files changed, 32 insertions, 1 deletions
diff --git a/pysite/views/wiki/render.py b/pysite/views/wiki/render.py
index d177a8b3..73c38731 100644
--- a/pysite/views/wiki/render.py
+++ b/pysite/views/wiki/render.py
@@ -1,5 +1,8 @@
# coding=utf-8
+import re
+
from docutils.core import publish_parts
+from docutils.utils import SystemMessage
from flask import jsonify
from schema import Schema
@@ -11,6 +14,8 @@ SCHEMA = Schema([{
"data": str
}])
+MESSAGE_REGEX = re.compile(r"<string>:(\d+): \([A-Z]+/\d\) (.*)")
+
class RenderView(APIView):
path = "/render" # "path" means that it accepts slashes
@@ -26,9 +31,35 @@ class RenderView(APIView):
data = data[0]["data"]
try:
html = publish_parts(
- source=data, writer_name="html5", settings_overrides={"traceback": True, "halt_level": 2}
+ source=data, writer_name="html5", settings_overrides={"halt_level": 2}
)["html_body"]
return jsonify({"data": html})
+ except SystemMessage as e:
+ lines = str(e)
+ data = {
+ "error": lines,
+ "error_lines": []
+ }
+
+ if "\n" in lines:
+ lines = lines.split("\n")
+ else:
+ lines = [lines]
+
+ for message in lines:
+ match = MESSAGE_REGEX.match(message)
+
+ if match:
+ data["error_lines"].append(
+ {
+ "row": int(match.group(1)) - 1,
+ "column": 0,
+ "type": "error",
+ "text": match.group(2)
+ }
+ )
+
+ return jsonify(data)
except Exception as e:
return jsonify({"error": str(e)})