def test_set_score(self): api.set_score(self.usage_key, self.learner.id, 11, 22, override_user_id=self.staff.id) score = api.get_score(self.usage_key, self.learner.id) assert score['score'] == 11 assert score['who_last_graded'] == self.staff.username api.set_score(UsageKey.from_string(self.usage_key), self.learner.id, 12, 22, override_user_id=self.staff.id) score = api.get_score(self.usage_key, self.learner.id) assert score['score'] == 12 score = api.get_score(self.usage_key, 11) assert score is None
def student_view(self, context=None): """ The primary view of the StaffGradedXBlock, shown to students when viewing courses. """ frag = Fragment() frag.add_css(self.resource_string("static/css/staff_graded.css")) loader = ResourceLoader(__name__) _ = self.runtime.service(self, "i18n").ugettext # Add i18n js statici18n_js_url = self._get_statici18n_js_url() if statici18n_js_url: frag.add_javascript_url(self.runtime.local_resource_url(self, statici18n_js_url)) frag.add_javascript(self.resource_string("static/js/src/staff_graded.js")) frag.initialize_js('StaffGradedXBlock') context['id'] = self.location.html_id() context['instructions'] = markdown.markdown(self.instructions) context['display_name'] = self.display_name context['is_staff'] = self.runtime.user_is_staff course_id = self.location.course_key context['available_cohorts'] = [cohort.name for cohort in get_course_cohorts(course_id=course_id)] context['available_tracks'] = [ (mode.slug, mode.name) for mode in modes_for_course(course_id, only_selectable=False) ] if context['is_staff']: from crum import get_current_request from django.middleware.csrf import get_token context['import_url'] = self.runtime.handler_url(self, "csv_import_handler") context['export_url'] = self.runtime.handler_url(self, "csv_export_handler") context['poll_url'] = self.runtime.handler_url(self, "get_results_handler") context['csrf_token'] = get_token(get_current_request()) frag.add_javascript(loader.load_unicode('static/js/src/staff_graded.js')) frag.initialize_js('StaffGradedProblem', json_args={k: context[k] for k in ('csrf_token', 'import_url', 'export_url', 'poll_url', 'id')}) try: score = get_score(self.location, self.runtime.user_id) or {} context['grades_available'] = True except NoSuchServiceError: context['grades_available'] = False else: if score: grade = score['score'] context['score_string'] = _('{score} / {total} points').format(score=grade, total=self.weight) else: context['score_string'] = _('{total} points possible').format(total=self.weight) frag.add_content(loader.render_django_template('static/html/staff_graded.html', context)) return frag
def get_score(self): """ Return a raw score already persisted on the XBlock. Should not perform new calculations. Returns: Score(raw_earned=float, raw_possible=float) """ score = get_score(self.runtime.user_id, self.location) score = score or {'grade': 0, 'max_grade': 1} return Score(raw_earned=score['grade'], raw_possible=score['max_grade'])