diff --git a/cms/envs/common.py b/cms/envs/common.py index 6faecafec1..1767202141 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -90,6 +90,16 @@ TEMPLATE_CONTEXT_PROCESSORS = ( ################################# Jasmine ################################### JASMINE_TEST_DIRECTORY = PROJECT_ROOT + '/static/coffee' + +#################### CAPA External Code Evaluation ############################# +XQUEUE_INTERFACE = { + 'url': 'http://localhost:8888', + 'django_auth': {'username': 'local', + 'password': 'local'}, + 'basic_auth': None, +} + + ################################# Middleware ################################### # List of finder classes that know how to find static files in # various locations. diff --git a/common/lib/capa/capa/xqueue_interface.py b/common/lib/capa/capa/xqueue_interface.py index 70f086120e..2847968a89 100644 --- a/common/lib/capa/capa/xqueue_interface.py +++ b/common/lib/capa/capa/xqueue_interface.py @@ -7,13 +7,10 @@ import logging import requests import time -# TODO: Collection of parameters to be hooked into rest of edX system -XQUEUE_LMS_AUTH = { 'username': 'LMS', - 'password': 'PaloAltoCA' } -XQUEUE_URL = 'http://xqueue.edx.org' log = logging.getLogger('mitx.' + __name__) + def make_hashkey(seed=None): ''' Generate a string key by hashing @@ -58,15 +55,15 @@ def parse_xreply(xreply): return (return_code, content) -class XqueueInterface: +class XQueueInterface(object): ''' Interface to the external grading system ''' - def __init__(self, url=XQUEUE_URL, auth=XQUEUE_LMS_AUTH): + def __init__(self, url, django_auth, requests_auth=None): self.url = url - self.auth = auth - self.session = requests.session() + self.auth = django_auth + self.session = requests.session(auth=requests_auth) def send_to_queue(self, header, body, file_to_upload=None): ''' @@ -117,5 +114,3 @@ class XqueueInterface: return (1, 'unexpected HTTP status code [%d]' % r.status_code) return parse_xreply(r.text) - -qinterface = XqueueInterface() diff --git a/lms/djangoapps/courseware/module_render.py b/lms/djangoapps/courseware/module_render.py index 85eeb72c24..5184cd9866 100644 --- a/lms/djangoapps/courseware/module_render.py +++ b/lms/djangoapps/courseware/module_render.py @@ -7,9 +7,9 @@ from django.http import Http404 from django.http import HttpResponse from django.views.decorators.csrf import csrf_exempt +from capa.xqueue_interface import XQueueInterface from django.contrib.auth.models import User from xmodule.modulestore.django import modulestore -from capa.xqueue_interface import qinterface from mitxmako.shortcuts import render_to_string from models import StudentModule, StudentModuleCache from static_replace import replace_urls @@ -19,10 +19,23 @@ from xmodule_modifiers import replace_static_urls, add_histogram, wrap_xmodule from courseware.courses import (has_staff_access_to_course, has_staff_access_to_location) +from requests.auth import HTTPBasicAuth log = logging.getLogger("mitx.courseware") +if settings.XQUEUE_INTERFACE['basic_auth'] is not None: + requests_auth = HTTPBasicAuth(*settings.XQUEUE_INTERFACE['basic_auth']) +else: + requests_auth = None + +xqueue_interface = XQueueInterface( + settings.XQUEUE_INTERFACE['url'], + settings.XQUEUE_INTERFACE['django_auth'], + requests_auth, +) + + def make_track_function(request): ''' Make a tracking function that logs what happened. @@ -172,9 +185,9 @@ def get_module(user, request, location, student_module_cache, position=None): # TODO: Queuename should be derived from 'course_settings.json' of each course xqueue_default_queuename = descriptor.location.org + '-' + descriptor.location.course - xqueue = { 'interface': qinterface, - 'callback_url': xqueue_callback_url, - 'default_queuename': xqueue_default_queuename.replace(' ','_') } + xqueue = {'interface': xqueue_interface, + 'callback_url': xqueue_callback_url, + 'default_queuename': xqueue_default_queuename.replace(' ', '_')} def _get_module(location): return get_module(user, request, location, diff --git a/lms/envs/aws.py b/lms/envs/aws.py index 460ec18d27..c704fd164e 100644 --- a/lms/envs/aws.py +++ b/lms/envs/aws.py @@ -54,3 +54,5 @@ AWS_ACCESS_KEY_ID = AUTH_TOKENS["AWS_ACCESS_KEY_ID"] AWS_SECRET_ACCESS_KEY = AUTH_TOKENS["AWS_SECRET_ACCESS_KEY"] DATABASES = AUTH_TOKENS['DATABASES'] + +XQUEUE_INTERFACE = AUTH_TOKENS['XQUEUE_INTERFACE'] diff --git a/lms/envs/dev.py b/lms/envs/dev.py index 85850e81e3..882a82b8f0 100644 --- a/lms/envs/dev.py +++ b/lms/envs/dev.py @@ -53,6 +53,15 @@ CACHES = { } } +XQUEUE_INTERFACE = { + "url": "http://xqueue.sandbox.edx.org", + "django_auth": { + "username": "lms", + "password": "***REMOVED***" + }, + "basic_auth": ('anant', 'agarwal'), +} + # Make the keyedcache startup warnings go away CACHE_TIMEOUT = 0 diff --git a/lms/envs/test.py b/lms/envs/test.py index cd0e984940..187cb5c68e 100644 --- a/lms/envs/test.py +++ b/lms/envs/test.py @@ -50,6 +50,16 @@ COMMON_TEST_DATA_ROOT = COMMON_ROOT / "test" / "data" GITHUB_REPO_ROOT = ENV_ROOT / "data" +XQUEUE_INTERFACE = { + "url": "http://xqueue.sandbox.edx.org", + "django_auth": { + "username": "lms", + "password": "***REMOVED***" + }, + "basic_auth": ('anant', 'agarwal'), +} + + # TODO (cpennington): We need to figure out how envs/test.py can inject things # into common.py so that we don't have to repeat this sort of thing STATICFILES_DIRS = [