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)
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)
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
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
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
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