From e11c8209d80ae9b04ee4fec7cd974e2e013ee4b5 Mon Sep 17 00:00:00 2001 From: Diane Kaplan Date: Tue, 27 Oct 2020 12:49:31 -0400 Subject: [PATCH 1/8] ported logic from user_metadata.html to utils so it can be reused by new endpoint --- lms/djangoapps/experiments/utils.py | 74 ++++++++++++++++++++ lms/templates/experiments/user_metadata.html | 69 +----------------- 2 files changed, 76 insertions(+), 67 deletions(-) diff --git a/lms/djangoapps/experiments/utils.py b/lms/djangoapps/experiments/utils.py index 05cc3ceda09e..a34099f126cf 100644 --- a/lms/djangoapps/experiments/utils.py +++ b/lms/djangoapps/experiments/utils.py @@ -408,3 +408,77 @@ def get_program_context(course, user_enrollments): } return program_key # TODO: clean up as part of REVEM-199 (START) + + +from opaque_keys.edx.keys import CourseKey +import six + +def generate_processed_user_metadata(context, user, course, course_id): + user_metadata = { + key: context.get(key) + for key in ( + 'username', + 'user_id', + 'course_id', + 'enrollment_mode', + 'upgrade_link', + 'upgrade_price', + 'audit_access_deadline', + 'course_duration', + 'pacing_type', + 'has_staff_access', + 'forum_roles', + 'partition_groups', + # TODO: clean up as part of REVO-28 (START) + 'has_non_audit_enrollments', + # TODO: clean up as part of REVO-28 (END) + # TODO: clean up as part of REVEM-199 (START) + 'program_key_fields', + # TODO: clean up as part of REVEM-199 (END) + ) + } + + if user: + user_metadata['username'] = user.username + user_metadata['user_id'] = user.id + if hasattr(user, 'email'): + user_metadata['email'] = user.email + + for datekey in ( + 'schedule_start', + 'enrollment_time', + 'course_start', + 'course_end', + 'dynamic_upgrade_deadline', + 'course_upgrade_deadline', + 'audit_access_deadline', + ): + user_metadata[datekey] = ( + context.get(datekey).isoformat() if context.get(datekey) else None + ) + + for timedeltakey in ( + 'course_duration', + ): + user_metadata[timedeltakey] = ( + context.get(timedeltakey).total_seconds() if context.get(timedeltakey) else None + ) + + course_key = context.get('course_key') + if course and not course_key: + course_key = course.id + + if course_key: + if isinstance(course_key, CourseKey): + user_metadata['course_key_fields'] = { + 'org': course_key.org, + 'course': course_key.course, + 'run': course_key.run, + } + + if not course_id: + user_metadata['course_id'] = six.text_type(course_key) + elif isinstance(course_key, six.string_types): + user_metadata['course_id'] = course_key + + return user_metadata \ No newline at end of file diff --git a/lms/templates/experiments/user_metadata.html b/lms/templates/experiments/user_metadata.html index 8600ec11e152..c3052e6f81fc 100644 --- a/lms/templates/experiments/user_metadata.html +++ b/lms/templates/experiments/user_metadata.html @@ -1,78 +1,13 @@ <%page expression_filter="h"/> <%! +from experiments.utils import generate_processed_user_metadata from openedx.core.djangolib.js_utils import dump_js_escaped_json from eventtracking import tracker from opaque_keys.edx.keys import CourseKey import six %> <% -user_metadata = { - key: context.get(key) - for key in ( - 'username', - 'user_id', - 'course_id', - 'enrollment_mode', - 'upgrade_link', - 'upgrade_price', - 'audit_access_deadline', - 'course_duration', - 'pacing_type', - 'has_staff_access', - 'forum_roles', - 'partition_groups', - # TODO: clean up as part of REVO-28 (START) - 'has_non_audit_enrollments', - # TODO: clean up as part of REVO-28 (END) - # TODO: clean up as part of REVEM-199 (START) - 'program_key_fields', - # TODO: clean up as part of REVEM-199 (END) - ) -} - -if user: - user_metadata['username'] = user.username - user_metadata['user_id'] = user.id - if hasattr(user, 'email'): - user_metadata['email'] = user.email - -for datekey in ( - 'schedule_start', - 'enrollment_time', - 'course_start', - 'course_end', - 'dynamic_upgrade_deadline', - 'course_upgrade_deadline', - 'audit_access_deadline', -): - user_metadata[datekey] = ( - context.get(datekey).isoformat() if context.get(datekey) else None - ) - -for timedeltakey in ( - 'course_duration', -): - user_metadata[timedeltakey] = ( - context.get(timedeltakey).total_seconds() if context.get(timedeltakey) else None - ) - -course_key = context.get('course_key') -if course and not course_key: - course_key = course.id - -if course_key: - if isinstance(course_key, CourseKey): - user_metadata['course_key_fields'] = { - 'org': course_key.org, - 'course': course_key.course, - 'run': course_key.run, - } - - if not course_id: - user_metadata['course_id'] = six.text_type(course_key) - elif isinstance(course_key, six.string_types): - user_metadata['course_id'] = course_key - +user_metadata = generate_processed_user_metadata(context, user, course, course_id) %>