AIRAVATA-3694 Basic unarchive_user_data command
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 0d45e93..4eae090 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 @@
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 0000000..d1d817d
--- /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}"))