mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 13:33:24 +00:00
This will make django automatically remove them when we run squashmigrations. There are still some RunSQL statements which we will have to take care of manually.
51 lines
2.1 KiB
Python
51 lines
2.1 KiB
Python
from collections import defaultdict
|
|
from typing import Any, Dict
|
|
|
|
from django.db import migrations
|
|
from django.db.backends.postgresql.schema import DatabaseSchemaEditor
|
|
from django.db.migrations.state import StateApps
|
|
|
|
|
|
def realm_emoji_name_to_id(apps: StateApps, schema_editor: DatabaseSchemaEditor) -> None:
|
|
Reaction = apps.get_model('zerver', 'Reaction')
|
|
RealmEmoji = apps.get_model('zerver', 'RealmEmoji')
|
|
realm_emoji_by_realm_id: Dict[int, Dict[str, Any]] = defaultdict(dict)
|
|
for realm_emoji in RealmEmoji.objects.all():
|
|
realm_emoji_by_realm_id[realm_emoji.realm_id][realm_emoji.name] = {
|
|
'id': str(realm_emoji.id),
|
|
'name': realm_emoji.name,
|
|
'deactivated': realm_emoji.deactivated,
|
|
}
|
|
for reaction in Reaction.objects.filter(reaction_type='realm_emoji'):
|
|
realm_id = reaction.user_profile.realm_id
|
|
emoji_name = reaction.emoji_name
|
|
realm_emoji = realm_emoji_by_realm_id.get(realm_id, {}).get(emoji_name)
|
|
if realm_emoji is None:
|
|
# Realm emoji used in this reaction has been deleted so this
|
|
# reaction should also be deleted. We don't need to reverse
|
|
# this step in migration reversal code.
|
|
print("Reaction for (%s, %s) refers to deleted custom emoji %s; deleting" %
|
|
(emoji_name, reaction.message_id, reaction.user_profile_id))
|
|
reaction.delete()
|
|
else:
|
|
reaction.emoji_code = realm_emoji["id"]
|
|
reaction.save()
|
|
|
|
def reversal(apps: StateApps, schema_editor: DatabaseSchemaEditor) -> None:
|
|
Reaction = apps.get_model('zerver', 'Reaction')
|
|
for reaction in Reaction.objects.filter(reaction_type='realm_emoji'):
|
|
reaction.emoji_code = reaction.emoji_name
|
|
reaction.save()
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
('zerver', '0144_remove_realm_create_generic_bot_by_admins_only'),
|
|
]
|
|
|
|
operations = [
|
|
migrations.RunPython(realm_emoji_name_to_id,
|
|
reverse_code=reversal,
|
|
elidable=True),
|
|
]
|