Skip to content

Commit 85537c8

Browse files
feat(numericalInput): endpoint added to validate a numerical input
1 parent f32f8e8 commit 85537c8

2 files changed

Lines changed: 20 additions & 2 deletions

File tree

cms/djangoapps/contentstore/api/urls.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from django.conf import settings
55
from django.urls import re_path
66

7-
from cms.djangoapps.contentstore.api.views import course_import, course_quality, course_validation
7+
from cms.djangoapps.contentstore.api.views import course_import, course_quality, course_validation, utils
88

99

1010
app_name = 'contentstore'
@@ -16,5 +16,7 @@
1616
course_validation.CourseValidationView.as_view(), name='course_validation'),
1717
re_path(fr'^v1/quality/{settings.COURSE_ID_PATTERN}/$',
1818
course_quality.CourseQualityView.as_view(), name='course_quality'),
19+
re_path(r'^v1/validate/numerical-input/$',
20+
utils.NumericalInputValidationView.as_view(),name='numerical_input_validation'),
1921

2022
]

cms/djangoapps/contentstore/api/views/utils.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,16 @@
77

88
from opaque_keys.edx.keys import CourseKey
99
from rest_framework import status
10+
from rest_framework.response import Response
1011
from rest_framework.generics import GenericAPIView
1112

1213
from common.djangoapps.student.auth import has_course_author_access
1314
from openedx.core.djangoapps.util.forms import to_bool
1415
from openedx.core.lib.api.view_utils import DeveloperErrorViewMixin, view_auth_classes
1516
from openedx.core.lib.cache_utils import request_cached
1617
from xmodule.modulestore.django import modulestore # lint-amnesty, pylint: disable=wrong-import-order
17-
18+
from calc.preview import latex_preview
19+
import pyparsing
1820

1921
@view_auth_classes()
2022
class BaseCourseView(DeveloperErrorViewMixin, GenericAPIView):
@@ -135,3 +137,17 @@ def _wrapper_view(self, request, course_id, *args, **kwargs):
135137
)
136138
return view(self, request, course_key, *args, **kwargs)
137139
return _wrapper_view
140+
141+
class NumericalInputValidationView(GenericAPIView):
142+
143+
def post(self, request):
144+
result = {'preview': '',
145+
'is_valid': True,
146+
'error': ''}
147+
try:
148+
result['preview'] = latex_preview(request.data.get('formula'))
149+
except pyparsing.ParseException:
150+
result["error"] = "Sorry, couldn't parse formula"
151+
result['is_valid'] = False
152+
return Response(result, status=400)
153+
return Response(result)

0 commit comments

Comments
 (0)