示例#1
0
def uhn_create_sessions(subject_id, bundle):
    '''
        Generate 7 sessions and specify start dates (spaced one month apart).
    '''

    today = datetime.datetime.now().date()

    subject = Subject.objects.get(user_id=subject_id)

    if bundle.name_id == 'uhn_web':
        session_type = Session_Type.objects.get(name='website')
    elif bundle.name_id == 'uhn_phone':
        session_type = Session_Type.objects.get(name='phone')

    # Call generate_session in views.py 7 times
    for _ in range(UHN_NUM_SESSIONS):
        generate_session(subject, session_type)

    start_dates = [today] * UHN_NUM_SESSIONS

    for idx in range(UHN_NUM_SESSIONS):
        if idx == 0:
            continue
        start_dates[idx] = start_dates[idx-1] + DURATION_BETWEEN_SESSIONS

    sessions = Session.objects.filter(subject_id=subject_id)

    for idx, session in enumerate(sessions):
        session_id = session.session_id
        Session.objects.filter(session_id=session_id).update(start_date=start_dates[idx])
示例#2
0
def bundle_create_sessions(subject_id, bundle):
    '''
        Generate 7 sessions and specify start dates (spaced one month apart).
    '''

    today = datetime.datetime.now().date()
    subject = Subject.objects.get(user_id=subject_id)


    session_type = BUNDLE_TO_SESSION_TYPE[bundle.name_id]
    total_num_sessions = BUNDLE_TO_NUM_SESSIONS[bundle.name_id]

    for _ in range(total_num_sessions):
        if 'wch' in bundle.name_id:
            generate_session_wch(subject, session_type)
        else:
            generate_session(subject, session_type)

    start_dates = [today] * total_num_sessions

    for idx in range(total_num_sessions):
        if idx == 0:
            continue
        start_dates[idx] = start_dates[idx-1] + DURATION_BETWEEN_SESSIONS

    sessions = Session.objects.filter(subject_id=subject_id)

    for idx, session in enumerate(sessions):
        session_id = session.session_id
        Session.objects.filter(session_id=session_id).update(start_date=start_dates[idx])
示例#3
0
    def test_generate_session_uhn_multiple_sessions(self):
        '''
            test_generate_session_uhn_multiple_sessions should populate the session with
            different task instances if specified.
        '''

        first_session = views.generate_session(self.subject_uhn_bundle,
                                               self.session_type_web)
        first_session_task_no_repeat = Session_Task.objects.get(
            session_id=first_session.session_id,
            task_id=self.task_repeat.task_id)
        first_session_task_no_repeat_instance = Session_Task_Instance.objects.get(
            session_task_id=first_session_task_no_repeat.session_task_id)
        first_session_task_no_repeat_value = Session_Task_Instance_Value.objects.get(
            session_task_instance_id=first_session_task_no_repeat_instance.
            session_task_instance_id)
        first_session_task_repeat = Session_Task.objects.get(
            session_id=first_session.session_id,
            task_id=self.task_repeat.task_id)
        first_session_task_repeat_instance = Session_Task_Instance.objects.get(
            session_task_id=first_session_task_repeat.session_task_id)
        first_session_task_repeat_value = Session_Task_Instance_Value.objects.get(
            session_task_instance_id=first_session_task_repeat_instance.
            session_task_instance_id)

        second_session = views.generate_session(self.subject_uhn_bundle,
                                                self.session_type_web)
        second_session_task_no_repeat = Session_Task.objects.get(
            session_id=second_session.session_id,
            task_id=self.task_no_repeat.task_id)
        second_session_task_no_repeat_instance = Session_Task_Instance.objects.get(
            session_task_id=second_session_task_no_repeat.session_task_id)
        second_session_task_no_repeat_value = Session_Task_Instance_Value.objects.get(
            session_task_instance_id=second_session_task_no_repeat_instance.
            session_task_instance_id)
        second_session_task_repeat = Session_Task.objects.get(
            session_id=second_session.session_id,
            task_id=self.task_repeat.task_id)
        second_session_task_repeat_instance = Session_Task_Instance.objects.get(
            session_task_id=second_session_task_repeat.session_task_id)
        second_session_task_repeat_value = Session_Task_Instance_Value.objects.get(
            session_task_instance_id=second_session_task_repeat_instance.
            session_task_instance_id)

        self.assertEqual(first_session_task_repeat_value.value,
                         second_session_task_repeat_value.value)
        self.assertNotEqual(first_session_task_no_repeat_value.value,
                            second_session_task_no_repeat_value.value)
示例#4
0
def session(request):
    # Validate the headers
    auth_token = lib.validate_authorization_header(request.META)
    if not auth_token:
        response = HttpResponse(status=400, \
            content=json.dumps({"status_code": "400"}))
        response['WWW-Authenticate'] = 'Bearer error="invalid_request"'
        return response

    # Validate the access token
    subject = lib.authenticate(auth_token)
    if not subject:
        response = HttpResponse(status=401, \
            content=json.dumps({"status_code": "401"}))
        response['WWW-Authenticate'] = 'Bearer error="invalid_token"'
        return response

    if request.method == 'GET':
        # Return all phone sessions for the authenticated user
        sessions = Session.objects.filter(subject=subject,
                                          session_type__name='phone')
        list_sessions = []
        date_format = "%Y-%m-%d %H:%M:%S"
        for session in sessions:
            str_startdate = session.start_date.strftime(date_format)
            str_enddate = session.end_date
            if str_enddate is not None:
                str_enddate = str_enddate.strftime(date_format)
            list_sessions += [{"session_id": session.session_id, \
                               "start_date": str_startdate, \
                               "end_date": str_enddate, \
                               "session_type": session.session_type.name}]
        return HttpResponse(status=200,
                            content=json.dumps({
                                "status_code": "200",
                                "sessions": list_sessions
                            }))

    elif request.method == 'POST':
        # Create a new session for the user
        session_type = Session_Type.objects.get(name='phone')
        new_session = generate_session(subject, session_type)
        return HttpResponse(status=200,
                            content=json.dumps({
                                "status_code":
                                "200",
                                "session_id":
                                new_session.session_id
                            }))

    return HttpResponse(status=405,
                        content=json.dumps({
                            "status_code": "405",
                            "error": "Invalid method"
                        }))
