From 36f6866e604757a10176d724e453bae3555a95b6 Mon Sep 17 00:00:00 2001 From: Daniel Wong Date: Wed, 19 Nov 2025 21:42:27 -0600 Subject: [PATCH] feat: include user and origin_server info in library archive (#37626) --- openedx/core/djangoapps/content_libraries/tasks.py | 5 ++++- .../core/djangoapps/content_libraries/tests/test_tasks.py | 7 +++++++ requirements/constraints.txt | 2 +- requirements/edx/base.txt | 2 +- requirements/edx/development.txt | 2 +- requirements/edx/doc.txt | 2 +- requirements/edx/testing.txt | 2 +- 7 files changed, 16 insertions(+), 6 deletions(-) diff --git a/openedx/core/djangoapps/content_libraries/tasks.py b/openedx/core/djangoapps/content_libraries/tasks.py index d4e6196e03a2..c54779a8e621 100644 --- a/openedx/core/djangoapps/content_libraries/tasks.py +++ b/openedx/core/djangoapps/content_libraries/tasks.py @@ -27,6 +27,7 @@ from django.core.files.base import ContentFile from django.contrib.auth import get_user_model from django.core.serializers.json import DjangoJSONEncoder +from django.conf import settings from celery import shared_task from celery.utils.log import get_task_logger from celery_utils.logged_task import LoggedTask @@ -557,7 +558,9 @@ def backup_library(self, user_id: int, library_key_str: str) -> None: timestamp = datetime.now().strftime("%Y-%m-%d-%H%M%S") filename = f'{sanitized_lib_key}-{timestamp}.zip' file_path = os.path.join(root_dir, filename) - create_lib_zip_file(lp_key=str(library_key), path=file_path) + user = User.objects.get(id=user_id) + origin_server = getattr(settings, 'CMS_BASE', None) + create_lib_zip_file(lp_key=str(library_key), path=file_path, user=user, origin_server=origin_server) set_custom_attribute("exporting_completed", str(library_key)) with open(file_path, 'rb') as zipfile: diff --git a/openedx/core/djangoapps/content_libraries/tests/test_tasks.py b/openedx/core/djangoapps/content_libraries/tests/test_tasks.py index 4098b2a8fff9..ac64bc86ef28 100644 --- a/openedx/core/djangoapps/content_libraries/tests/test_tasks.py +++ b/openedx/core/djangoapps/content_libraries/tests/test_tasks.py @@ -2,6 +2,7 @@ Unit tests for content libraries Celery tasks """ +from django.test import override_settings from ..models import ContentLibrary from .base import ContentLibrariesRestApiTest @@ -28,6 +29,7 @@ def test_backup_task_returns_task_id(self): result = backup_library.delay(self.user.id, str(self.lib1.library_key)) assert result.task_id is not None + @override_settings(CMS_BASE="test.com") def test_backup_task_success(self): result = backup_library.delay(self.user.id, str(self.lib1.library_key)) assert result.state == 'SUCCESS' @@ -35,6 +37,11 @@ def test_backup_task_success(self): artifact = UserTaskArtifact.objects.filter(status__task_id=result.task_id, name='Output').first() assert artifact is not None assert artifact.file.name.endswith('.zip') + # test artifact content + with artifact.file.open('rb') as f: + content = f.read() + assert b'created_by_email = "bob@example.com"' in content + assert b'origin_server = "test.com"' in content def test_backup_task_failure(self): result = backup_library.delay(self.user.id, self.wrong_task_id) diff --git a/requirements/constraints.txt b/requirements/constraints.txt index c96838f93777..6b5f3e38c2ed 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -61,7 +61,7 @@ numpy<2.0.0 # Date: 2023-09-18 # pinning this version to avoid updates while the library is being developed # Issue for unpinning: https://github.com/openedx/edx-platform/issues/35269 -openedx-learning==0.30.0 +openedx-learning==0.30.1 # Date: 2023-11-29 # Open AI version 1.0.0 dropped support for openai.ChatCompletion which is currently in use in enterprise. diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index f3387eb7bb18..654886be2a01 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -855,7 +855,7 @@ openedx-filters==2.1.0 # ora2 openedx-forum==0.3.8 # via -r requirements/edx/kernel.in -openedx-learning==0.30.0 +openedx-learning==0.30.1 # via # -c requirements/constraints.txt # -r requirements/edx/kernel.in diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index 6e75615ec812..1278b4cfe9e2 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -1419,7 +1419,7 @@ openedx-forum==0.3.8 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -openedx-learning==0.30.0 +openedx-learning==0.30.1 # via # -c requirements/constraints.txt # -r requirements/edx/doc.txt diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index 5e465e8905ba..3adffb5dd3eb 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -1033,7 +1033,7 @@ openedx-filters==2.1.0 # ora2 openedx-forum==0.3.8 # via -r requirements/edx/base.txt -openedx-learning==0.30.0 +openedx-learning==0.30.1 # via # -c requirements/constraints.txt # -r requirements/edx/base.txt diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 08f7639ace60..5c4e0a9b48c4 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -1079,7 +1079,7 @@ openedx-filters==2.1.0 # ora2 openedx-forum==0.3.8 # via -r requirements/edx/base.txt -openedx-learning==0.30.0 +openedx-learning==0.30.1 # via # -c requirements/constraints.txt # -r requirements/edx/base.txt