示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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
示例#4
0
    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)
示例#5
0
    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)
示例#6
0
 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))
示例#7
0
    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)
示例#8
0
 def clear_cache(self, request):
     invalidate_instance(self.instance)
     CachedContent.invalidate(self.instance)
     messages.success(request, _("Exercise caches have been cleared."))
示例#9
0
文件: course.py 项目: henkka14/a-plus
def is_in_maintenance(entry):
    return CachedContent.is_in_maintenance(entry)
示例#10
0
文件: course.py 项目: henkka14/a-plus
def len_listed(entries):
    return len([e for e in entries if CachedContent.is_listed(e)])
示例#11
0
文件: course.py 项目: henkka14/a-plus
def is_listed(entry):
    return CachedContent.is_listed(entry)
示例#12
0
文件: course.py 项目: henkka14/a-plus
def is_visible(entry):
    return CachedContent.is_visible(entry)
示例#13
0
 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."))
示例#14
0
def is_in_maintenance(entry):
    return CachedContent.is_in_maintenance(entry)
示例#15
0
def len_listed(entries):
    return len([e for e in entries if CachedContent.is_listed(e)])
示例#16
0
def is_listed(entry):
    return CachedContent.is_listed(entry)
示例#17
0
def is_visible(entry):
    return CachedContent.is_visible(entry)