Skip to content

Commit 97dcb80

Browse files
committed
Fix migration
1 parent dd05be1 commit 97dcb80

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

cvat/apps/iam/migrations/0002_delete_dummy_email_addresses_and_fix_case_related_mismatches.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ def restore_email_addresses_for_dummy_users(apps, schema_editor):
2121
EmailAddress = apps.get_model("account", "EmailAddress")
2222
SocialAccount = apps.get_model("socialaccount", "SocialAccount")
2323

24-
social_accounts = SocialAccount.objects.filter(user=OuterRef("user"))
25-
email_addresses = EmailAddress.objects.filter(user=OuterRef("user"))
24+
social_accounts = SocialAccount.objects.filter(user=OuterRef("pk"))
25+
email_addresses = EmailAddress.objects.filter(user=OuterRef("pk"))
2626
dummy_users = (
27-
User.objects.filter(password__startswith="!")
27+
User.objects.filter(password__startswith="!") # nosec
2828
.annotate(
2929
has_social_account=Exists(social_accounts), has_email_address=Exists(email_addresses)
3030
)
@@ -35,7 +35,7 @@ def restore_email_addresses_for_dummy_users(apps, schema_editor):
3535
EmailAddress(email=user.email, user=user, primary=True, verified=False)
3636
for user in dummy_users
3737
]
38-
EmailAddress.objects.bulk_create(email_addresses_to_create)
38+
EmailAddress.objects.bulk_create(email_addresses_to_create, batch_size=2000)
3939

4040

4141
def normalize_email_case_mismatches(apps, schema_editor):
@@ -44,15 +44,26 @@ def normalize_email_case_mismatches(apps, schema_editor):
4444

4545
social_accounts = SocialAccount.objects.filter(user=OuterRef("user"))
4646
# fix case-related mismatches between User.email and EmailAddress.email
47-
EmailAddress.objects.filter(
48-
~Exists(social_accounts), verified=True, email__iexact=F("user__email")
49-
).exclude(email=F("user__email")).update(email=F("user__email"))
47+
email_addresses_to_update = (
48+
EmailAddress.objects.filter(
49+
~Exists(social_accounts), verified=True, email__iexact=F("user__email")
50+
)
51+
.exclude(email=F("user__email"))
52+
.select_related("user")
53+
)
54+
55+
for email_address in email_addresses_to_update:
56+
email_address.email = email_address.user.email
57+
58+
EmailAddress.objects.bulk_update(email_addresses_to_update, ["email"], batch_size=2000)
5059

5160

5261
class Migration(migrations.Migration):
5362

5463
dependencies = [
5564
("iam", "0001_remove_business_group"),
65+
("account", "0005_emailaddress_idx_upper_email"),
66+
("socialaccount", "0005_socialtoken_nullable_app"),
5667
]
5768

5869
operations = [

0 commit comments

Comments
 (0)