Skip to content

Commit

Permalink
chore: migrate existing local remoteURL datalayers
Browse files Browse the repository at this point in the history
  • Loading branch information
almet committed Feb 26, 2024
1 parent ffe7f18 commit 176d03d
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 2 deletions.
10 changes: 8 additions & 2 deletions umap/migrations/0018_datalayer_uuid.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name="datalayer",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, null=True),
field=models.UUIDField(
default=uuid.uuid4, editable=False, null=True, serialize=False
),
),
# Generate UUIDs for existing records
migrations.RunSQL("UPDATE umap_datalayer SET uuid = gen_random_uuid()"),
Expand All @@ -41,7 +43,11 @@ class Migration(migrations.Migration):
model_name="datalayer",
name="uuid",
field=models.UUIDField(
default=uuid.uuid4, editable=False, unique=True, primary_key=True
default=uuid.uuid4,
editable=False,
unique=True,
primary_key=True,
serialize=False,
),
),
]
52 changes: 52 additions & 0 deletions umap/migrations/0019_migrate_internal_remote_datalayers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Generated by Django 4.2 on 2024-02-26 14:09

import re

from django.db import migrations
from django.conf import settings
from django.urls import reverse, NoReverseMatch

# Some users hacked uMap to use another map datalayer as a remote data source.
# This script gently handles the migration for them.


def migrate_datalayers(apps, schema_editor):
DataLayer = apps.get_model("umap", "DataLayer")

datalayers = DataLayer.objects.filter(
settings__remoteData__url__icontains="datalayer"
)

for item in datalayers:
old_url = item.settings["remoteData"]["url"]
match = re.search(
rf"{settings.SITE_URL}/datalayer/(?P<map_id>\d+)/(?P<datalayer_id>\d+)",
old_url,
)
if match:
remote_id = match.group("datalayer_id")
map_id = match.group("map_id")
try:
remote_uuid = DataLayer.objects.get(id=remote_id).uuid
except DataLayer.DoesNotExist:
pass
else:
try:
new_url = settings.SITE_URL + reverse(
"datalayer_view", args=[map_id, remote_uuid]
)
except NoReverseMatch:
pass
else:
item.settings["remoteData"]["url"] = new_url
item.save()


class Migration(migrations.Migration):
dependencies = [
("umap", "0018_datalayer_uuid"),
]

operations = [
migrations.RunPython(migrate_datalayers, reverse_code=migrations.RunPython.noop)
]

0 comments on commit 176d03d

Please sign in to comment.