From d628b8c23d65af9fbf14313ce692e8cf994b5778 Mon Sep 17 00:00:00 2001 From: Esteban Giraldo Date: Mon, 7 Jul 2025 12:30:13 -0500 Subject: [PATCH] feat: add event to captrue the grade of an LTI 1.1 content --- openedx_events/content_authoring/data.py | 16 ++++++++++ openedx_events/content_authoring/signals.py | 14 +++++++++ ...block+lti1p1+content+graded+v1_schema.avsc | 29 +++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 openedx_events/event_bus/avro/tests/schemas/org+openedx+content_authoring+xblock+lti1p1+content+graded+v1_schema.avsc diff --git a/openedx_events/content_authoring/data.py b/openedx_events/content_authoring/data.py index f0c1ecbb..766ad6d5 100644 --- a/openedx_events/content_authoring/data.py +++ b/openedx_events/content_authoring/data.py @@ -248,3 +248,19 @@ class LibraryContainerData: container_key = attr.ib(type=LibraryContainerLocator) background = attr.ib(type=bool, default=False) + + +@attr.s(frozen=True) +class Lti1p1ContentGraded: + """ + Data about LTI 1.1 content object. + + Arguments: + user_id (int): database identifier of the learner's LMS user. + xblock_id (UsageKey): Location of the Xblock reponsible to launch the LTI content. + anonymous_user_id (str): Anonymous id of the Learner's LMS user. + """ + + user_id = attr.ib(type=int) + xblock_id = attr.ib(type=UsageKey) + anonymous_user_id = attr.ib(type=str) diff --git a/openedx_events/content_authoring/signals.py b/openedx_events/content_authoring/signals.py index 6332c8f4..24879077 100644 --- a/openedx_events/content_authoring/signals.py +++ b/openedx_events/content_authoring/signals.py @@ -18,6 +18,7 @@ LibraryBlockData, LibraryCollectionData, LibraryContainerData, + Lti1p1ContentGraded, XBlockData, ) from openedx_events.tooling import OpenEdxPublicSignal @@ -370,3 +371,16 @@ "course": CourseData, } ) + +# .. event_type: org.openedx.content_authoring.xblock.lti1p1.content.graded.v1 +# .. event_name: XBLOCK_LTI1P1_GRADED +# .. event_key_field: xblock.scope_ids.usage_id +# .. event_description: emitted when an LTI 1.1 Content is graded via Xblock's OutcomeService +# .. event_data: Lti1p1ContentGraded +# .. event_trigger_repository: Pearson-Advance/xblock-lti-consumer +XBLOCK_LTI1P1_GRADED = OpenEdxPublicSignal( + event_type="org.openedx.content_authoring.xblock.lti1p1.content.graded.v1", + data={ + "graded_content": Lti1p1ContentGraded, + }, +) diff --git a/openedx_events/event_bus/avro/tests/schemas/org+openedx+content_authoring+xblock+lti1p1+content+graded+v1_schema.avsc b/openedx_events/event_bus/avro/tests/schemas/org+openedx+content_authoring+xblock+lti1p1+content+graded+v1_schema.avsc new file mode 100644 index 00000000..9113e948 --- /dev/null +++ b/openedx_events/event_bus/avro/tests/schemas/org+openedx+content_authoring+xblock+lti1p1+content+graded+v1_schema.avsc @@ -0,0 +1,29 @@ +{ + "name": "CloudEvent", + "type": "record", + "doc": "Avro Event Format for CloudEvents created with openedx_events/schema", + "fields": [ + { + "name": "graded_content", + "type": { + "name": "Lti1p1ContentGraded", + "type": "record", + "fields": [ + { + "name": "user_id", + "type": "long" + }, + { + "name": "xblock_id", + "type": "string" + }, + { + "name": "anonymous_user_id", + "type": "string" + } + ] + } + } + ], + "namespace": "org.openedx.content_authoring.xblock.lti1p1.content.graded.v1" +}