diff --git a/analytics/management/commands/populate_analytics_db.py b/analytics/management/commands/populate_analytics_db.py index 0826217bce..a50c756fd9 100644 --- a/analytics/management/commands/populate_analytics_db.py +++ b/analytics/management/commands/populate_analytics_db.py @@ -27,12 +27,12 @@ from zerver.lib.timestamp import floor_to_day from zerver.lib.upload import upload_message_attachment_from_request from zerver.models import ( Client, + NamedUserGroup, Realm, RealmAuditLog, Recipient, Stream, Subscription, - UserGroup, UserProfile, ) from zerver.models.groups import SystemGroups @@ -114,7 +114,7 @@ class Command(BaseCommand): force_date_joined=installation_time, ) - administrators_user_group = UserGroup.objects.get( + administrators_user_group = NamedUserGroup.objects.get( name=SystemGroups.ADMINISTRATORS, realm=realm, is_system_group=True ) stream = Stream.objects.create( diff --git a/zerver/actions/create_realm.py b/zerver/actions/create_realm.py index 176613f498..2a3f2b7287 100644 --- a/zerver/actions/create_realm.py +++ b/zerver/actions/create_realm.py @@ -126,7 +126,7 @@ def set_default_for_realm_permission_group_settings(realm: Realm) -> None: for setting_name, permission_configuration in Realm.REALM_PERMISSION_GROUP_SETTINGS.items(): group_name = permission_configuration.default_group_name - setattr(realm, setting_name, system_groups_dict[group_name]) + setattr(realm, setting_name, system_groups_dict[group_name].usergroup_ptr) realm.save(update_fields=list(Realm.REALM_PERMISSION_GROUP_SETTINGS.keys())) diff --git a/zerver/actions/realm_settings.py b/zerver/actions/realm_settings.py index a2eb76489d..4598e329ea 100644 --- a/zerver/actions/realm_settings.py +++ b/zerver/actions/realm_settings.py @@ -24,6 +24,7 @@ from zerver.models import ( ArchivedAttachment, Attachment, Message, + NamedUserGroup, Realm, RealmAuditLog, RealmAuthenticationMethod, @@ -658,7 +659,7 @@ def do_change_realm_plan_type( # If downgrading to a plan that no longer has access to change # can_access_all_users_group, set it back to the default # value. - everyone_system_group = UserGroup.objects.get( + everyone_system_group = NamedUserGroup.objects.get( name=SystemGroups.EVERYONE, realm=realm, is_system_group=True ) if realm.can_access_all_users_group_id != everyone_system_group.id: diff --git a/zerver/lib/bulk_create.py b/zerver/lib/bulk_create.py index 42cf5ac688..3bc7af4423 100644 --- a/zerver/lib/bulk_create.py +++ b/zerver/lib/bulk_create.py @@ -7,13 +7,13 @@ from zerver.lib.create_user import create_user_profile, get_display_email_addres from zerver.lib.initial_password import initial_password from zerver.lib.streams import render_stream_description from zerver.models import ( + NamedUserGroup, Realm, RealmAuditLog, RealmUserDefault, Recipient, Stream, Subscription, - UserGroup, UserGroupMembership, UserProfile, ) @@ -127,10 +127,10 @@ def bulk_create_users( Subscription.objects.bulk_create(subscriptions_to_create) - full_members_system_group = UserGroup.objects.get( + full_members_system_group = NamedUserGroup.objects.get( name=SystemGroups.FULL_MEMBERS, realm=realm, is_system_group=True ) - members_system_group = UserGroup.objects.get( + members_system_group = NamedUserGroup.objects.get( name=SystemGroups.MEMBERS, realm=realm, is_system_group=True ) group_memberships_to_create: List[UserGroupMembership] = [] @@ -198,7 +198,7 @@ def bulk_create_streams(realm: Realm, stream_dict: Dict[str, Dict[str, Any]]) -> existing_streams = { name.lower() for name in Stream.objects.filter(realm=realm).values_list("name", flat=True) } - administrators_user_group = UserGroup.objects.get( + administrators_user_group = NamedUserGroup.objects.get( name=SystemGroups.ADMINISTRATORS, is_system_group=True, realm=realm ) streams_to_create: List[Stream] = [] diff --git a/zerver/lib/import_realm.py b/zerver/lib/import_realm.py index 212b8339f6..6479b28d53 100644 --- a/zerver/lib/import_realm.py +++ b/zerver/lib/import_realm.py @@ -194,7 +194,7 @@ def fix_upload_links(data: TableData, message_table: TableName) -> None: def fix_streams_can_remove_subscribers_group_column(data: TableData, realm: Realm) -> None: table = get_db_table(Stream) - admins_group = UserGroup.objects.get( + admins_group = NamedUserGroup.objects.get( name=SystemGroups.ADMINISTRATORS, realm=realm, is_system_group=True ) for stream in data[table]: @@ -1781,7 +1781,7 @@ def add_users_to_system_user_groups( user_profiles: List[UserProfile], role_system_groups_dict: Dict[int, NamedUserGroup], ) -> None: - full_members_system_group = UserGroup.objects.get( + full_members_system_group = NamedUserGroup.objects.get( name=SystemGroups.FULL_MEMBERS, realm=realm, is_system_group=True, diff --git a/zerver/lib/streams.py b/zerver/lib/streams.py index 8ed39edaca..f6801e406a 100644 --- a/zerver/lib/streams.py +++ b/zerver/lib/streams.py @@ -23,6 +23,7 @@ from zerver.lib.types import APIStreamDict from zerver.lib.user_groups import is_user_in_group from zerver.models import ( DefaultStreamGroup, + NamedUserGroup, Realm, RealmAuditLog, Recipient, @@ -142,7 +143,7 @@ def create_stream_if_needed( ) if can_remove_subscribers_group is None: - can_remove_subscribers_group = UserGroup.objects.get( + can_remove_subscribers_group = NamedUserGroup.objects.get( name=SystemGroups.ADMINISTRATORS, is_system_group=True, realm=realm ) diff --git a/zerver/lib/test_classes.py b/zerver/lib/test_classes.py index c2d8f09354..fcba2af464 100644 --- a/zerver/lib/test_classes.py +++ b/zerver/lib/test_classes.py @@ -99,6 +99,7 @@ from zerver.lib.webhooks.common import ( from zerver.models import ( Client, Message, + NamedUserGroup, PushDeviceToken, Reaction, Realm, @@ -106,7 +107,6 @@ from zerver.models import ( Recipient, Stream, Subscription, - UserGroup, UserGroupMembership, UserMessage, UserProfile, @@ -1364,7 +1364,7 @@ Output: history_public_to_subscribers = get_default_value_for_history_public_to_subscribers( realm, invite_only, history_public_to_subscribers ) - administrators_user_group = UserGroup.objects.get( + administrators_user_group = NamedUserGroup.objects.get( name=SystemGroups.ADMINISTRATORS, realm=realm, is_system_group=True ) @@ -1972,7 +1972,7 @@ Output: self.send_personal_message(shiva, polonius) self.send_huddle_message(aaron, [polonius, zoe]) - members_group = UserGroup.objects.get(name="role:members", realm=realm) + members_group = NamedUserGroup.objects.get(name="role:members", realm=realm) do_change_realm_permission_group_setting( realm, "can_access_all_users_group", members_group, acting_user=None ) diff --git a/zerver/lib/user_groups.py b/zerver/lib/user_groups.py index 4e240e14fc..d77a943464 100644 --- a/zerver/lib/user_groups.py +++ b/zerver/lib/user_groups.py @@ -256,7 +256,7 @@ def user_groups_in_realm_serialized(realm: Realm) -> List[UserGroupDict]: Django's ORM doesn't properly support the left join between UserGroup and UserGroupMembership that we need. """ - realm_groups = UserGroup.objects.filter(realm=realm) + realm_groups = NamedUserGroup.objects.filter(realm=realm) group_dicts: Dict[int, UserGroupDict] = {} for user_group in realm_groups: group_dicts[user_group.id] = dict( @@ -403,7 +403,9 @@ def get_recursive_subgroups_for_groups( def get_role_based_system_groups_dict(realm: Realm) -> Dict[str, NamedUserGroup]: - system_groups = NamedUserGroup.objects.filter(realm=realm, is_system_group=True) + system_groups = NamedUserGroup.objects.filter(realm=realm, is_system_group=True).select_related( + "usergroup_ptr" + ) system_groups_name_dict = {} for group in system_groups: system_groups_name_dict[group.name] = group diff --git a/zerver/views/streams.py b/zerver/views/streams.py index f9eba6922b..36891ce342 100644 --- a/zerver/views/streams.py +++ b/zerver/views/streams.py @@ -90,7 +90,7 @@ from zerver.lib.validator import ( check_union, to_non_negative_int, ) -from zerver.models import Realm, Stream, UserGroup, UserProfile +from zerver.models import NamedUserGroup, Realm, Stream, UserProfile from zerver.models.users import get_system_bot @@ -580,7 +580,7 @@ def add_subscriptions_backend( can_remove_subscribers_group_default_name = Stream.stream_permission_group_settings[ "can_remove_subscribers_group" ].default_group_name - can_remove_subscribers_group = UserGroup.objects.get( + can_remove_subscribers_group = NamedUserGroup.objects.get( name=can_remove_subscribers_group_default_name, realm=user_profile.realm, is_system_group=True,