This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git

commit b9dc12e4e27e4f7ef199b36590736ffb399b8f81
Author: Marcus Christie <[email protected]>
AuthorDate: Mon Apr 17 15:48:26 2023 -0400

    AIRAVATA-3694 Basic unarchive_user_data command
---
 .../admin/management/commands/archive_user_data.py |  2 +-
 .../management/commands/unarchive_user_data.py     | 28 ++++++++++++++++++++++
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git 
a/django_airavata/apps/admin/management/commands/archive_user_data.py 
b/django_airavata/apps/admin/management/commands/archive_user_data.py
index 0d45e931..4eae0904 100644
--- a/django_airavata/apps/admin/management/commands/archive_user_data.py
+++ b/django_airavata/apps/admin/management/commands/archive_user_data.py
@@ -68,7 +68,7 @@ class Command(BaseCommand):
         with transaction.atomic():
             user_data_archive = models.UserDataArchive(
                 archive_name=archive_tarball_filename,
-                archive_path=os.fspath(archive_directory / 
archive_list_filename),
+                archive_path=os.fspath(archive_directory / 
archive_tarball_filename),
                 max_modification_time=max_age)
             user_data_archive.save()
             # delete archived entries
diff --git 
a/django_airavata/apps/admin/management/commands/unarchive_user_data.py 
b/django_airavata/apps/admin/management/commands/unarchive_user_data.py
new file mode 100644
index 00000000..d1d817d0
--- /dev/null
+++ b/django_airavata/apps/admin/management/commands/unarchive_user_data.py
@@ -0,0 +1,28 @@
+
+import os
+import tarfile
+
+from django.core.management.base import BaseCommand
+
+from django_airavata.apps.admin import models
+
+
+class Command(BaseCommand):
+    help = "Unarchive a user data archive"
+
+    def add_arguments(self, parser):
+        parser.add_argument('archive_file',
+                            help="Archive file (ending in .tgz) that was 
created by the archive_user_data")
+
+    def handle(self, *args, **options):
+        with tarfile.open(options["archive_file"]) as tf:
+            tf.extractall(path="/")
+
+        # mark archive as rolled back
+        archive_name = os.path.basename(options["archive_file"])
+        try:
+            archive = 
models.UserDataArchive.objects.get(archive_name=archive_name)
+            archive.rolled_back = True
+            archive.save()
+        except models.UserDataArchive.DoesNotExist:
+            self.stdout.write(self.style.ERROR(f"Could not find 
UserDataArchive database record for {archive_name}"))

Reply via email to