diff options
author | 2018-04-05 14:14:05 +0100 | |
---|---|---|
committer | 2018-04-05 14:14:05 +0100 | |
commit | 6a5de7cfdf5b419acd8258d5dbbd0b164662c140 (patch) | |
tree | 6a15fb90025330f615c954cb3a3aa7119410061e /pysite/views/wiki/render.py | |
parent | That 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.py | 34 |
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)}) |