def get_resource_objects(self): super().get_resource_objects() user = self.request.user instance = self.get_course_instance_object() if instance is not None: self.instance = instance self.course = self.instance.course self.content = CachedContent(self.instance) self.is_student = self.instance.is_student(user) self.is_assistant = self.instance.is_assistant(user) self.is_teacher = self.course.is_teacher(user) self.is_course_staff = self.is_teacher or self.is_assistant self.note( "course", "instance", "content", "is_student", "is_assistant", "is_teacher", "is_course_staff", ) # Apply course instance language. if self.instance.language: translation.activate(self.instance.language)
def get_resource_objects(self): super().get_resource_objects() user = self.request.user instance = self.get_course_instance_object() if instance is not None: self.instance = instance self.course = self.instance.course self.content = CachedContent(self.instance) self.user_course_data = None is_real_user = user.is_authenticated and not user.is_anonymous if is_real_user: self.user_course_data = self.instance.get_enrollment_for(user) self.is_student = self.instance.is_student(user) self.is_assistant = self.instance.is_assistant(user) self.is_teacher = self.course.is_teacher(user) self.is_course_staff = self.is_teacher or self.is_assistant self.get_taggings = lambda: CachedStudent(instance, user.id).data['tag_slugs'] self.url_without_language = remove_query_param_from_url(self.request.get_full_path(), 'hl') self.query_language = None self.user_language = None self.note( "course", "instance", "content", "user_course_data", "is_student", "is_assistant", "is_teacher", "is_course_staff", "get_taggings", "url_without_language", "query_language", "user_language" ) # Try to find a language that is defined for this course instance # and apply it if self.instance.language: instance_languages = self.instance.language.strip('|').split('|') instance_def_language = instance_languages[0] instance_languages = set(instance_languages) languages = [] if self.user_course_data and self.user_course_data.language: languages.append(self.user_course_data.language) if is_real_user and user.userprofile.language: languages.append(user.userprofile.language) languages.append(get_language()) query_language = self.request.GET.get('hl') if query_language: if query_language[:2] in instance_languages: language = query_language if languages: self.user_language = languages[0] if self.user_language[:2] != query_language[:2]: self.query_language = query_language else: raise TranslationNotFound else: for lang in languages: if lang[:2] in instance_languages: language = lang break else: language = instance_def_language translation.activate(language)
def obj_get(self, request=None, **kwargs): results = {} course_instance = CourseInstance.objects.get(pk=kwargs["pk"]) user_profile = UserProfile.objects.get(pk=kwargs["user"]) points = CachedPoints(course_instance, user_profile.user, CachedContent(course_instance)) results["user"] = user_profile.id results["course_instance"] = kwargs["pk"] summary = [] for entry in points.modules(): exs = [] for entry in points.flat_module(entry): exs.append({ 'exercise_id': entry['id'], 'submission_count': entry['submission_count'], 'completed_percentage': self._percentage(entry['points'], entry['max_points']), }) summary.append({ 'exercise_round_id': entry['id'], 'completed_percentage': self._percentage(entry['points'], entry['max_points']), 'closing_time': entry['closing_time'], 'exercise_summaries': exs, }) results["summary"] = summary return results
def get_resource_objects(self): super().get_resource_objects() user = self.request.user instance = self.get_course_instance_object() if instance is not None: self.instance = instance self.course = self.instance.course self.content = CachedContent(self.instance) self.is_student = self.instance.is_student(user) self.is_assistant = self.instance.is_assistant(user) self.is_teacher = self.course.is_teacher(user) self.is_course_staff = self.is_teacher or self.is_assistant self.note( "course", "instance", "content", "is_student", "is_assistant", "is_teacher", "is_course_staff", ) # Apply course instance language. if self.instance.language: lang = self.instance.language if lang.startswith("|"): active = get_language() if "|" + active + "|" in lang: translation.activate(active) else: fallback = lang[1:lang.find("|", 1)] translation.activate(fallback) else: translation.activate(lang)
def get_resource_objects(self): super().get_resource_objects() user = self.request.user instance = self.get_course_instance_object() if instance is not None: self.instance = instance self.course = self.instance.course self.content = CachedContent(self.instance) self.user_course_data = None if user.is_authenticated: self.user_course_data = self.instance.get_enrollment_for(user) self.is_student = self.instance.is_student(user) self.is_assistant = self.instance.is_assistant(user) self.is_teacher = self.course.is_teacher(user) self.is_course_staff = self.is_teacher or self.is_assistant self.get_taggings = lambda: CachedStudent(instance, user.id).data[ 'tag_slugs'] self.note( "course", "instance", "content", "user_course_data", "is_student", "is_assistant", "is_teacher", "is_course_staff", "get_taggings", ) # Try to find a language that is defined for this course instance # and apply it if self.instance.language: languages = [] if self.user_course_data and self.user_course_data.language: languages.append(self.user_course_data.language) if user.is_authenticated and user.userprofile.language: languages.append(user.userprofile.language) languages.append(get_language()) instance_languages = self.instance.language.strip('|').split( '|') instance_def_language = instance_languages[0] instance_languages = set(instance_languages) for lang in languages: if lang.split('-', 1)[0] in instance_languages: language = lang break else: language = instance_def_language translation.activate(language)
def test_pass(self): content = CachedContent(self.instance) points = CachedPoints(self.instance, self.student, content) t = Threshold.objects.create(course_instance=self.instance, name="test") t.passed_categories.add(self.category) self.assertTrue(t.is_passed(points)) t.passed_exercises.add(self.exercise) self.assertTrue(t.is_passed(points)) t.passed_exercises.add(self.exercise2) self.assertFalse(t.is_passed(points)) t.passed_exercises.clear() t.passed_modules.add(self.module) self.assertFalse(t.is_passed(points)) self.submission3.set_points(2, 2) self.submission3.set_ready() self.submission3.save() points = CachedPoints(self.instance, self.student, content) self.assertTrue(t.is_passed(points))
def get_resource_objects(self): super().get_resource_objects() user = self.request.user instance = self.get_course_instance_object() if instance is not None: self.instance = instance self.course = self.instance.course self.content = CachedContent(self.instance) self.is_student = self.instance.is_student(user) self.is_assistant = self.instance.is_assistant(user) self.is_teacher = self.course.is_teacher(user) self.is_course_staff = self.is_teacher or self.is_assistant def get_taggings(): return [tag for student in CachedStudents(instance).students() if student['user_id'] == user.id for tag in student['tag_slugs']] self.get_taggings = get_taggings self.note( "course", "instance", "content", "is_student", "is_assistant", "is_teacher", "is_course_staff", "get_taggings", ) # Apply course instance language. if self.instance.language: lang = self.instance.language if lang.startswith("|"): active = get_language() if "|" + active + "|" in lang: translation.activate(active) else: fallback = lang[1:lang.find("|", 1)] translation.activate(fallback) else: translation.activate(lang)
def clear_cache(self, request): invalidate_instance(self.instance) CachedContent.invalidate(self.instance) messages.success(request, _("Exercise caches have been cleared."))
def is_in_maintenance(entry): return CachedContent.is_in_maintenance(entry)
def len_listed(entries): return len([e for e in entries if CachedContent.is_listed(e)])
def is_listed(entry): return CachedContent.is_listed(entry)
def is_visible(entry): return CachedContent.is_visible(entry)
def clear_cache(self, request): invalidate_instance(self.instance) CachedContent.invalidate(self.instance) CachedStudents.invalidate(self.instance) messages.success(request, _("Exercise caches have been cleared."))