add check code to dogfood; cleaned up interface to quickedit
This commit is contained in:
@@ -0,0 +1 @@
|
||||
from check import *
|
||||
|
||||
50
lib/dogfood/check.py
Normal file
50
lib/dogfood/check.py
Normal file
@@ -0,0 +1,50 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
from random import choice
|
||||
import string
|
||||
import traceback
|
||||
|
||||
from django.conf import settings
|
||||
import courseware.capa.capa_problem as lcp
|
||||
from dogfood.views import update_problem
|
||||
|
||||
def GenID(length=8, chars=string.letters + string.digits):
|
||||
return ''.join([choice(chars) for i in range(length)])
|
||||
|
||||
randomid = GenID()
|
||||
|
||||
def check_problem_code(ans,the_lcp,correct_answers,false_answers):
|
||||
"""
|
||||
ans = student's answer
|
||||
the_lcp = LoncapaProblem instance
|
||||
|
||||
returns dict {'ok':is_ok,'msg': message with iframe}
|
||||
"""
|
||||
pfn = "dog%s" % randomid
|
||||
pfn += the_lcp.problem_id.replace('filename','') # add problem ID to dogfood problem name
|
||||
update_problem(pfn,ans,filestore=the_lcp.system.filestore)
|
||||
msg = '<hr width="100%"/>'
|
||||
msg += '<iframe src="%s/dogfood/filename%s" width="95%%" frameborder="1">No iframe support!</iframe>' % (settings.MITX_ROOT_URL,pfn)
|
||||
msg += '<hr width="100%"/>'
|
||||
|
||||
is_ok = True
|
||||
try:
|
||||
# check correctness
|
||||
fp = the_lcp.system.filestore.open('problems/%s.xml' % pfn)
|
||||
test_lcp = lcp.LoncapaProblem(fp, '1', system=the_lcp.system)
|
||||
|
||||
if not (test_lcp.grade_answers(correct_answers)['1_2_1']=='correct'):
|
||||
is_ok = False
|
||||
if (test_lcp.grade_answers(false_answers)['1_2_1']=='correct'):
|
||||
is_ok = False
|
||||
except Exception,err:
|
||||
is_ok = False
|
||||
msg += "<p>Error: %s</p>" % str(err).replace('<','<')
|
||||
msg += "<p><pre>%s</pre></p>" % traceback.format_exc().replace('<','<')
|
||||
|
||||
ret = {'ok':is_ok,
|
||||
'msg': msg,
|
||||
}
|
||||
return ret
|
||||
|
||||
|
||||
@@ -65,11 +65,11 @@ def df_capa_problem(request, id=None):
|
||||
Accepts XML for a problem, inserts it into the dogfood course.xml.
|
||||
Returns rendered problem.
|
||||
'''
|
||||
print "WARNING: UNDEPLOYABLE CODE. FOR DEV USE ONLY."
|
||||
print "In deployed use, this will only edit on one server"
|
||||
print "We need a setting to disable for production where there is"
|
||||
print "a load balanacer"
|
||||
# "WARNING: UNDEPLOYABLE CODE. FOR DEV USE ONLY."
|
||||
|
||||
if settings.DEBUG:
|
||||
print '[lib.dogfood.df_capa_problem] id=%s' % id
|
||||
|
||||
if not 'coursename' in request.session:
|
||||
coursename = DOGFOOD_COURSENAME
|
||||
else:
|
||||
@@ -133,11 +133,8 @@ def df_capa_problem(request, id=None):
|
||||
if not xml:
|
||||
print "[lib.dogfood.df_capa_problem] problem xml not found!"
|
||||
|
||||
# add problem ID to list so that is_staff check can be bypassed
|
||||
request.session['dogfood_id'] = id
|
||||
|
||||
# hand over to quickedit to do the rest
|
||||
try:
|
||||
html = quickedit(request,id=id,qetemplate='dogfood.html',coursename=coursename)
|
||||
return html
|
||||
except Exception, err:
|
||||
print '[lib.dogfood.df_capa_problem] Error generating html on first pass: %s' % err
|
||||
|
||||
return quickedit(request,id=id,qetemplate='dogfood.html',coursename=coursename)
|
||||
|
||||
Reference in New Issue
Block a user