Ejemplo n.º 1
0
    def __init__(self, repo, course, flow_id,
            participation=None, flow_session=None):
        """*participation* and *flow_session* are not stored and only used
        to figure out versioning of the flow content.
        """

        self.repo = repo
        self.course = course
        self.flow_id = flow_id

        from django.core.exceptions import ObjectDoesNotExist

        self.course_commit_sha = get_course_commit_sha(
                self.course, participation)

        try:
            self.flow_desc = get_flow_desc(self.repo, self.course,
                    flow_id, self.course_commit_sha)
        except ObjectDoesNotExist:
            raise http.Http404()

        if flow_session is not None:
            from course.content import adjust_flow_session_page_data
            adjust_flow_session_page_data(repo, flow_session,
                    course.identifier, self.flow_desc)
Ejemplo n.º 2
0
    def __init__(self,
                 repo,
                 course,
                 flow_id,
                 participation=None,
                 flow_session=None):
        """*participation* and *flow_session* are not stored and only used
        to figure out versioning of the flow content.
        """

        self.repo = repo
        self.course = course
        self.flow_id = flow_id

        from django.core.exceptions import ObjectDoesNotExist

        self.course_commit_sha = get_course_commit_sha(self.course,
                                                       participation)

        try:
            self.flow_desc = get_flow_desc(self.repo, self.course, flow_id,
                                           self.course_commit_sha)
        except ObjectDoesNotExist:
            raise http.Http404()

        if flow_session is not None:
            from course.content import adjust_flow_session_page_data
            adjust_flow_session_page_data(repo, flow_session,
                                          course.identifier, self.flow_desc)
Ejemplo n.º 3
0
    def __init__(self,
                 repo,
                 course,
                 flow_id,
                 ordinal,
                 participation,
                 flow_session,
                 request=None):
        FlowContext.__init__(self,
                             repo,
                             course,
                             flow_id,
                             participation,
                             flow_session=flow_session)

        from course.content import adjust_flow_session_page_data
        adjust_flow_session_page_data(repo, flow_session, course.identifier,
                                      self.flow_desc)

        if ordinal >= flow_session.page_count:
            raise PageOrdinalOutOfRange()

        from course.models import FlowPageData
        page_data = self.page_data = get_object_or_404(
            FlowPageData, flow_session=flow_session, ordinal=ordinal)

        from course.content import get_flow_page_desc
        try:
            self.page_desc = get_flow_page_desc(flow_session, self.flow_desc,
                                                page_data.group_id,
                                                page_data.page_id)
        except ObjectDoesNotExist:
            self.page_desc = None
            self.page = None
            self.page_context = None
        else:
            self.page = instantiate_flow_page_with_ctx(self, page_data)

            page_uri = None
            if request is not None:
                from django.core.urlresolvers import reverse
                page_uri = request.build_absolute_uri(
                    reverse("relate-view_flow_page",
                            args=(course.identifier, flow_session.id,
                                  ordinal)))

            from course.page import PageContext
            self.page_context = PageContext(course=self.course,
                                            repo=self.repo,
                                            commit_sha=self.course_commit_sha,
                                            flow_session=flow_session,
                                            page_uri=page_uri)

        self._prev_answer_visit = False
Ejemplo n.º 4
0
def start_flow(repo, course, participation, flow_id, flow_desc, access_rules_tag, now_datetime):
    from course.content import get_course_commit_sha

    course_commit_sha = get_course_commit_sha(course, participation)

    session = FlowSession(
        course=course,
        participation=participation,
        active_git_commit_sha=course_commit_sha.decode(),
        flow_id=flow_id,
        in_progress=True,
        expiration_mode=flow_session_expiration_mode.end,
        access_rules_tag=access_rules_tag,
    )

    session.save()

    # Create flow grading opportunity. This makes the flow
    # show up in the grade book.

    from course.utils import get_flow_rules
    from course.models import get_flow_grading_opportunity

    for grading_rule in get_flow_rules(
        flow_desc, flow_rule_kind.grading, participation, flow_id, now_datetime, consider_exceptions=False
    ):
        identifier = getattr(grading_rule, "grade_identifier", None)
        if identifier is not None:
            get_flow_grading_opportunity(
                course,
                flow_id,
                flow_desc,
                FlowSessionGradingRule(
                    grade_identifier=identifier,
                    grade_aggregation_strategy=getattr(grading_rule, "grade_aggregation_strategy"),
                ),
            )

    # will implicitly modify and save the session if there are changes
    from course.content import adjust_flow_session_page_data

    adjust_flow_session_page_data(repo, session, course.identifier, flow_desc, course_commit_sha)

    return session
Ejemplo n.º 5
0
    def __init__(self, repo, course, flow_id, ordinal,
             participation, flow_session, request=None):
        FlowContext.__init__(self, repo, course, flow_id,
                participation, flow_session=flow_session)

        from course.content import adjust_flow_session_page_data
        adjust_flow_session_page_data(repo, flow_session,
                course.identifier, self.flow_desc)

        if ordinal >= flow_session.page_count:
            raise PageOrdinalOutOfRange()

        from course.models import FlowPageData
        page_data = self.page_data = get_object_or_404(
                FlowPageData, flow_session=flow_session, ordinal=ordinal)

        from course.content import get_flow_page_desc
        try:
            self.page_desc = get_flow_page_desc(
                    flow_session, self.flow_desc, page_data.group_id,
                    page_data.page_id)
        except ObjectDoesNotExist:
            self.page_desc = None
            self.page = None
            self.page_context = None
        else:
            self.page = instantiate_flow_page_with_ctx(self, page_data)

            page_uri = None
            if request is not None:
                from django.core.urlresolvers import reverse
                page_uri = request.build_absolute_uri(
                        reverse("relate-view_flow_page",
                            args=(course.identifier, flow_session.id, ordinal)))

            from course.page import PageContext
            self.page_context = PageContext(
                    course=self.course, repo=self.repo,
                    commit_sha=self.course_commit_sha,
                    flow_session=flow_session,
                    page_uri=page_uri)

        self._prev_answer_visit = False
Ejemplo n.º 6
0
    def __init__(self, repo, course, flow_id, ordinal, participation,
                 flow_session):
        FlowContext.__init__(self,
                             repo,
                             course,
                             flow_id,
                             participation,
                             flow_session=flow_session)

        from course.content import adjust_flow_session_page_data
        adjust_flow_session_page_data(repo, flow_session, course.identifier,
                                      self.flow_desc, self.course_commit_sha)

        if ordinal >= flow_session.page_count:
            raise PageOrdinalOutOfRange()

        from course.models import FlowPageData
        page_data = self.page_data = get_object_or_404(
            FlowPageData, flow_session=flow_session, ordinal=ordinal)

        from course.content import get_flow_page_desc
        try:
            self.page_desc = get_flow_page_desc(flow_session, self.flow_desc,
                                                page_data.group_id,
                                                page_data.page_id)
        except ObjectDoesNotExist:
            self.page_desc = None
            self.page = None
            self.page_context = None
        else:
            self.page = instantiate_flow_page_with_ctx(self, page_data)

            from course.page import PageContext
            self.page_context = PageContext(course=self.course,
                                            repo=self.repo,
                                            commit_sha=self.course_commit_sha,
                                            flow_session=flow_session)

        self._prev_answer_visit = False