示例#5
0
    def test_generate_session_uhn(self):
        '''
            test_generate_session_uhn should only return tasks in UHN bundle and respect
            their defined order
        '''

        uhn_session = views.generate_session(self.subject_uhn_bundle,
                                             self.session_type_web)
        session_tasks = Session_Task.objects.filter(
            session=uhn_session).order_by('order')
        self.assertEquals(session_tasks[0].task_id, self.bundle_task.task_id)
        self.assertEquals(session_tasks[1].task_id, self.task_repeat.task_id)
示例#6
0
    def test_delete_session(self):
        '''
            test_delete_session should remove all session tasks
        '''

        session = views.generate_session(self.subject_uhn_bundle,
                                         self.session_type_web)

        self.assertEqual(
            len(Session_Task.objects.filter(session_id=session.session_id)), 2)

        views.delete_session(session.session_id)
        self.assertEqual(
            len(Session_Task.objects.filter(session_id=session.session_id)), 0)
        self.assertEqual(
            len(Session.objects.filter(session_id=session.session_id)), 0)
示例#7
0
    def test_generate_session_vocabulary_task(self):
        '''
            test_generate_session_vocabulary_task should generate task instances with
            3 words of low difficulty, 2 words of medium difficulty, and 1 word of high difficulty
        '''

        num_instances_vocabulary = 6
        num_instances_vocabulary_low = 3
        num_instances_vocabulary_medium = 2
        num_instances_vocabulary_high = 1

        # Get difficulties
        low_difficulty = Value_Difficulty.objects.get(value_difficulty_id=1)
        medium_difficulty = Value_Difficulty.objects.get(value_difficulty_id=2)
        high_difficulty = Value_Difficulty.objects.get(value_difficulty_id=3)

        # Create vocabulary task
        vocabulary_task = Task.objects.create(task_id=views.VOCABULARY_TASK_ID,
                                              name_id='vocabulary',
                                              name='vocabulary',
                                              instruction='instruction',
                                              default_order=1,
                                              is_order_fixed=1,
                                              default_delay=0,
                                              default_embedded_delay=0,
                                              is_active=1)
        bundle_task_vocabulary = Bundle_Task.objects.create(
            bundle_task_id=views.VOCABULARY_UHN_WEB_BUNDLE_TASK_ID,
            bundle_id=self.uhn_web_bundle.bundle_id,
            task_id=vocabulary_task.task_id,
            default_num_instances=num_instances_vocabulary)

        # Create task field for vocabulary task
        task_field_vocabulary = Task_Field.objects.create(
            task_field_id=10,
            name='',
            task_id=vocabulary_task.task_id,
            field_type_id=self.field_type.field_type_id,
            field_data_type_id=self.field_data_type.field_data_type_id,
            embedded_response=0,
            generate_value=1)

        # Insert some values for vocabulary task instance
        for difficulty in [low_difficulty, medium_difficulty, high_difficulty]:
            for i in range(3):
                Task_Field_Value.objects.create(
                    task_field_value_id=difficulty.value_difficulty_id * 100 +
                    i,
                    task_field_id=task_field_vocabulary.task_field_id,
                    value='word',
                    difficulty_id=difficulty.value_difficulty_id)
                Bundle_Task_Field_Value.objects.create(
                    bundle_task_field_value_id=difficulty.value_difficulty_id *
                    100 + i,
                    bundle_task_id=bundle_task_vocabulary.bundle_task_id,
                    task_field_value_id=difficulty.value_difficulty_id * 100 +
                    i)

        # Create session
        vocabulary_session = views.generate_session(self.subject_uhn_bundle,
                                                    self.session_type_web)
        vocabulary_session_tasks = Session_Task.objects.get(
            session_id=vocabulary_session.session_id,
            task_id=vocabulary_task.task_id)
        vocabulary_session_task_instance_ids = Session_Task_Instance.objects.filter(
            session_task_id=vocabulary_session_tasks.session_task_id)
        vocabulary_session_task_instances_low = Session_Task_Instance_Value.objects.filter(
            session_task_instance_id__in=vocabulary_session_task_instance_ids,
            difficulty_id=low_difficulty.value_difficulty_id)
        vocabulary_session_task_instances_medium = Session_Task_Instance_Value.objects.filter(
            session_task_instance_id__in=vocabulary_session_task_instance_ids,
            difficulty_id=medium_difficulty.value_difficulty_id)
        vocabulary_session_task_instances_high = Session_Task_Instance_Value.objects.filter(
            session_task_instance_id__in=vocabulary_session_task_instance_ids,
            difficulty_id=high_difficulty.value_difficulty_id)

        self.assertEquals(len(vocabulary_session_task_instances_low),
                          num_instances_vocabulary_low)
        self.assertEquals(len(vocabulary_session_task_instances_medium),
                          num_instances_vocabulary_medium)
        self.assertEquals(len(vocabulary_session_task_instances_high),
                          num_instances_vocabulary_high)