Merge master

This commit is contained in:
Arjun Singh
2012-08-06 18:48:17 -04:00
7 changed files with 48 additions and 30 deletions

View File

@@ -31,7 +31,6 @@ import xqueue_interface
log = logging.getLogger('mitx.' + __name__)
qinterface = xqueue_interface.XqueueInterface()
#-----------------------------------------------------------------------------
# Exceptions
@@ -981,7 +980,7 @@ class CodeResponse(LoncapaResponse):
def setup_response(self):
xml = self.xml
self.queue_name = xml.get('queuename', self.system.xqueue_default_queuename)
self.queue_name = xml.get('queuename', self.system.xqueue['default_queuename'])
answer = xml.find('answer')
if answer is not None:
@@ -1029,10 +1028,11 @@ class CodeResponse(LoncapaResponse):
# Prepare xqueue request
#------------------------------------------------------------
qinterface = self.system.xqueue['interface']
# Generate header
queuekey = xqueue_interface.make_hashkey(self.system.seed)
xheader = xqueue_interface.make_xheader(lms_callback_url=self.system.xqueue_callback_url,
queuekey = xqueue_interface.make_hashkey(str(self.system.seed)+self.answer_id)
xheader = xqueue_interface.make_xheader(lms_callback_url=self.system.xqueue['callback_url'],
lms_key=queuekey,
queue_name=self.queue_name)
@@ -1061,7 +1061,7 @@ class CodeResponse(LoncapaResponse):
msg='Unable to deliver your submission to grader. (Reason: %s.) Please try again later.' % msg)
else:
# Non-null CorrectMap['queuekey'] indicates that the problem has been queued
cmap.set(self.answer_id, queuekey=queuekey, msg='Submitted to grader')
cmap.set(self.answer_id, queuekey=queuekey, msg='Submitted to grader. (Queue length: %s)' % msg)
return cmap

View File

@@ -39,6 +39,7 @@
lineWrapping: true,
indentUnit: "${tabsize}",
tabSize: "${tabsize}",
indentWithTabs: true,
smartIndent: false
});
});
@@ -48,7 +49,7 @@
border: 1px solid black;
font-size: 14px;
line-height: 18px;
resize: vertical;
resize: both;
}
</style>
</section>

View File

@@ -47,7 +47,12 @@ def parse_xreply(xreply):
'content': Message from xqueue (string)
}
'''
xreply = json.loads(xreply)
try:
xreply = json.loads(xreply)
except ValueError, err:
log.error(err)
return (1, 'unexpected reply from server')
return_code = xreply['return_code']
content = xreply['content']
return (return_code, content)
@@ -61,7 +66,7 @@ class XqueueInterface:
def __init__(self, url=XQUEUE_URL, auth=XQUEUE_LMS_AUTH):
self.url = url
self.auth = auth
self.s = requests.session()
self.session = requests.session()
self._login()
def send_to_queue(self, header, body, file_to_upload=None):
@@ -86,29 +91,32 @@ class XqueueInterface:
return (error, msg)
def _login(self):
try:
r = self.s.post(self.url+'/xqueue/login/', data={ 'username': self.auth['username'],
'password': self.auth['password'] })
except requests.exceptions.ConnectionError, err:
log.error(err)
return (1, 'cannot connect to server')
return parse_xreply(r.text)
def _login(self):
payload = { 'username': self.auth['username'],
'password': self.auth['password'] }
return self._http_post(self.url+'/xqueue/login/', payload)
def _send_to_queue(self, header, body, file_to_upload=None):
payload = {'xqueue_header': header,
'xqueue_body' : body}
files = None
if file_to_upload is not None:
files = { file_to_upload.name: file_to_upload }
return self._http_post(self.url+'/xqueue/submit/', payload, files)
def _http_post(self, url, data, files=None):
try:
r = self.s.post(self.url+'/xqueue/submit/', data=payload, files=files)
r = self.session.post(url, data=data, files=files)
except requests.exceptions.ConnectionError, err:
log.error(err)
return (1, 'cannot connect to server')
return (1, 'cannot connect to server')
if r.status_code not in [200]:
return (1, 'unexpected HTTP status code [%d]' % r.status_code)
return parse_xreply(r.text)
qinterface = XqueueInterface()