django-cats/cats/migrations/0020_user_certificate_data.py

73 lines
2.4 KiB
Python
Raw Permalink Normal View History

2024-09-20 08:57:25 +00:00
# Generated by Django 4.2.16 on 2024-09-20 07:23
import logging
from django.db import migrations
def fill_user_certificate_data(apps, schema_editor):
OriginalUser = apps.get_model("cats", "User")
UserProfile = apps.get_model("cats", "UserProfile")
UserCertificate = apps.get_model("cats", "UserCertificate")
AuthUser = apps.get_model("auth", "User")
for user in OriginalUser.objects.all():
auth_user_id = None
if (
user.email
and "@" in user.email
and not AuthUser.objects.filter(email=user.email).exists()
):
auth_user = AuthUser.objects.create(
username=user.email,
email=user.email,
is_staff=user.admin == "1",
)
UserProfile.objects.create(
user=auth_user,
language=user.lang,
send_certificate=user.send_certificate,
)
auth_user_id = auth_user.id
UserCertificate.objects.create(
user_id=auth_user_id,
serial_number=user.serial_number,
issuer_name=user.issuer_name,
common_name=user.common_name,
)
def fill_learn_progress_references(apps, schema_editor):
UserCertificate = apps.get_model("cats", "UserCertificate")
LearnProgress = apps.get_model("cats", "LearnProgress")
logger = logging.getLogger(__name__)
for learn_progress in LearnProgress.objects.all():
try:
user_cert = UserCertificate.objects.get(
serial_number=learn_progress.serial_number,
issuer_name=learn_progress.issuer_name,
)
learn_progress.user_certificate = user_cert
if user_cert.user_id:
learn_progress.user_id = user_cert.user_id
learn_progress.save()
except UserCertificate.DoesNotExist:
logger.warning(
"no user certificate found for learn_progress %d", learn_progress.id
)
class Migration(migrations.Migration):
dependencies = [
("cats", "0019_prepare_to_separate_certificate_information"),
]
operations = [
# remove invalid learn progress entities
migrations.RunSQL("DELETE FROM cats_learnprogress WHERE t_id_id NOT IN (SELECT id FROM cats_topic)"),
migrations.RunPython(fill_user_certificate_data),
migrations.RunPython(fill_learn_progress_references),
]