def get_session_overview(user):
    """
    Returns information about the last session student has been practicing.

    Returns:
        namedtuple 'session_overview'
    """
    student = StudentModel.objects.get_or_create(user=user)[0]
    session = sess_service.get_session(student)
    if session is None:
        instances = []
    else:
        instances = session.get_task_instances()
        if instances == [] or instances[-1].time_end is None:
            overall_time = 0
        else:
            overall_delta = instances[-1].time_end - instances[0].time_start
            overall_time = overall_delta.seconds
    percentils = []
    for instance in instances:
        percentils.append(statistics_service.percentil(instance) if instance.solved else None)
    return SessionOverview(
            task_instances = instances,
            overall_time = overall_time,
            percentils = percentils
            )
def get_task_by_id(user, task_id):
    student = StudentModel.objects.get_or_create(user=user)[0]
    # ask if the student is in the middle of the session task
    if sess_service.has_unresolved_task(student):
        session = sess_service.get_session(student)
        active_task = sess_service.get_active_task_instance(session)
        if active_task.task.pk == task_id:
            # if the given task is same as active, go in session
            return get_active_task_in_session(student)
    return get_task(student, IdSpecifidedTaskSelector(task_id))
def get_active_task_in_session(student):
    session = sess_service.get_session(student)
    active_task_instance = sess_service.get_active_task_instance(session)
    if not active_task_instance:
        raise ValueError('Student {pk} does not have an active task.')
    session_task_instance_info = TaskInfo(
        task_instance=active_task_instance,
        task=active_task_instance.task,
        student_toolbox=get_student_toolbox(student),
        new_instructions=get_instructions(active_task_instance.task, student),
        all_instructions=get_instructions(active_task_instance.task),
        session = session
    )
    return session_task_instance_info
def get_task_by_id(user, task_id):
    student = StudentModel.objects.get_or_create(user=user)[0]
    # ask if the student is in the middle of the session task
    if sess_service.has_unresolved_task(student):
        session = sess_service.get_session(student)
        active_task = sess_service.get_active_task_instance(session)
        if active_task.task.pk == task_id:
            # if the given task is same as active, go in session
            return get_active_task_in_session(student)
    if len(TaskModel.objects.filter(pk=task_id)) == 0:
        # task does not exist
        raise LookupError('Task does not exists.')
    try:
        return get_task(student, IdSpecifidedTaskSelector(task_id))
    except LookupError:
        # student has low level to solve the task
        raise LowLevelForTaskException()
def get_next_task_in_session(user):
    student = StudentModel.objects.get_or_create(user=user)[0]
    if sess_service.has_unresolved_task(student):
        return get_active_task_in_session(student)
    # next task in the session or new session
    task_info = get_task(student, RandomizedScoreTaskSelector())
    sess_service.next_task_in_session(student, task_info.task_instance)
    # add info about session
    session = sess_service.get_session(student)
    task_info_with_sess = TaskInfo(
        task_instance=task_info.task_instance,
        task=task_info.task,
        student_toolbox=task_info.student_toolbox,
        new_instructions=task_info.new_instructions,
        all_instructions=task_info.all_instructions,
        session=session
    )
    return task_info_with_sess
Example #6
0
 def test_get_session(self):
     session = service.get_session(self.student)
     self.assertEquals(self.session, session)
 def test_get_session(self):
     session = service.get_session(self.student)
     self.assertEquals(self.session, session)