diff --git a/zerver/lib/mention.py b/zerver/lib/mention.py index 226dedfe39..54e2c1d28f 100644 --- a/zerver/lib/mention.py +++ b/zerver/lib/mention.py @@ -8,9 +8,12 @@ from django.conf import settings from django.db.models import Q from django_stubs_ext import StrPromise -from zerver.lib.streams import UserGroupMembershipDetails, get_content_access_streams +from zerver.lib.streams import get_content_access_streams from zerver.lib.topic import get_first_message_for_user_in_topic -from zerver.lib.user_groups import get_root_id_annotated_recursive_subgroups_for_groups +from zerver.lib.user_groups import ( + UserGroupMembershipDetails, + get_root_id_annotated_recursive_subgroups_for_groups, +) from zerver.lib.users import get_inaccessible_user_ids from zerver.models import NamedUserGroup, UserProfile from zerver.models.groups import SystemGroups diff --git a/zerver/lib/message.py b/zerver/lib/message.py index 0e57e2bff7..fd39ca20e7 100644 --- a/zerver/lib/message.py +++ b/zerver/lib/message.py @@ -28,7 +28,6 @@ from zerver.lib.stream_subscription import ( num_subscribers_for_stream_id, ) from zerver.lib.streams import ( - UserGroupMembershipDetails, can_access_stream_history, get_web_public_streams_queryset, is_user_in_groups_granting_content_access, @@ -41,6 +40,7 @@ from zerver.lib.topic import ( ) from zerver.lib.types import UserDisplayRecipient from zerver.lib.user_groups import ( + UserGroupMembershipDetails, get_recursive_membership_groups, user_has_permission_for_group_setting, ) diff --git a/zerver/lib/streams.py b/zerver/lib/streams.py index 493a6cce24..1319771ec8 100644 --- a/zerver/lib/streams.py +++ b/zerver/lib/streams.py @@ -25,6 +25,7 @@ from zerver.lib.string_validation import check_stream_name from zerver.lib.timestamp import datetime_to_timestamp from zerver.lib.types import AnonymousSettingGroupDict, APIStreamDict from zerver.lib.user_groups import ( + UserGroupMembershipDetails, get_recursive_group_members, get_recursive_membership_groups, get_role_based_system_groups_dict, @@ -549,11 +550,6 @@ def check_for_exactly_one_stream_arg(stream_id: int | None, stream: str | None) raise IncompatibleParametersError(["stream_id", "stream"]) -@dataclass -class UserGroupMembershipDetails: - user_recursive_group_ids: set[int] | None - - def user_has_content_access( user_profile: UserProfile, stream: Stream, diff --git a/zerver/lib/subscription_info.py b/zerver/lib/subscription_info.py index 9acb813283..4df0e84171 100644 --- a/zerver/lib/subscription_info.py +++ b/zerver/lib/subscription_info.py @@ -19,7 +19,6 @@ from zerver.lib.stream_subscription import ( ) from zerver.lib.stream_traffic import get_average_weekly_stream_traffic, get_streams_traffic from zerver.lib.streams import ( - UserGroupMembershipDetails, get_group_setting_value_dict_for_streams, get_setting_values_for_group_settings, get_stream_post_policy_value_based_on_group_setting, @@ -38,7 +37,7 @@ from zerver.lib.types import ( SubscriptionInfo, SubscriptionStreamDict, ) -from zerver.lib.user_groups import get_recursive_membership_groups +from zerver.lib.user_groups import UserGroupMembershipDetails, get_recursive_membership_groups from zerver.models import Realm, Stream, Subscription, UserProfile from zerver.models.streams import get_all_streams diff --git a/zerver/lib/user_groups.py b/zerver/lib/user_groups.py index 5dcad04500..735e3b2c6e 100644 --- a/zerver/lib/user_groups.py +++ b/zerver/lib/user_groups.py @@ -76,6 +76,11 @@ class LockedUserGroupContext: recursive_subgroups: list[NamedUserGroup] +@dataclass +class UserGroupMembershipDetails: + user_recursive_group_ids: set[int] | None + + def has_user_group_access_for_subgroup( user_group: NamedUserGroup, user_profile: UserProfile, diff --git a/zerver/tests/test_message_move_stream.py b/zerver/tests/test_message_move_stream.py index f1f52d3e53..03bc324f76 100644 --- a/zerver/tests/test_message_move_stream.py +++ b/zerver/tests/test_message_move_stream.py @@ -13,13 +13,13 @@ from zerver.actions.streams import do_change_stream_group_based_setting, do_chan from zerver.actions.user_groups import check_add_user_group from zerver.lib.message import has_message_access from zerver.lib.streams import ( - UserGroupMembershipDetails, can_access_stream_metadata_user_ids, update_stream_active_status_for_realm, ) from zerver.lib.test_classes import ZulipTestCase, get_topic_messages from zerver.lib.test_helpers import queries_captured from zerver.lib.url_encoding import near_stream_message_url +from zerver.lib.user_groups import UserGroupMembershipDetails from zerver.models import Message, NamedUserGroup, Stream, UserMessage, UserProfile from zerver.models.groups import SystemGroups from zerver.models.realms import get_realm diff --git a/zerver/tests/test_subs.py b/zerver/tests/test_subs.py index ebd0df5f8c..a634db17d8 100644 --- a/zerver/tests/test_subs.py +++ b/zerver/tests/test_subs.py @@ -72,7 +72,6 @@ from zerver.lib.stream_traffic import ( from zerver.lib.streams import ( StreamDict, StreamsCategorizedByPermissionsForAddingSubscribers, - UserGroupMembershipDetails, access_stream_by_id, access_stream_by_name, can_access_stream_history, @@ -108,7 +107,7 @@ from zerver.lib.types import ( NeverSubscribedStreamDict, SubscriptionInfo, ) -from zerver.lib.user_groups import is_user_in_group +from zerver.lib.user_groups import UserGroupMembershipDetails, is_user_in_group from zerver.models import ( Attachment, DefaultStream, diff --git a/zerver/views/invite.py b/zerver/views/invite.py index e3ad4dd9b4..48dff31135 100644 --- a/zerver/views/invite.py +++ b/zerver/views/invite.py @@ -20,14 +20,10 @@ from zerver.actions.invites import ( from zerver.decorator import require_member_or_admin from zerver.lib.exceptions import InvitationError, JsonableError, OrganizationOwnerRequiredError from zerver.lib.response import json_success -from zerver.lib.streams import ( - UserGroupMembershipDetails, - access_stream_by_id, - get_streams_to_which_user_cannot_add_subscribers, -) +from zerver.lib.streams import access_stream_by_id, get_streams_to_which_user_cannot_add_subscribers from zerver.lib.typed_endpoint import ApiParamConfig, PathOnly, typed_endpoint from zerver.lib.typed_endpoint_validators import check_int_in_validator -from zerver.lib.user_groups import access_user_group_for_update +from zerver.lib.user_groups import UserGroupMembershipDetails, access_user_group_for_update from zerver.models import MultiuseInvite, NamedUserGroup, PreregistrationUser, Stream, UserProfile # Convert INVITATION_LINK_VALIDITY_DAYS into minutes. diff --git a/zerver/views/streams.py b/zerver/views/streams.py index 7d16f55c55..00d003d05b 100644 --- a/zerver/views/streams.py +++ b/zerver/views/streams.py @@ -62,7 +62,6 @@ from zerver.lib.retention import parse_message_retention_days from zerver.lib.stream_traffic import get_streams_traffic from zerver.lib.streams import ( StreamDict, - UserGroupMembershipDetails, access_default_stream_group_by_id, access_stream_by_id, access_stream_by_name, @@ -90,6 +89,7 @@ from zerver.lib.typed_endpoint_validators import check_color from zerver.lib.types import AnonymousSettingGroupDict from zerver.lib.user_groups import ( GroupSettingChangeRequest, + UserGroupMembershipDetails, access_user_group_for_setting, get_group_setting_value_for_api, get_role_based_system_groups_dict,