Revert "feat: add explicit courserun_key parameter to /event endpoint" (#28410)

This commit is contained in:
Manjinder Singh
2021-08-05 18:05:20 -04:00
committed by GitHub
parent 24c87b5521
commit f7c5a109d4
7 changed files with 28 additions and 90 deletions

View File

@@ -12,32 +12,23 @@ from openedx.core.lib.request_utils import COURSE_REGEX
log = logging.getLogger(__name__)
def course_context_from_url(url, course_id_string=None):
def course_context_from_url(url):
"""
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()`.
Extracts the course_context from the given `url` and passes it on to
`course_context_from_course_id()`.
"""
url = url or ''
course_id = None
if not course_id_string:
match = COURSE_REGEX.match(url)
if match:
course_id_string = match.group('course_id')
if not course_id_string:
log.debug(
'no course_id found in "{url}"'.format(
url=str(url)[0:256]
),
exc_info=True
)
else:
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=str(course_id_string)[0:256]
course_id=course_id_string
),
exc_info=True
)

View File

@@ -13,23 +13,6 @@ class TestContexts(TestCase): # lint-amnesty, pylint: disable=missing-class-doc
SPLIT_COURSE_ID = 'course-v1:test+course_name+course_run'
ORG_ID = 'test'
@ddt.data(
(COURSE_ID, ''),
(COURSE_ID, '/more/stuff'),
(COURSE_ID, '?format=json'),
(SPLIT_COURSE_ID, ''),
(SPLIT_COURSE_ID, '/more/stuff'),
(SPLIT_COURSE_ID, '?format=json')
)
@ddt.unpack
def test_explicit_course_id(self, course_id, postfix):
url = f'http://foo.bar.com/courses/not-a-course-id{postfix}'
self.assert_parses_explicit_course_id(url, course_id)
def assert_parses_explicit_course_id(self, url, course_id):
assert contexts.course_context_from_url(url, course_id_string=course_id) ==\
{'course_id': course_id, 'org_id': self.ORG_ID, 'enterprise_uuid': ''}
@ddt.data(
(COURSE_ID, ''),
(COURSE_ID, '/more/stuff'),

View File

@@ -69,8 +69,7 @@ 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. It may optionally provide
a "courserun_key" argument (otherwise may be extracted from the page).
GET or POST call should provide "event_type", "event", and "page" arguments.
"""
try:
username = request.user.username
@@ -84,13 +83,11 @@ def user_track(request):
if isinstance(data, str) and len(data) > 0:
try:
data = json.loads(data)
_add_user_id_for_username(data)
except ValueError:
pass
_add_user_id_for_username(data)
course_id_string = data.get('courserun_key') if (data and 'courserun_key' in data) else None
context_override = contexts.course_context_from_url(page, course_id_string)
context_override = contexts.course_context_from_url(page)
context_override['username'] = username
context_override['event_source'] = 'browser'
context_override['page'] = page

View File

@@ -42,32 +42,6 @@ class TestTrackViews(EventTrackingTestCase): # lint-amnesty, pylint: disable=mi
}
def test_user_track(self):
request = self.request_factory.get('/event', {
'page': self.url_with_course,
'event_type': sentinel.event_type,
'event': '{"courserun_key": "explicit/course/id"}'
})
views.user_track(request)
actual_event = self.get_event()
expected_event = {
'context': {
'course_id': 'explicit/course/id',
'org_id': 'explicit',
'event_source': 'browser',
'page': self.url_with_course,
'username': 'anonymous'
},
'data': {
'courserun_key': 'explicit/course/id'
},
'timestamp': FROZEN_TIME,
'name': str(sentinel.event_type)
}
assert_event_matches(expected_event, actual_event)
def test_user_track_with_implicit_course_id(self):
request = self.request_factory.get('/event', {
'page': self.url_with_course,
'event_type': sentinel.event_type,

View File

@@ -10,13 +10,13 @@
// proper deprecation and notification for external authors.
it('can send a request to log event', function() {
spyOn(jQuery, 'ajaxWithPrefix');
Logger.log('example');
Logger.log('example', 'data');
expect(jQuery.ajaxWithPrefix).toHaveBeenCalledWith({
url: '/event',
type: 'POST',
data: {
event_type: 'example',
event: '{"courserun_key":"edX/999/test"}',
event: '"data"',
page: window.location.href
},
async: true
@@ -25,13 +25,13 @@
it('can send a request with custom options to log event', function() {
spyOn(jQuery, 'ajaxWithPrefix');
Logger.log('example', null, null, {type: 'GET', async: false});
Logger.log('example', 'data', null, {type: 'GET', async: false});
expect(jQuery.ajaxWithPrefix).toHaveBeenCalledWith({
url: '/event',
type: 'GET',
data: {
event_type: 'example',
event: '{"courserun_key":"edX/999/test"}',
event: '"data"',
page: window.location.href
},
async: false
@@ -59,13 +59,13 @@
$meta_tag = $('<meta name="path_prefix1" content="">');
$meta_tag.appendTo('body');
spyOn(jQuery, 'ajax');
Logger.log('example');
Logger.log('example', 'data');
expect(jQuery.ajax).toHaveBeenCalledWith({
url: 'undefined/event',
type: 'POST',
data: {
event_type: 'example',
event: '{"courserun_key":"edX/999/test"}',
event: '"data"',
page: window.location.href
},
async: true
@@ -76,13 +76,13 @@
$meta_tag = $('<meta name="path_prefix" content="">');
$meta_tag.appendTo('body');
spyOn(jQuery, 'ajax');
Logger.log('example');
Logger.log('example', 'data');
expect(jQuery.ajax).toHaveBeenCalledWith({
url: '/event',
type: 'POST',
data: {
event_type: 'example',
event: '{"courserun_key":"edX/999/test"}',
event: '"data"',
page: window.location.href
},
async: true
@@ -93,13 +93,13 @@
$meta_tag = $('<meta name="path_prefix" content="testpath">');
$meta_tag.appendTo('body');
spyOn(jQuery, 'ajax');
Logger.log('example');
Logger.log('example', 'data');
expect(jQuery.ajax).toHaveBeenCalledWith({
url: 'testpath/event',
type: 'POST',
data: {
event_type: 'example',
event: '{"courserun_key":"edX/999/test"}',
event: '"data"',
page: window.location.href
},
async: true
@@ -122,24 +122,24 @@
});
it('can listen to events when the element name is unknown', function() {
Logger.log('example');
expect(this.callbacks[0]).toHaveBeenCalledWith('example', undefined, null);
expect(this.callbacks[1]).toHaveBeenCalledWith('example', undefined, null);
Logger.log('example', 'data');
expect(this.callbacks[0]).toHaveBeenCalledWith('example', 'data', null);
expect(this.callbacks[1]).toHaveBeenCalledWith('example', 'data', null);
expect(this.callbacks[2]).not.toHaveBeenCalled();
expect(this.callbacks[3]).not.toHaveBeenCalled();
});
it('can listen to events when the element name is known', function() {
Logger.log('example', null, 'element');
Logger.log('example', 'data', 'element');
expect(this.callbacks[0]).not.toHaveBeenCalled();
expect(this.callbacks[1]).not.toHaveBeenCalled();
expect(this.callbacks[2]).toHaveBeenCalledWith('example', null, 'element');
expect(this.callbacks[2]).toHaveBeenCalledWith('example', 'data', 'element');
expect(this.callbacks[3]).not.toHaveBeenCalled();
});
it('can catch exceptions', function() {
var callback = function() {
Logger.log('exception');
Logger.log('exception', 'data');
};
Logger.listen('exception', null, function() {
throw new Error();

View File

@@ -56,12 +56,6 @@
}
}
// Regardless of whether any callbacks were made, log this event.
if (typeof $$course_id !== 'undefined') {
if (!data) {
data = {}
}
data.courserun_key = $$course_id;
}
return sendRequest({
event_type: eventType,
event: JSON.stringify(data),

View File

@@ -119,8 +119,7 @@ define([
{
note_id: 'id-123',
component_usage_id: 'usage_id-123',
view: 'Test View',
courserun_key: 'edX/999/test'
view: 'Test View'
},
null,
{