示例#1
0
def generate_anonymous_ids(_xmodule_instance_args, _entry_id, course_id,
                           task_input, action_name):  # lint-amnesty, pylint: disable=too-many-statements
    """
    Generate a 2-column CSV output of user-id, anonymized-user-id
    """
    def _log_and_update_progress(step):
        """
        Updates progress task and logs

        Arguments:
            step: current step task is on
        """
        TASK_LOG.info(
            '%s, Task type: %s, Current step: %s for all learners',
            task_info_string,
            action_name,
            step,
        )
        task_progress.update_task_state(extra_meta=step)

    TASK_LOG.info('ANONYMOUS_IDS_TASK: Starting task execution.')

    task_info_string_format = 'Task: {task_id}, InstructorTask ID: {entry_id}, Course: {course_id}, Input: {task_input}'
    task_info_string = task_info_string_format.format(
        task_id=_xmodule_instance_args.get('task_id')
        if _xmodule_instance_args is not None else None,
        entry_id=_entry_id,
        course_id=course_id,
        task_input=task_input)
    TASK_LOG.info('%s, Task type: %s, Starting task execution',
                  task_info_string, action_name)

    start_time = time()
    start_date = datetime.now(UTC)

    students = User.objects.filter(
        courseenrollment__course_id=course_id, ).order_by('id')

    task_progress = TaskProgress(action_name, students.count, start_time)
    _log_and_update_progress({'step': "Compiling learner rows"})

    header = [
        'User ID', 'Anonymized User ID', 'Course Specific Anonymized User ID'
    ]
    rows = [[s.id,
             unique_id_for_user(s),
             anonymous_id_for_user(s, course_id)] for s in students]

    task_progress.attempted = students.count
    _log_and_update_progress({'step': "Finished compiling learner rows"})

    csv_name = 'anonymized_ids'
    upload_csv_to_report_store([header] + rows, csv_name, course_id,
                               start_date)

    return UPDATE_STATUS_SUCCEEDED
    def test_process_survey_link(self):
        username = "******"
        user = Mock(username=username)
        user_id = unique_id_for_user(user)
        link1 = "http://www.mysurvey.com"
        assert process_survey_link(link1, user) == link1

        link2 = "http://www.mysurvey.com?unique={UNIQUE_ID}"
        link2_expected = f"http://www.mysurvey.com?unique={user_id}"
        assert process_survey_link(link2, user) == link2_expected
示例#3
0
    def test_process_survey_link(self):
        username = "******"
        user = Mock(username=username)
        user_id = unique_id_for_user(user)
        link1 = "http://www.mysurvey.com"
        self.assertEqual(process_survey_link(link1, user), link1)

        link2 = "http://www.mysurvey.com?unique={UNIQUE_ID}"
        link2_expected = "http://www.mysurvey.com?unique={UNIQUE_ID}".format(UNIQUE_ID=user_id)
        self.assertEqual(process_survey_link(link2, user), link2_expected)
示例#4
0
    def make(svalue):
        """
        Given a User value entry `svalue`, extracts the student's email and fullname,
        and provides a unique id for the user.

        Returns a dictionary with keys 'EMAIL', 'FULLNAME', and 'EDX_ID'.
        """
        fake_user = FakeUser(svalue['user_id'], svalue['user__username'],
                             lambda: True)

        entry = {
            'EMAIL': svalue['user__email'],
            'FULLNAME': svalue['name'].title(),
            'EDX_ID': unique_id_for_user(fake_user)
        }

        return entry
示例#5
0
def process_survey_link(survey_link, user):
    """
    If {UNIQUE_ID} appears in the link, replace it with a unique id for the user.
    Currently, this is sha1(user.username).  Otherwise, return survey_link.
    """
    return survey_link.format(UNIQUE_ID=unique_id_for_user(user))