diff --git a/lms/djangoapps/open_ended_grading/controller_query_service.py b/common/lib/xmodule/xmodule/open_ended_grading_classes/controller_query_service.py similarity index 81% rename from lms/djangoapps/open_ended_grading/controller_query_service.py rename to common/lib/xmodule/xmodule/open_ended_grading_classes/controller_query_service.py index 1b124fc116..6e08971d9d 100644 --- a/lms/djangoapps/open_ended_grading/controller_query_service.py +++ b/common/lib/xmodule/xmodule/open_ended_grading_classes/controller_query_service.py @@ -1,7 +1,6 @@ import logging from xmodule.open_ended_grading_classes.grading_service_module import GradingService -from xmodule.x_module import ModuleSystem from mitxmako.shortcuts import render_to_string log = logging.getLogger(__name__) @@ -11,8 +10,9 @@ class ControllerQueryService(GradingService): """ Interface to staff grading backend. """ - def __init__(self, config): - config['system'] = ModuleSystem(None, None, None, render_to_string, None) + def __init__(self, config, system): + config['system'] = system + #ModuleSystem(None, None, None, render_to_string, None) super(ControllerQueryService, self).__init__(config) self.url = config['url'] + config['grading_controller'] self.login_url = self.url + '/login/' @@ -77,3 +77,16 @@ class ControllerQueryService(GradingService): response = self.post(self.take_action_on_flags_url, params) return response + +def convert_seconds_to_human_readable(seconds): + if seconds < 60: + human_string = "{0} seconds".format(seconds) + elif seconds < 60 * 60: + human_string = "{0} minutes".format(round(seconds/60,1)) + elif seconds < (24*60*60): + human_string = "{0} hours".format(round(seconds/(60*60),1)) + else: + human_string = "{0} days".format(round(seconds/(60*60*24),1)) + + eta_string = "{0}".format(human_string) + return eta_string diff --git a/common/lib/xmodule/xmodule/open_ended_grading_classes/openendedchild.py b/common/lib/xmodule/xmodule/open_ended_grading_classes/openendedchild.py index dd8fa2a54e..6b7954e198 100644 --- a/common/lib/xmodule/xmodule/open_ended_grading_classes/openendedchild.py +++ b/common/lib/xmodule/xmodule/open_ended_grading_classes/openendedchild.py @@ -23,6 +23,7 @@ from xmodule.xml_module import XmlDescriptor from xmodule.modulestore import Location from capa.util import * from peer_grading_service import PeerGradingService +import controller_query_service from datetime import datetime @@ -106,8 +107,10 @@ class OpenEndedChild(object): # completion (doesn't matter if you self-assessed correct/incorrect). self._max_score = static_data['max_score'] self.peer_gs = PeerGradingService(system.open_ended_grading_interface, system) + self.controller_qs = controller_query_service.ControllerQueryService(system.open_ended_grading_interface,system) self.system = system + self.location = location self.setup_response(system, location, definition, descriptor) def setup_response(self, system, location, definition, descriptor): @@ -446,3 +449,13 @@ class OpenEndedChild(object): error_message = error_string.format(count_required-count_graded, count_graded, count_required, student_sub_count) return success, allowed_to_submit, error_message + def get_eta(self): + response = self.controller_qs.check_for_eta(self.location.url()) + try: + response = json.loads(response) + except: + pass + + + + diff --git a/lms/djangoapps/open_ended_grading/open_ended_grading_util.py b/lms/djangoapps/open_ended_grading/open_ended_grading_util.py deleted file mode 100644 index 1826ecaedb..0000000000 --- a/lms/djangoapps/open_ended_grading/open_ended_grading_util.py +++ /dev/null @@ -1,12 +0,0 @@ -def convert_seconds_to_human_readable(seconds): - if seconds < 60: - human_string = "{0} seconds".format(seconds) - elif seconds < 60 * 60: - human_string = "{0} minutes".format(round(seconds/60,1)) - elif seconds < (24*60*60): - human_string = "{0} hours".format(round(seconds/(60*60),1)) - else: - human_string = "{0} days".format(round(seconds/(60*60*24),1)) - - eta_string = "{0}".format(human_string) - return eta_string \ No newline at end of file diff --git a/lms/djangoapps/open_ended_grading/open_ended_notifications.py b/lms/djangoapps/open_ended_grading/open_ended_notifications.py index c4054895d3..b4ca20079f 100644 --- a/lms/djangoapps/open_ended_grading/open_ended_notifications.py +++ b/lms/djangoapps/open_ended_grading/open_ended_notifications.py @@ -1,7 +1,7 @@ from django.conf import settings from xmodule.open_ended_grading_classes import peer_grading_service from staff_grading_service import StaffGradingService -from open_ended_grading.controller_query_service import ControllerQueryService +from xmodule.open_ended_grading_classes.controller_query_service import ControllerQueryService import json from student.models import unique_id_for_user from courseware.models import StudentModule @@ -93,7 +93,8 @@ def peer_grading_notifications(course, user): def combined_notifications(course, user): - controller_qs = ControllerQueryService(settings.OPEN_ENDED_GRADING_INTERFACE) + system = ModuleSystem(None, None, None, render_to_string, None) + controller_qs = ControllerQueryService(settings.OPEN_ENDED_GRADING_INTERFACE, system) student_id = unique_id_for_user(user) user_is_staff = has_access(user, course, 'staff') course_id = course.id diff --git a/lms/djangoapps/open_ended_grading/views.py b/lms/djangoapps/open_ended_grading/views.py index b19b526b0f..0cf498599d 100644 --- a/lms/djangoapps/open_ended_grading/views.py +++ b/lms/djangoapps/open_ended_grading/views.py @@ -11,7 +11,8 @@ from django.core.urlresolvers import reverse from student.models import unique_id_for_user from courseware.courses import get_course_with_access -from controller_query_service import ControllerQueryService +from xmodule.x_module import ModuleSystem +from xmodule.open_ended_grading_classes.controller_query_service import ControllerQueryService, convert_seconds_to_human_readable from xmodule.open_ended_grading_classes.grading_service_module import GradingServiceError import json from student.models import unique_id_for_user @@ -22,13 +23,13 @@ from xmodule.modulestore.django import modulestore from xmodule.modulestore import search from django.http import HttpResponse, Http404, HttpResponseRedirect -import open_ended_grading_util log = logging.getLogger(__name__) template_imports = {'urllib': urllib} -controller_qs = ControllerQueryService(settings.OPEN_ENDED_GRADING_INTERFACE) +system = ModuleSystem(None, None, None, render_to_string, None) +controller_qs = ControllerQueryService(settings.OPEN_ENDED_GRADING_INTERFACE, system) """ Reverses the URL from the name and the course id, and then adds a trailing slash if @@ -158,7 +159,7 @@ def student_problem_list(request, course_id): eta_string = "N/A" if eta_available: try: - eta_string = open_ended_grading_util.convert_seconds_to_human_readable(int(problem_list[i]['eta'])) + eta_string = convert_seconds_to_human_readable(int(problem_list[i]['eta'])) except: #This is a student_facing_error eta_string = "Error getting ETA."