From e5556438e0927d0c9ed7888132bd1502dc7e36cc Mon Sep 17 00:00:00 2001 From: Navin Karkera Date: Thu, 19 Mar 2026 16:17:45 +0530 Subject: [PATCH 1/6] feat: add pre-item-delete signal This is required in cases where we want to be able to delete or update database rows related to children blocks on the deleted block. Fetching children after deletion is not possible, which is why this signal is useful --- xmodule/modulestore/__init__.py | 7 +++++++ xmodule/modulestore/django.py | 10 +++++++++- xmodule/modulestore/split_mongo/split.py | 3 +++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/xmodule/modulestore/__init__.py b/xmodule/modulestore/__init__.py index 1e83e7e57162..e75f720bc376 100644 --- a/xmodule/modulestore/__init__.py +++ b/xmodule/modulestore/__init__.py @@ -1425,3 +1425,10 @@ def _emit_item_deleted_signal(self, usage_key, user_id): """ if self.signal_handler: self.signal_handler.send("item_deleted", usage_key=usage_key, user_id=user_id) + + def _emit_pre_item_delete_signal(self, usage_key, user_id): + """ + Helper method used to emit the pre_item_delete signal. + """ + if self.signal_handler: + self.signal_handler.send("pre_item_delete", usage_key=usage_key, user_id=user_id) diff --git a/xmodule/modulestore/django.py b/xmodule/modulestore/django.py index 7ac4c4d7d704..6dd0addfcbc8 100644 --- a/xmodule/modulestore/django.py +++ b/xmodule/modulestore/django.py @@ -195,11 +195,19 @@ def do_my_expensive_update(course_key): course_deleted = SwitchedSignal("course_deleted") library_updated = SwitchedSignal("library_updated") item_deleted = SwitchedSignal("item_deleted") + pre_item_delete = SwitchedSignal("pre_item_delete") _mapping = { signal.name: signal for signal - in [pre_publish, course_published, course_deleted, library_updated, item_deleted] + in [ + pre_publish, + course_published, + course_deleted, + library_updated, + item_deleted, + pre_item_delete, + ] } def __init__(self, modulestore_class): diff --git a/xmodule/modulestore/split_mongo/split.py b/xmodule/modulestore/split_mongo/split.py index f429c9d14ecc..429a26561a76 100644 --- a/xmodule/modulestore/split_mongo/split.py +++ b/xmodule/modulestore/split_mongo/split.py @@ -2517,6 +2517,9 @@ def delete_item(self, usage_locator, user_id, force=False): # lint-amnesty, pyl # The supplied UsageKey is of the wrong type, so it can't possibly be stored in this modulestore. raise ItemNotFoundError(usage_locator) + # Send pre delete event signal before deleting any item + self._emit_pre_item_delete_signal(usage_locator, user_id) + with self.bulk_operations(usage_locator.course_key): original_structure = self._lookup_course(usage_locator.course_key).structure block_key = BlockKey.from_usage_key(usage_locator) From 4cbad5249dd25fadb3af163a5c81111bbb6f906d Mon Sep 17 00:00:00 2001 From: Navin Karkera Date: Thu, 19 Mar 2026 20:54:58 +0530 Subject: [PATCH 2/6] temp: point to dev branch of lti-xblock --- requirements/edx/base.txt | 2 +- requirements/edx/development.txt | 2 +- requirements/edx/doc.txt | 2 +- requirements/edx/kernel.in | 2 +- requirements/edx/testing.txt | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index a15d4f6966c7..88fbceafd853 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -728,7 +728,7 @@ lazy==1.6 # lti-consumer-xblock # ora2 # xblock -lti-consumer-xblock==10.0.1 +lti-consumer-xblock @ git+https://github.com/open-craft/xblock-lti-consumer@navin/fal-4318/split-config # via -r requirements/edx/kernel.in lxml[html-clean]==5.3.2 # via diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index de4aa9bdda23..394c37a5a503 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -1206,7 +1206,7 @@ libsass==0.10.0 # via # -c requirements/constraints.txt # -r requirements/edx/assets.txt -lti-consumer-xblock==10.0.1 +lti-consumer-xblock @ git+https://github.com/open-craft/xblock-lti-consumer@navin/fal-4318/split-config # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index 11dacbbedfb9..2bf262aea721 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -886,7 +886,7 @@ lazy==1.6 # lti-consumer-xblock # ora2 # xblock -lti-consumer-xblock==10.0.1 +lti-consumer-xblock @ git+https://github.com/open-craft/xblock-lti-consumer@navin/fal-4318/split-config # via -r requirements/edx/base.txt lxml[html-clean]==5.3.2 # via diff --git a/requirements/edx/kernel.in b/requirements/edx/kernel.in index 26448abf177d..e838436d292f 100644 --- a/requirements/edx/kernel.in +++ b/requirements/edx/kernel.in @@ -101,7 +101,7 @@ jsonfield # Django model field for validated JSON; use laboratory # Library for testing that code refactors/infrastructure changes produce identical results importlib_metadata # Used to access entry_points in i18n_api plugin lxml[html_clean] # XML parser -lti-consumer-xblock>=9.14.2 +lti-consumer-xblock @ git+https://github.com/open-craft/xblock-lti-consumer@navin/fal-4318/split-config mako # Primary template language used for server-side page rendering Markdown # Convert text markup to HTML; used in capa problems, forums, and course wikis meilisearch # Library to access Meilisearch search engine (will replace ElasticSearch) diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 2103c5405005..22064a83761c 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -925,7 +925,7 @@ lazy==1.6 # lti-consumer-xblock # ora2 # xblock -lti-consumer-xblock==10.0.1 +lti-consumer-xblock @ git+https://github.com/open-craft/xblock-lti-consumer@navin/fal-4318/split-config # via -r requirements/edx/base.txt lxml[html-clean]==5.3.2 # via From d59b9052add66853dc67180891b7d0403c7e4be2 Mon Sep 17 00:00:00 2001 From: Navin Karkera Date: Thu, 19 Mar 2026 22:32:09 +0530 Subject: [PATCH 3/6] fix: failing tests --- xmodule/modulestore/tests/test_mixed_modulestore.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xmodule/modulestore/tests/test_mixed_modulestore.py b/xmodule/modulestore/tests/test_mixed_modulestore.py index 6c0cdc6504d1..c12607687bde 100644 --- a/xmodule/modulestore/tests/test_mixed_modulestore.py +++ b/xmodule/modulestore/tests/test_mixed_modulestore.py @@ -1123,7 +1123,7 @@ def test_has_changes_missing_child(self, default_ms, default_branch): # check CONTENT_TAGGING_AUTO CourseWaffleFlag # Find: active_versions, 2 structures (published & draft), definition (unnecessary) # Sends: updated draft and published structures and active_versions - @ddt.data((ModuleStoreEnum.Type.split, 5, 2, 3)) + @ddt.data((ModuleStoreEnum.Type.split, 11, 2, 3)) @ddt.unpack def test_delete_item(self, default_ms, num_mysql, max_find, max_send): """ @@ -1146,7 +1146,7 @@ def test_delete_item(self, default_ms, num_mysql, max_find, max_send): # check CONTENT_TAGGING_AUTO CourseWaffleFlag # find: draft and published structures, definition (unnecessary) # sends: update published (why?), draft, and active_versions - @ddt.data((ModuleStoreEnum.Type.split, 5, 3, 3)) + @ddt.data((ModuleStoreEnum.Type.split, 11, 3, 3)) @ddt.unpack def test_delete_private_vertical(self, default_ms, num_mysql, max_find, max_send): """ @@ -1196,7 +1196,7 @@ def test_delete_private_vertical(self, default_ms, num_mysql, max_find, max_send # check CONTENT_TAGGING_AUTO CourseWaffleFlag # find: structure (cached) # send: update structure and active_versions - @ddt.data((ModuleStoreEnum.Type.split, 5, 1, 2)) + @ddt.data((ModuleStoreEnum.Type.split, 11, 1, 2)) @ddt.unpack def test_delete_draft_vertical(self, default_ms, num_mysql, max_find, max_send): """ From d0b44da504a7e8d8278f8ac6a10151351672397c Mon Sep 17 00:00:00 2001 From: Navin Karkera Date: Tue, 14 Apr 2026 15:43:38 +0530 Subject: [PATCH 4/6] temp: requirements --- requirements/edx/base.txt | 1 + requirements/edx/development.txt | 1 + requirements/edx/doc.txt | 1 + requirements/edx/testing.txt | 1 + 4 files changed, 4 insertions(+) diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index 88fbceafd853..b30c226d6053 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -850,6 +850,7 @@ openedx-events==11.1.0 # edx-event-bus-kafka # edx-event-bus-redis # event-tracking + # lti-consumer-xblock # openedx-core # ora2 openedx-filters==3.1.0 diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index 394c37a5a503..70e57f865d6a 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -1411,6 +1411,7 @@ openedx-events==11.1.0 # edx-event-bus-kafka # edx-event-bus-redis # event-tracking + # lti-consumer-xblock # openedx-core # ora2 openedx-filters==3.1.0 diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index 2bf262aea721..1a0f12ed574e 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -1029,6 +1029,7 @@ openedx-events==11.1.0 # edx-event-bus-kafka # edx-event-bus-redis # event-tracking + # lti-consumer-xblock # openedx-core # ora2 openedx-filters==3.1.0 diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 22064a83761c..fbc4fcb3ae1f 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -1076,6 +1076,7 @@ openedx-events==11.1.0 # edx-event-bus-kafka # edx-event-bus-redis # event-tracking + # lti-consumer-xblock # openedx-core # ora2 openedx-filters==3.1.0 From 526fb5a406fbbd228cc65c01ceb76228dff0c8dc Mon Sep 17 00:00:00 2001 From: Navin Karkera Date: Thu, 19 Mar 2026 20:54:58 +0530 Subject: [PATCH 5/6] temp: point to dev branch of lti-xblock --- requirements/edx/base.txt | 1 - requirements/edx/development.txt | 1 - requirements/edx/doc.txt | 1 - requirements/edx/testing.txt | 1 - 4 files changed, 4 deletions(-) diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index b30c226d6053..bb23e8264100 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -851,7 +851,6 @@ openedx-events==11.1.0 # edx-event-bus-redis # event-tracking # lti-consumer-xblock - # openedx-core # ora2 openedx-filters==3.1.0 # via diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index 70e57f865d6a..76c7655ad2e6 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -1412,7 +1412,6 @@ openedx-events==11.1.0 # edx-event-bus-redis # event-tracking # lti-consumer-xblock - # openedx-core # ora2 openedx-filters==3.1.0 # via diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index 1a0f12ed574e..842f9dfb613d 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -1030,7 +1030,6 @@ openedx-events==11.1.0 # edx-event-bus-redis # event-tracking # lti-consumer-xblock - # openedx-core # ora2 openedx-filters==3.1.0 # via diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index fbc4fcb3ae1f..576f4d2328f8 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -1077,7 +1077,6 @@ openedx-events==11.1.0 # edx-event-bus-redis # event-tracking # lti-consumer-xblock - # openedx-core # ora2 openedx-filters==3.1.0 # via From 4c967d53ef57d93889c54c7aafc2431666020d59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=B4mulo=20Penido?= Date: Thu, 2 Apr 2026 17:14:51 -0300 Subject: [PATCH 6/6] chore: pin lti-conmsumer-xblock branch --- requirements/edx/base.txt | 3 ++- requirements/edx/development.txt | 3 ++- requirements/edx/doc.txt | 3 ++- requirements/edx/kernel.in | 2 +- requirements/edx/testing.txt | 3 ++- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index bb23e8264100..22a84b567049 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -728,7 +728,7 @@ lazy==1.6 # lti-consumer-xblock # ora2 # xblock -lti-consumer-xblock @ git+https://github.com/open-craft/xblock-lti-consumer@navin/fal-4318/split-config +lti-consumer-xblock @ git+https://github.com/open-craft/xblock-lti-consumer.git@rpenido/FAL-4322/new-editor-design # via -r requirements/edx/kernel.in lxml[html-clean]==5.3.2 # via @@ -851,6 +851,7 @@ openedx-events==11.1.0 # edx-event-bus-redis # event-tracking # lti-consumer-xblock + # openedx-core # ora2 openedx-filters==3.1.0 # via diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index 76c7655ad2e6..4a9b797ef1fb 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -1206,7 +1206,7 @@ libsass==0.10.0 # via # -c requirements/constraints.txt # -r requirements/edx/assets.txt -lti-consumer-xblock @ git+https://github.com/open-craft/xblock-lti-consumer@navin/fal-4318/split-config +lti-consumer-xblock @ git+https://github.com/open-craft/xblock-lti-consumer.git@rpenido/FAL-4322/new-editor-design # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1412,6 +1412,7 @@ openedx-events==11.1.0 # edx-event-bus-redis # event-tracking # lti-consumer-xblock + # openedx-core # ora2 openedx-filters==3.1.0 # via diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index 842f9dfb613d..92ca1603a909 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -886,7 +886,7 @@ lazy==1.6 # lti-consumer-xblock # ora2 # xblock -lti-consumer-xblock @ git+https://github.com/open-craft/xblock-lti-consumer@navin/fal-4318/split-config +lti-consumer-xblock @ git+https://github.com/open-craft/xblock-lti-consumer.git@rpenido/FAL-4322/new-editor-design # via -r requirements/edx/base.txt lxml[html-clean]==5.3.2 # via @@ -1030,6 +1030,7 @@ openedx-events==11.1.0 # edx-event-bus-redis # event-tracking # lti-consumer-xblock + # openedx-core # ora2 openedx-filters==3.1.0 # via diff --git a/requirements/edx/kernel.in b/requirements/edx/kernel.in index e838436d292f..55d8132c1bc8 100644 --- a/requirements/edx/kernel.in +++ b/requirements/edx/kernel.in @@ -101,7 +101,7 @@ jsonfield # Django model field for validated JSON; use laboratory # Library for testing that code refactors/infrastructure changes produce identical results importlib_metadata # Used to access entry_points in i18n_api plugin lxml[html_clean] # XML parser -lti-consumer-xblock @ git+https://github.com/open-craft/xblock-lti-consumer@navin/fal-4318/split-config +lti-consumer-xblock @ git+https://github.com/open-craft/xblock-lti-consumer.git@rpenido/FAL-4322/new-editor-design mako # Primary template language used for server-side page rendering Markdown # Convert text markup to HTML; used in capa problems, forums, and course wikis meilisearch # Library to access Meilisearch search engine (will replace ElasticSearch) diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 576f4d2328f8..7b215018c552 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -925,7 +925,7 @@ lazy==1.6 # lti-consumer-xblock # ora2 # xblock -lti-consumer-xblock @ git+https://github.com/open-craft/xblock-lti-consumer@navin/fal-4318/split-config +lti-consumer-xblock @ git+https://github.com/open-craft/xblock-lti-consumer.git@rpenido/FAL-4322/new-editor-design # via -r requirements/edx/base.txt lxml[html-clean]==5.3.2 # via @@ -1077,6 +1077,7 @@ openedx-events==11.1.0 # edx-event-bus-redis # event-tracking # lti-consumer-xblock + # openedx-core # ora2 openedx-filters==3.1.0 # via