feat: add explicit courserun_key parameter to /event endpoint
We add 'courserun_key' (aka "course_id" though that's technically a misnomer) as an optional parameter to the /event endpoint url. If it is not present, it will still be parsed out of the url, if the url is of the right format. Additionally, Logger.log() in js adds this parameter to its /event call, pulling it from the $$course_id global. This provides opportunity for MFEs to (separately) provide the key without concern about url parsing. TNL-7752
This commit is contained in:
@@ -12,26 +12,27 @@ from openedx.core.lib.request_utils import COURSE_REGEX
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def course_context_from_url(url):
|
||||
def course_context_from_url(url, course_id_string=None):
|
||||
"""
|
||||
Extracts the course_context from the given `url` and passes it on to
|
||||
`course_context_from_course_id()`.
|
||||
If course_id_string string is not present, extracts it from the given `url`. Either way, then passes
|
||||
it on to `course_context_from_course_id()`.
|
||||
"""
|
||||
url = url or ''
|
||||
|
||||
match = COURSE_REGEX.match(url)
|
||||
course_id = None
|
||||
if match:
|
||||
course_id_string = match.group('course_id')
|
||||
try:
|
||||
course_id = CourseKey.from_string(course_id_string)
|
||||
except InvalidKeyError:
|
||||
log.warning(
|
||||
'unable to parse course_id "{course_id}"'.format(
|
||||
course_id=course_id_string
|
||||
),
|
||||
exc_info=True
|
||||
)
|
||||
|
||||
if course_id_string is None:
|
||||
match = COURSE_REGEX.match(url)
|
||||
if match:
|
||||
course_id_string = match.group('course_id')
|
||||
try:
|
||||
course_id = CourseKey.from_string(course_id_string)
|
||||
except InvalidKeyError:
|
||||
log.warning(
|
||||
'unable to parse course_id "{course_id}"'.format(
|
||||
course_id=course_id_string
|
||||
),
|
||||
exc_info=True
|
||||
)
|
||||
|
||||
return course_context_from_course_id(course_id)
|
||||
|
||||
|
||||
@@ -69,7 +69,8 @@ def user_track(request):
|
||||
"""
|
||||
Log when POST call to "event" URL is made by a user.
|
||||
|
||||
GET or POST call should provide "event_type", "event", and "page" arguments.
|
||||
GET or POST call should provide "event_type", "event", and "page" arguments. It may optionally provide
|
||||
a "courserun_key" argument (otherwise may be extracted from the page).
|
||||
"""
|
||||
try:
|
||||
username = request.user.username
|
||||
@@ -78,6 +79,7 @@ def user_track(request):
|
||||
|
||||
name = _get_request_value(request, 'event_type')
|
||||
data = _get_request_value(request, 'event', {})
|
||||
course_id_string = _get_request_value(request, 'courserun_key', None)
|
||||
page = _get_request_value(request, 'page')
|
||||
|
||||
if isinstance(data, str) and len(data) > 0:
|
||||
@@ -87,7 +89,7 @@ def user_track(request):
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
context_override = contexts.course_context_from_url(page)
|
||||
context_override = contexts.course_context_from_url(page, course_id_string)
|
||||
context_override['username'] = username
|
||||
context_override['event_source'] = 'browser'
|
||||
context_override['page'] = page
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
return sendRequest({
|
||||
event_type: eventType,
|
||||
event: JSON.stringify(data),
|
||||
courserun_key: $$course_id,
|
||||
page: window.location.href
|
||||
}, requestOptions);
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user