diff --git a/openedx_learning/apps/authoring/backup_restore/toml.py b/openedx_learning/apps/authoring/backup_restore/toml.py index 91bc71a06..01951a53f 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.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 @@ -13,12 +14,22 @@ 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: 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 = "cms.test" [learning_package] title = "Components Test Case Learning Package" @@ -28,13 +39,25 @@ 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) + if user: + metadata.add("created_by", user.username) + metadata.add("created_at", timestamp) + if origin_server: + metadata.add("origin_server", origin_server) + + 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..c257a1e60 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,9 @@ 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_at =', ] )