mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
Now that we're enabling the feature in the UI, we should set these to the planned long-term defaults for these settings. Also, this commit cleans up the '0476' and '0477' migration files related to user_topic policies. '0476' sets 'null=True' '0477' is noop '0482' sets the default values and performs backfilling. Co-authored-by: Tim Abbott <tabbott@zulip.com>
99 lines
3.8 KiB
Python
99 lines
3.8 KiB
Python
# Generated by Django 4.2.6 on 2023-10-20 23:43
|
|
|
|
from django.db import migrations, models
|
|
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
|
|
from django.db.migrations.state import StateApps
|
|
from django.db.models import Max
|
|
|
|
AUTOMATICALLY_CHANGE_VISIBILITY_POLICY_ON_SEND = 2
|
|
AUTOMATICALLY_CHANGE_VISIBILITY_POLICY_ON_INITIATION = 3
|
|
|
|
|
|
def set_default_user_topic_policies(
|
|
apps: StateApps, schema_editor: BaseDatabaseSchemaEditor
|
|
) -> None:
|
|
RealmUserDefault = apps.get_model("zerver", "RealmUserDefault")
|
|
UserProfile = apps.get_model("zerver", "UserProfile")
|
|
|
|
BATCH_SIZE = 1000
|
|
|
|
# In deployments which run migrations without stopping the server
|
|
# (e.g. Zulip Cloud), nothing prevents new users from being
|
|
# created while we are doing these batched updates. We add an
|
|
# extra BATCH_SIZE in order to minimize the risk that we will
|
|
# leave any newly-created users with the old values. This is not
|
|
# a guarantee, of course, as new users may be created between
|
|
# whenever this migration finishes and when the server restarts
|
|
# into the new default.
|
|
max_id_realm_user_default = (
|
|
RealmUserDefault.objects.aggregate(Max("id", default=0))["id__max"] + BATCH_SIZE
|
|
)
|
|
max_id_user_profile = (
|
|
UserProfile.objects.aggregate(Max("id", default=0))["id__max"] + BATCH_SIZE
|
|
)
|
|
|
|
lower_bound = 0
|
|
while lower_bound < max_id_realm_user_default:
|
|
RealmUserDefault.objects.filter(
|
|
id__gt=lower_bound, id__lte=lower_bound + BATCH_SIZE
|
|
).update(
|
|
automatically_follow_topics_policy=AUTOMATICALLY_CHANGE_VISIBILITY_POLICY_ON_INITIATION,
|
|
automatically_unmute_topics_in_muted_streams_policy=AUTOMATICALLY_CHANGE_VISIBILITY_POLICY_ON_SEND,
|
|
)
|
|
lower_bound += BATCH_SIZE
|
|
|
|
lower_bound = 0
|
|
while lower_bound < max_id_user_profile:
|
|
UserProfile.objects.filter(id__gt=lower_bound, id__lte=lower_bound + BATCH_SIZE).update(
|
|
automatically_follow_topics_policy=AUTOMATICALLY_CHANGE_VISIBILITY_POLICY_ON_INITIATION,
|
|
automatically_unmute_topics_in_muted_streams_policy=AUTOMATICALLY_CHANGE_VISIBILITY_POLICY_ON_SEND,
|
|
)
|
|
lower_bound += BATCH_SIZE
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
atomic = False
|
|
dependencies = [
|
|
("zerver", "0481_alter_realm_uuid_alter_realm_uuid_owner_secret"),
|
|
]
|
|
|
|
operations = [
|
|
migrations.RunPython(
|
|
set_default_user_topic_policies,
|
|
reverse_code=migrations.RunPython.noop,
|
|
elidable=True,
|
|
),
|
|
migrations.AlterField(
|
|
model_name="userprofile",
|
|
name="automatically_follow_topics_policy",
|
|
field=models.PositiveSmallIntegerField(
|
|
null=False,
|
|
default=AUTOMATICALLY_CHANGE_VISIBILITY_POLICY_ON_INITIATION,
|
|
),
|
|
),
|
|
migrations.AlterField(
|
|
model_name="userprofile",
|
|
name="automatically_unmute_topics_in_muted_streams_policy",
|
|
field=models.PositiveSmallIntegerField(
|
|
null=False,
|
|
default=AUTOMATICALLY_CHANGE_VISIBILITY_POLICY_ON_SEND,
|
|
),
|
|
),
|
|
migrations.AlterField(
|
|
model_name="realmuserdefault",
|
|
name="automatically_follow_topics_policy",
|
|
field=models.PositiveSmallIntegerField(
|
|
null=False,
|
|
default=AUTOMATICALLY_CHANGE_VISIBILITY_POLICY_ON_INITIATION,
|
|
),
|
|
),
|
|
migrations.AlterField(
|
|
model_name="realmuserdefault",
|
|
name="automatically_unmute_topics_in_muted_streams_policy",
|
|
field=models.PositiveSmallIntegerField(
|
|
null=False,
|
|
default=AUTOMATICALLY_CHANGE_VISIBILITY_POLICY_ON_SEND,
|
|
),
|
|
),
|
|
]
|