From 834970b72595d83ac146f9a6af260ab6b50ed5ed Mon Sep 17 00:00:00 2001 From: David Larlet Date: Fri, 6 Dec 2024 11:28:28 -0500 Subject: [PATCH] chore: add command to migrate from fs to S3 --- umap/management/commands/migrate_to_S3.py | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 umap/management/commands/migrate_to_S3.py diff --git a/umap/management/commands/migrate_to_S3.py b/umap/management/commands/migrate_to_S3.py new file mode 100644 index 00000000..a1ccd9bb --- /dev/null +++ b/umap/management/commands/migrate_to_S3.py @@ -0,0 +1,29 @@ +from django.conf import settings +from django.core.management.base import BaseCommand + +from umap.models import DataLayer +from umap.storage import UmapFileSystem + + +class Command(BaseCommand): + help = "Migrate latest datalayers from filesystem to S3." + + def handle(self, *args, **options): + assert settings.UMAP_READONLY, "You must run that script with a read-only uMap." + assert ( + settings.STORAGES["data"]["BACKEND"] == "umap.storage.UmapS3" + ), "You must configure your storages to point to S3" + fs_storage = UmapFileSystem() + for datalayer in DataLayer.objects.all(): + geojson_fs_path = str(datalayer.geojson) + try: + datalayer.geojson.save( + datalayer.geojson.name, fs_storage.open(geojson_fs_path) + ) + except FileNotFoundError as e: + print(e) + print(geojson_fs_path, "not found on disk") + continue + if options["verbosity"] > 1: + print("Migrated:", geojson_fs_path) + datalayer.save(force_update=True)