Skip to content

Commit 9b02669

Browse files
fix: separate common part for v2 zip and use that in git export
1 parent 9316834 commit 9b02669

File tree

2 files changed

+28
-29
lines changed

2 files changed

+28
-29
lines changed

cms/djangoapps/contentstore/git_export_utils.py

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,11 @@
99
import shutil
1010
import subprocess
1111
import zipfile
12-
from datetime import datetime
13-
from pathlib import Path
14-
from tempfile import mkdtemp
1512
from urllib.parse import urlparse
1613

1714
from django.conf import settings
1815
from django.contrib.auth.models import User # lint-amnesty, pylint: disable=imported-auth-user
1916
from django.utils import timezone
20-
from django.utils.text import slugify
2117
from django.utils.translation import gettext_lazy as _
2218
from opaque_keys.edx.locator import LibraryLocator, LibraryLocatorV2
2319

@@ -84,32 +80,18 @@ def export_library_v2_to_zip(library_key, root_dir, library_dir, user=None):
8480
library_key: LibraryLocatorV2 for the library to export
8581
root_dir: Root directory where library_dir will be created
8682
library_dir: Directory name for the exported library content
87-
user: User object for the backup API (optional)
83+
user: Username string for the backup API (optional)
8884
8985
Raises:
9086
Exception: If backup creation or extraction fails
9187
"""
92-
from openedx_content.api import create_zip_file as create_lib_zip_file
88+
from openedx.core.djangoapps.content_libraries.tasks import create_library_v2_zip
9389

9490
# Get user object for backup API
9591
user_obj = User.objects.filter(username=user).first()
96-
# Create temporary zip backup
97-
temp_dir = Path(mkdtemp())
98-
sanitized_lib_key = str(library_key).replace(":", "-")
99-
sanitized_lib_key = slugify(sanitized_lib_key, allow_unicode=True)
100-
timestamp = datetime.now().strftime("%Y-%m-%d-%H%M%S")
101-
zip_filename = f'{sanitized_lib_key}-{timestamp}.zip'
102-
zip_path = os.path.join(temp_dir, zip_filename)
92+
temp_dir, zip_path = create_library_v2_zip(library_key, user_obj)
10393

10494
try:
105-
origin_server = getattr(settings, 'CMS_BASE', None)
106-
create_lib_zip_file(
107-
lp_key=str(library_key),
108-
path=zip_path,
109-
user=user_obj,
110-
origin_server=origin_server
111-
)
112-
11395
# Target directory for extraction
11496
target_dir = os.path.join(root_dir, library_dir)
11597

openedx/core/djangoapps/content_libraries/tasks.py

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,30 @@ def _copy_overrides(
508508
store.update_item(dest_block, user_id)
509509

510510

511+
def create_library_v2_zip(library_key: LibraryLocatorV2, user: User) -> tuple:
512+
"""
513+
Create a zip backup of a v2 library and return ``(temp_dir, zip_file_path)``.
514+
515+
The caller is responsible for cleaning up ``temp_dir`` when done.
516+
517+
Args:
518+
library_key: LibraryLocatorV2 identifying the library to export.
519+
user: User object passed to the backup API.
520+
521+
Returns:
522+
A tuple of ``(temp_dir as Path, zip_file_path as str)``.
523+
"""
524+
root_dir = Path(mkdtemp())
525+
sanitized_lib_key = str(library_key).replace(":", "-")
526+
sanitized_lib_key = slugify(sanitized_lib_key, allow_unicode=True)
527+
timestamp = datetime.now().strftime("%Y-%m-%d-%H%M%S")
528+
filename = f'{sanitized_lib_key}-{timestamp}.zip'
529+
file_path = os.path.join(root_dir, filename)
530+
origin_server = getattr(settings, 'CMS_BASE', None)
531+
create_lib_zip_file(lp_key=str(library_key), path=file_path, user=user, origin_server=origin_server)
532+
return root_dir, file_path
533+
534+
511535
class LibraryBackupTask(UserTask): # pylint: disable=abstract-method
512536
"""
513537
Base class for tasks related with Library backup functionality.
@@ -553,15 +577,8 @@ def backup_library(self, user_id: int, library_key_str: str) -> None:
553577
self.status.set_state('Exporting')
554578
set_custom_attribute("exporting_started", str(library_key))
555579

556-
root_dir = Path(mkdtemp())
557-
sanitized_lib_key = str(library_key).replace(":", "-")
558-
sanitized_lib_key = slugify(sanitized_lib_key, allow_unicode=True)
559-
timestamp = datetime.now().strftime("%Y-%m-%d-%H%M%S")
560-
filename = f'{sanitized_lib_key}-{timestamp}.zip'
561-
file_path = os.path.join(root_dir, filename)
562580
user = User.objects.get(id=user_id)
563-
origin_server = getattr(settings, 'CMS_BASE', None)
564-
create_lib_zip_file(lp_key=str(library_key), path=file_path, user=user, origin_server=origin_server)
581+
_root_dir, file_path = create_library_v2_zip(library_key, user)
565582
set_custom_attribute("exporting_completed", str(library_key))
566583

567584
with open(file_path, 'rb') as zipfile:

0 commit comments

Comments
 (0)