Pass course-run-specific resource limits to codejail

The limits can be defined in settings.CODE_JAIL['limits_overrides'],
which is a dict mapping context ids (generally, course run keys)
to overrides to be applied to settings.CODE_JAIL['limits'].

This will allow us to temporarily alter the codejail limits
for certain contexts in order to enable, for example,
a certain course run's tasks to run longer while a large exam's
grades are recomputed.

TNL-7649
This commit is contained in:
Kyle McCormick
2020-10-29 15:21:47 -04:00
committed by Kyle McCormick
parent a82ce035eb
commit 758c2b02a1
8 changed files with 153 additions and 8 deletions

View File

@@ -17,7 +17,14 @@ from openedx.core.djangolib.markup import HTML
@login_required
@ensure_csrf_cookie
def run_python(request):
"""A page to allow testing the Python sandbox on a production server."""
"""
A page to allow testing the Python sandbox on a production server.
Runs in the override context "debug_run_python", so resource limits with come first from:
CODE_JAIL['limit_overrides']['debug_run_python']
and then from:
CODE_JAIL['limits']
"""
if not request.user.is_staff:
raise Http404
c = {}
@@ -27,7 +34,7 @@ def run_python(request):
py_code = c['code'] = request.POST.get('code')
g = {}
try:
safe_exec(py_code, g)
safe_exec(py_code, g, limit_overrides_context="debug_run_python")
except Exception: # pylint: disable=broad-except
c['results'] = traceback.format_exc()
else: