feat: add avatar migration
This commit is contained in:
parent
28445cf1a5
commit
20885a53db
|
|
@ -1,8 +1,8 @@
|
||||||
# Generated by Django 3.2.20 on 2024-01-08 08:43
|
|
||||||
|
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
from vbv_lernwelt.core.model_utils import migrate_avatars
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
|
@ -11,10 +11,6 @@ class Migration(migrations.Migration):
|
||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
migrations.RemoveField(
|
|
||||||
model_name="user",
|
|
||||||
name="avatar_url",
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name="user",
|
model_name="user",
|
||||||
name="avatar",
|
name="avatar",
|
||||||
|
|
@ -26,4 +22,9 @@ class Migration(migrations.Migration):
|
||||||
to="media_files.userimage",
|
to="media_files.userimage",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
migrations.RunPython(migrate_avatars),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name="user",
|
||||||
|
name="avatar_url",
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
from django.conf import settings
|
||||||
|
from django.core.files import File
|
||||||
from wagtail.models import Page
|
from wagtail.models import Page
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -144,3 +146,39 @@ def remove_organisations(apps=None, schema_editor=None):
|
||||||
Organisation.objects.filter(
|
Organisation.objects.filter(
|
||||||
organisation_id=org_id,
|
organisation_id=org_id,
|
||||||
).delete()
|
).delete()
|
||||||
|
|
||||||
|
|
||||||
|
def migrate_avatars(apps=None, schema_editor=None):
|
||||||
|
# pylint: disable=import-outside-toplevel
|
||||||
|
if apps is None:
|
||||||
|
from vbv_lernwelt.core.models import User
|
||||||
|
from vbv_lernwelt.media_files.models import UserImage
|
||||||
|
else:
|
||||||
|
User = apps.get_model("core", "User")
|
||||||
|
UserImage = apps.get_model("media_files", "UserImage")
|
||||||
|
|
||||||
|
# Models created by Django migration don't contain methods of the original models.
|
||||||
|
# We need to add them manually.
|
||||||
|
from wagtail.images.models import AbstractImage
|
||||||
|
|
||||||
|
UserImage.get_upload_to = AbstractImage.get_upload_to
|
||||||
|
|
||||||
|
avatar_dir = settings.APPS_DIR / "static" / "avatars"
|
||||||
|
|
||||||
|
for user in User.objects.all().exclude(
|
||||||
|
avatar_url="/static/avatars/myvbv-default-avatar.png"
|
||||||
|
):
|
||||||
|
if not user.avatar_url:
|
||||||
|
continue
|
||||||
|
|
||||||
|
avatar_file = user.avatar_url.split("/")[-1]
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(avatar_dir / avatar_file, "rb") as f:
|
||||||
|
image = UserImage.objects.create(
|
||||||
|
file=File(f),
|
||||||
|
)
|
||||||
|
user.avatar = image
|
||||||
|
user.save()
|
||||||
|
except FileNotFoundError:
|
||||||
|
pass
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from unittest import skipIf
|
||||||
|
|
||||||
from django.core.files import File
|
from django.core.files import File
|
||||||
from django.test import RequestFactory, TestCase
|
from django.test import RequestFactory, TestCase
|
||||||
|
|
@ -10,6 +12,10 @@ from vbv_lernwelt.media_files.models import UserImage
|
||||||
TEST_IMAGE = Path(__file__).parent / "test_images" / "user1_profile.jpg"
|
TEST_IMAGE = Path(__file__).parent / "test_images" / "user1_profile.jpg"
|
||||||
|
|
||||||
|
|
||||||
|
@skipIf(
|
||||||
|
os.environ.get("ENABLE_S3_STORAGE_UNIT_TESTS") is None,
|
||||||
|
"Only enable tests by setting ENABLE_S3_STORAGE_UNIT_TESTS=1",
|
||||||
|
)
|
||||||
class UserImageViewTest(TestCase):
|
class UserImageViewTest(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.factory = RequestFactory()
|
self.factory = RequestFactory()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue