From dd9a92617b21a34572fb5c0a66b875c2bf083d5b Mon Sep 17 00:00:00 2001 From: Daniel Wong Date: Wed, 1 Oct 2025 12:03:33 -0600 Subject: [PATCH 1/3] feat: include learning package metadata in the backup dump file --- .../apps/authoring/backup_restore/toml.py | 20 +++++++++++++++++-- .../authoring/backup_restore/test_backup.py | 7 +++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/openedx_learning/apps/authoring/backup_restore/toml.py b/openedx_learning/apps/authoring/backup_restore/toml.py index 91bc71a06..6a2abd7e4 100644 --- a/openedx_learning/apps/authoring/backup_restore/toml.py +++ b/openedx_learning/apps/authoring/backup_restore/toml.py @@ -6,6 +6,7 @@ from typing import Any, Dict import tomlkit +from django.conf import settings from openedx_learning.apps.authoring.collections.models import Collection from openedx_learning.apps.authoring.publishing import api as publishing_api @@ -13,7 +14,12 @@ from openedx_learning.apps.authoring.publishing.models.learning_package import LearningPackage -def toml_learning_package(learning_package: LearningPackage, timestamp: datetime) -> str: +def toml_learning_package( + learning_package: LearningPackage, + timestamp: datetime, + format_version: int = 1, + user: str | None = None + ) -> str: """ Create a TOML representation of the learning package. @@ -28,13 +34,23 @@ def toml_learning_package(learning_package: LearningPackage, timestamp: datetime updated = 2025-09-03T17:50:59.536190Z """ doc = tomlkit.document() - doc.add(tomlkit.comment(f"Datetime of the export: {timestamp}")) + + # Learning package main info section = tomlkit.table() section.add("title", learning_package.title) section.add("key", learning_package.key) section.add("description", learning_package.description) section.add("created", learning_package.created) section.add("updated", learning_package.updated) + + # Learning package metadata + metadata = tomlkit.table() + metadata.add("format_version", format_version) + metadata.add("created_by", user or "unknown") + metadata.add("created_at", timestamp) + metadata.add("origin_server", getattr(settings, "CMS_BASE", "unknown")) + + doc.add("meta", metadata) doc.add("learning_package", section) return tomlkit.dumps(doc) diff --git a/tests/openedx_learning/apps/authoring/backup_restore/test_backup.py b/tests/openedx_learning/apps/authoring/backup_restore/test_backup.py index 448f9ddb4..2c1aee859 100644 --- a/tests/openedx_learning/apps/authoring/backup_restore/test_backup.py +++ b/tests/openedx_learning/apps/authoring/backup_restore/test_backup.py @@ -9,6 +9,7 @@ from django.contrib.auth import get_user_model from django.core.management import CommandError, call_command from django.db.models import QuerySet +from django.test import override_settings from openedx_learning.api import authoring as api from openedx_learning.api.authoring_models import Collection, Component, Content, LearningPackage, PublishableEntity @@ -212,6 +213,7 @@ def check_zip_file_structure(self, zip_path: Path): for expected_path in expected_paths: self.assertIn(expected_path, zip_name_list) + @override_settings(CMS_BASE="http://cms.test", LMS_BASE="http://lms.test") def test_lp_dump_command(self): lp_key = self.learning_package.key file_name = f"{lp_key}.zip" @@ -238,6 +240,11 @@ def test_lp_dump_command(self): f'key = "{self.learning_package.key}"', f'title = "{self.learning_package.title}"', f'description = "{self.learning_package.description}"', + '[meta]', + 'format_version = 1', + 'created_by = "unknown"', + 'origin_server = "http://cms.test"', + 'created_at =', ] ) From 5a6969c2f2d6542089fcf2b8dad165ce24fa9e28 Mon Sep 17 00:00:00 2001 From: Daniel Wong Date: Thu, 2 Oct 2025 11:03:59 -0600 Subject: [PATCH 2/3] fix: adjust formatting in package.toml --- .../apps/authoring/backup_restore/toml.py | 17 ++++++++++++----- .../authoring/backup_restore/test_backup.py | 2 -- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/openedx_learning/apps/authoring/backup_restore/toml.py b/openedx_learning/apps/authoring/backup_restore/toml.py index 6a2abd7e4..9312f66df 100644 --- a/openedx_learning/apps/authoring/backup_restore/toml.py +++ b/openedx_learning/apps/authoring/backup_restore/toml.py @@ -6,7 +6,7 @@ from typing import Any, Dict import tomlkit -from django.conf import settings +from django.contrib.auth.models import User as UserType # pylint: disable=imported-auth-user from openedx_learning.apps.authoring.collections.models import Collection from openedx_learning.apps.authoring.publishing import api as publishing_api @@ -18,13 +18,18 @@ def toml_learning_package( learning_package: LearningPackage, timestamp: datetime, format_version: int = 1, - user: str | None = None + user: UserType | None = None, + origin_server: str | None = None ) -> str: """ Create a TOML representation of the learning package. The resulting content looks like: - # Datetime of the export: 2025-09-03 12:50:59.573253 + [meta] + format_version = 1 + created_by = "dormsbee" + created_at = 2025-09-03T17:50:59.536190Z + origin_server = "http://cms.test" [learning_package] title = "Components Test Case Learning Package" @@ -46,9 +51,11 @@ def toml_learning_package( # Learning package metadata metadata = tomlkit.table() metadata.add("format_version", format_version) - metadata.add("created_by", user or "unknown") + if user: + metadata.add("created_by", user.username) metadata.add("created_at", timestamp) - metadata.add("origin_server", getattr(settings, "CMS_BASE", "unknown")) + if origin_server: + metadata.add("origin_server", origin_server) doc.add("meta", metadata) doc.add("learning_package", section) diff --git a/tests/openedx_learning/apps/authoring/backup_restore/test_backup.py b/tests/openedx_learning/apps/authoring/backup_restore/test_backup.py index 2c1aee859..c257a1e60 100644 --- a/tests/openedx_learning/apps/authoring/backup_restore/test_backup.py +++ b/tests/openedx_learning/apps/authoring/backup_restore/test_backup.py @@ -242,8 +242,6 @@ def test_lp_dump_command(self): f'description = "{self.learning_package.description}"', '[meta]', 'format_version = 1', - 'created_by = "unknown"', - 'origin_server = "http://cms.test"', 'created_at =', ] ) From 95995445218b7fc2f721c0138238161c7491efe5 Mon Sep 17 00:00:00 2001 From: Daniel Wong Date: Thu, 2 Oct 2025 13:16:46 -0600 Subject: [PATCH 3/3] fix: minor adjustment in comments --- openedx_learning/apps/authoring/backup_restore/toml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openedx_learning/apps/authoring/backup_restore/toml.py b/openedx_learning/apps/authoring/backup_restore/toml.py index 9312f66df..01951a53f 100644 --- a/openedx_learning/apps/authoring/backup_restore/toml.py +++ b/openedx_learning/apps/authoring/backup_restore/toml.py @@ -29,7 +29,7 @@ def toml_learning_package( format_version = 1 created_by = "dormsbee" created_at = 2025-09-03T17:50:59.536190Z - origin_server = "http://cms.test" + origin_server = "cms.test" [learning_package] title = "Components Test Case Learning Package"