# 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), ]