Skip to content
Snippets Groups Projects
Commit cffcf182 authored by Jaden Diefenbaugh's avatar Jaden Diefenbaugh
Browse files

refactor compileRST code to Report model, actually use perms in CompileRST api views

parent cba7ae43
No related branches found
No related tags found
1 merge request!223Reports overhaul
......@@ -549,22 +549,24 @@ class ReportResultsAllExperimentsView(CommonContextMixin, generics.RetrieveAPIVi
class ReportRSTCompileView(BaseReportActionView):
permission_classes = BaseReportActionView.permission_classes + [IsEditable]
def get_queryset(self):
owner_name = self.kwargs.get('owner_name')
report_name = self.kwargs.get('report_name')
report = get_object_or_404(Report, author__username=owner_name, name=report_name)
self.check_object_permissions(self.request, report)
return report
def post(self, request, owner_name, report_name):
report = self.get_queryset()
result = {}
try:
from docutils.core import publish_parts
except ImportError:
if settings.DEBUG:
raise template.TemplateSyntaxError("Error in ReportRSTCompileView: The Python docutils library isn't installed.")
result['html_str'] = force_text(value)
else:
docutils_settings = getattr(settings, "RESTRUCTUREDTEXT_FILTER_SETTINGS", {})
parts = publish_parts(source=force_bytes(request.data['raw']), writer_name="html4css1", settings_overrides=docutils_settings)
result['html_str'] = force_text(parts["fragment"])
result['html_str'] = report.compileTextItem(request.data['raw'])
return Response(result)
#return BadRequestResponse(result)
#----------------------------------------------------------
......@@ -573,28 +575,19 @@ class ReportRSTCompileView(BaseReportActionView):
class ReportRSTCompileAnonView(views.APIView):
permission_classes = [permissions.AllowAny]
def post(self, request, number):
def get_queryset(self):
number = self.kwargs.get('number')
report = get_object_or_404(Report, number=int(number))
content = json.loads(report.content)
textBlockMap = request.data['raw'].split('|')
rstStr = ''
try:
rstStr = content['groups'][textBlockMap[0]]['reportItems'][int(textBlockMap[1])]['content']
except:
pass
self.check_object_permissions(self.request, report)
return report
def post(self, request, number):
report = self.get_queryset()
result = {}
try:
from docutils.core import publish_parts
except ImportError:
if settings.DEBUG:
raise template.TemplateSyntaxError("Error in ReportRSTCompileView: The Python docutils library isn't installed.")
result['html_str'] = force_text(value)
else:
docutils_settings = getattr(settings, "RESTRUCTUREDTEXT_FILTER_SETTINGS", {})
parts = publish_parts(source=force_bytes(rstStr), writer_name="html4css1", settings_overrides=docutils_settings)
result['html_str'] = force_text(parts["fragment"])
result['html_str'] = report.compileTextItem(request.data['raw'])
return Response(result)
#return BadRequestResponse(result)
......@@ -28,6 +28,11 @@
from django.db import models
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.utils.encoding import force_bytes, force_text
from django.conf import settings
from ..common.utils import validate_restructuredtext
from ..ui.templatetags.markup import restructuredtext
from ..algorithms.models import Algorithm
from ..experiments.models import Experiment
......@@ -312,3 +317,27 @@ class Report(models.Model):
alias_list = map(lambda x: report_content["alias_experiments"][x], experiments_list)
return experiments_list, alias_list
# the itemStr can either be:
def compileTextItem(self, itemStr):
content = json.loads(self.content)
rstStr = ''
try:
textBlockMap = itemStr.split('|')
rstStr = content['groups'][textBlockMap[0]]['reportItems'][int(textBlockMap[1])]['content']
except KeyError:
rstStr = itemStr
result = {}
try:
from docutils.core import publish_parts
except ImportError:
if settings.DEBUG:
raise template.TemplateSyntaxError("Error in ReportRSTCompileView: The Python docutils library isn't installed.")
return rstStr
else:
docutils_settings = getattr(settings, "RESTRUCTUREDTEXT_FILTER_SETTINGS", {})
parts = publish_parts(source=force_bytes(rstStr), writer_name="html4css1", settings_overrides=docutils_settings)
return force_text(parts["fragment"])
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment