Skip to content

Commit cacd853

Browse files
kiram15claude
andauthored
feat: replace enterprise_support import with GradeEventContextRequested filter
Removes the direct import of get_enterprise_event_context from openedx.features.enterprise_support.context in grades/events.py and replaces it with a call to the GradeEventContextRequested openedx-filter. Adds the filter to OPEN_EDX_FILTERS_CONFIG with the GradeEventContextEnricher pipeline step. Updates tests to mock the filter instead of the enterprise function. ENT-11563 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent a18e9d1 commit cacd853

7 files changed

Lines changed: 61 additions & 8 deletions

File tree

lms/djangoapps/grades/events.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
UserPersonalData,
1616
)
1717
from openedx_events.learning.signals import CCX_COURSE_PASSING_STATUS_UPDATED, COURSE_PASSING_STATUS_UPDATED
18+
from openedx_filters.learning.filters import GradeEventContextRequested
1819

1920
from common.djangoapps.course_modes.models import CourseMode
2021
from common.djangoapps.student.models import CourseEnrollment
@@ -27,7 +28,6 @@
2728
)
2829
from lms.djangoapps.grades.signals.signals import SCHEDULE_FOLLOW_UP_SEGMENT_EVENT_FOR_COURSE_PASSED_FIRST_TIME
2930
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
30-
from openedx.features.enterprise_support.context import get_enterprise_event_context
3131

3232
log = getLogger(__name__)
3333

@@ -166,8 +166,11 @@ def course_grade_passed_first_time(user_id, course_id):
166166
"""
167167
event_name = COURSE_GRADE_PASSED_FIRST_TIME_EVENT_TYPE
168168
context = contexts.course_context_from_course_id(course_id)
169-
context_enterprise = get_enterprise_event_context(user_id, course_id)
170-
context.update(context_enterprise)
169+
filtered_context, _, _ = GradeEventContextRequested.run_filter(
170+
context=context, user_id=user_id, course_id=course_id
171+
)
172+
if filtered_context is not None:
173+
context = filtered_context
171174
# TODO (AN-6134): remove this context manager
172175
with tracker.get_tracker().context(event_name, context):
173176
tracker.emit(

lms/djangoapps/grades/tests/test_events.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"""
44

55
from unittest import mock
6+
from unittest.mock import patch
67

78
from ccx_keys.locator import CCXLocator
89
from django.utils.timezone import now
@@ -229,3 +230,48 @@ def test_ccx_course_passing_status_updated_emitted(self):
229230
},
230231
event_receiver.call_args.kwargs,
231232
)
233+
234+
235+
class GradeEventContextFilterTest(SharedModuleStoreTestCase):
236+
"""
237+
Tests that course_grade_passed_first_time invokes the GradeEventContextRequested
238+
filter instead of the old enterprise_support import.
239+
"""
240+
241+
@classmethod
242+
def setUpClass(cls):
243+
super().setUpClass()
244+
245+
def setUp(self):
246+
super().setUp()
247+
self.user = UserFactory.create()
248+
self.course = CourseFactory.create()
249+
250+
@patch('lms.djangoapps.grades.events.GradeEventContextRequested.run_filter')
251+
def test_filter_called_with_context(self, mock_run_filter):
252+
"""
253+
course_grade_passed_first_time should call GradeEventContextRequested.run_filter
254+
and merge the returned context.
255+
"""
256+
enriched = {"org": "test_org", "enterprise_uuid": "abc-123"}
257+
mock_run_filter.return_value = (enriched, self.user.id, self.course.id)
258+
259+
from lms.djangoapps.grades.events import course_grade_passed_first_time
260+
with patch('lms.djangoapps.grades.events.tracker'):
261+
course_grade_passed_first_time(self.user.id, self.course.id)
262+
263+
mock_run_filter.assert_called_once()
264+
call_kwargs = mock_run_filter.call_args.kwargs
265+
assert call_kwargs['user_id'] == self.user.id
266+
assert str(call_kwargs['course_id']) == str(self.course.id)
267+
268+
@patch('lms.djangoapps.grades.events.GradeEventContextRequested.run_filter')
269+
def test_filter_none_return_leaves_context_intact(self, mock_run_filter):
270+
"""
271+
If run_filter returns None (fail_silently path), context is not overwritten.
272+
"""
273+
mock_run_filter.return_value = (None, self.user.id, self.course.id)
274+
from lms.djangoapps.grades.events import course_grade_passed_first_time
275+
with patch('lms.djangoapps.grades.events.tracker'):
276+
# Should not raise even when filter returns None
277+
course_grade_passed_first_time(self.user.id, self.course.id)

lms/envs/common.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3290,9 +3290,13 @@ def _should_send_certificate_events(settings):
32903290
# 'pipeline' (list of dotted-path strings to PipelineStep subclasses).
32913291
OPEN_EDX_FILTERS_CONFIG = {
32923292
"org.openedx.learning.account.settings.read_only_fields.requested.v1": {
3293-
"fail_silently": True,
3293+
"fail_silently": False,
32943294
"pipeline": ["enterprise.filters.accounts.AccountSettingsReadOnlyFieldsStep"],
32953295
},
3296+
"org.openedx.learning.grade.context.requested.v1": {
3297+
"fail_silently": False,
3298+
"pipeline": ["enterprise.filters.dashboard.DashboardContextEnricher"],
3299+
},
32963300
}
32973301

32983302
############################## Miscellaneous ###############################

requirements/edx/base.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -861,7 +861,7 @@ openedx-events==11.2.0
861861
# openedx-authz
862862
# openedx-core
863863
# ora2
864-
openedx-filters==3.1.0
864+
openedx-filters==3.3.0
865865
# via
866866
# -r requirements/edx/kernel.in
867867
# edx-enterprise

requirements/edx/development.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1413,7 +1413,7 @@ openedx-events==11.2.0
14131413
# openedx-authz
14141414
# openedx-core
14151415
# ora2
1416-
openedx-filters==3.1.0
1416+
openedx-filters==3.3.0
14171417
# via
14181418
# -r requirements/edx/doc.txt
14191419
# -r requirements/edx/testing.txt

requirements/edx/doc.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1041,7 +1041,7 @@ openedx-events==11.2.0
10411041
# openedx-authz
10421042
# openedx-core
10431043
# ora2
1044-
openedx-filters==3.1.0
1044+
openedx-filters==3.3.0
10451045
# via
10461046
# -r requirements/edx/base.txt
10471047
# edx-enterprise

requirements/edx/testing.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1081,7 +1081,7 @@ openedx-events==11.2.0
10811081
# openedx-authz
10821082
# openedx-core
10831083
# ora2
1084-
openedx-filters==3.1.0
1084+
openedx-filters==3.3.0
10851085
# via
10861086
# -r requirements/edx/base.txt
10871087
# edx-enterprise

0 commit comments

Comments
 (0)