mirror of
https://github.com/zulip/zulip.git
synced 2025-11-05 06:23:38 +00:00
user-groups: Add groups to page_params.
This commit is contained in:
@@ -35,6 +35,7 @@ from zerver.lib.actions import (
|
|||||||
get_status_dict, streams_to_dicts_sorted
|
get_status_dict, streams_to_dicts_sorted
|
||||||
)
|
)
|
||||||
from zerver.lib.upload import get_total_uploads_size_for_user
|
from zerver.lib.upload import get_total_uploads_size_for_user
|
||||||
|
from zerver.lib.user_groups import user_groups_in_realm_serialized
|
||||||
from zerver.tornado.event_queue import request_event_queue, get_user_events
|
from zerver.tornado.event_queue import request_event_queue, get_user_events
|
||||||
from zerver.models import Client, Message, Realm, UserPresence, UserProfile, \
|
from zerver.models import Client, Message, Realm, UserPresence, UserProfile, \
|
||||||
get_user_profile_by_id, \
|
get_user_profile_by_id, \
|
||||||
@@ -177,6 +178,9 @@ def fetch_initial_state_data(user_profile, event_types, queue_id, client_gravata
|
|||||||
if want('realm_filters'):
|
if want('realm_filters'):
|
||||||
state['realm_filters'] = realm_filters_for_realm(user_profile.realm_id)
|
state['realm_filters'] = realm_filters_for_realm(user_profile.realm_id)
|
||||||
|
|
||||||
|
if want('realm_user_groups'):
|
||||||
|
state['realm_user_groups'] = user_groups_in_realm_serialized(user_profile.realm)
|
||||||
|
|
||||||
if want('realm_user'):
|
if want('realm_user'):
|
||||||
state['raw_users'] = get_raw_user_data(
|
state['raw_users'] = get_raw_user_data(
|
||||||
realm_id=user_profile.realm_id,
|
realm_id=user_profile.realm_id,
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
from collections import defaultdict
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from zerver.lib.exceptions import JsonableError
|
from zerver.lib.exceptions import JsonableError
|
||||||
from zerver.models import UserProfile, Realm, UserGroupMembership, UserGroup
|
from zerver.models import UserProfile, Realm, UserGroupMembership, UserGroup
|
||||||
from typing import Dict, Iterable, List, Text
|
from typing import Dict, Iterable, List, Text, Tuple, Any
|
||||||
|
|
||||||
def access_user_group_by_id(user_group_id: int, realm: Realm) -> UserGroup:
|
def access_user_group_by_id(user_group_id: int, realm: Realm) -> UserGroup:
|
||||||
try:
|
try:
|
||||||
@@ -18,6 +19,28 @@ def user_groups_in_realm(realm):
|
|||||||
user_groups = UserGroup.objects.filter(realm=realm)
|
user_groups = UserGroup.objects.filter(realm=realm)
|
||||||
return list(user_groups)
|
return list(user_groups)
|
||||||
|
|
||||||
|
def user_groups_in_realm_serialized(realm):
|
||||||
|
# type: (Realm) -> List[Dict[Text, Any]]
|
||||||
|
"""
|
||||||
|
This function is used in do_events_register code path so this code should
|
||||||
|
be performant. This is the reason why we get the groups through
|
||||||
|
UserGroupMembership table. It gives us the groups and members in one query.
|
||||||
|
"""
|
||||||
|
memberships = UserGroupMembership.objects.filter(user_group__realm=realm)
|
||||||
|
memberships = memberships.select_related('user_group')
|
||||||
|
groups = defaultdict(list) # type: Dict[Tuple[int, Text, Text], List[int]]
|
||||||
|
for membership in memberships:
|
||||||
|
group = (membership.user_group.id,
|
||||||
|
membership.user_group.name,
|
||||||
|
membership.user_group.description)
|
||||||
|
groups[group].append(membership.user_profile_id)
|
||||||
|
|
||||||
|
return [dict(id=group[0],
|
||||||
|
name=group[1],
|
||||||
|
description=group[2],
|
||||||
|
members=sorted(members))
|
||||||
|
for group, members in groups.items()]
|
||||||
|
|
||||||
def get_user_groups(user_profile):
|
def get_user_groups(user_profile):
|
||||||
# type: (UserProfile) -> List[UserGroup]
|
# type: (UserProfile) -> List[UserGroup]
|
||||||
return list(user_profile.usergroup_set.all())
|
return list(user_profile.usergroup_set.all())
|
||||||
|
|||||||
@@ -2351,7 +2351,7 @@ class FetchQueriesTest(ZulipTestCase):
|
|||||||
client_gravatar=False,
|
client_gravatar=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assert_length(queries, 28)
|
self.assert_length(queries, 29)
|
||||||
|
|
||||||
expected_counts = dict(
|
expected_counts = dict(
|
||||||
alert_words=0,
|
alert_words=0,
|
||||||
@@ -2370,6 +2370,7 @@ class FetchQueriesTest(ZulipTestCase):
|
|||||||
realm_emoji=1,
|
realm_emoji=1,
|
||||||
realm_filters=1,
|
realm_filters=1,
|
||||||
realm_user=4,
|
realm_user=4,
|
||||||
|
realm_user_groups=1,
|
||||||
stream=2,
|
stream=2,
|
||||||
subscription=5,
|
subscription=5,
|
||||||
total_uploads_size=1,
|
total_uploads_size=1,
|
||||||
|
|||||||
@@ -138,6 +138,7 @@ class HomeTest(ZulipTestCase):
|
|||||||
"realm_restricted_to_domain",
|
"realm_restricted_to_domain",
|
||||||
"realm_show_digest_email",
|
"realm_show_digest_email",
|
||||||
"realm_uri",
|
"realm_uri",
|
||||||
|
"realm_user_groups",
|
||||||
"realm_users",
|
"realm_users",
|
||||||
"realm_waiting_period_threshold",
|
"realm_waiting_period_threshold",
|
||||||
"root_domain_uri",
|
"root_domain_uri",
|
||||||
@@ -179,7 +180,7 @@ class HomeTest(ZulipTestCase):
|
|||||||
with patch('zerver.lib.cache.cache_set') as cache_mock:
|
with patch('zerver.lib.cache.cache_set') as cache_mock:
|
||||||
result = self._get_home_page(stream='Denmark')
|
result = self._get_home_page(stream='Denmark')
|
||||||
|
|
||||||
self.assert_length(queries, 40)
|
self.assert_length(queries, 41)
|
||||||
self.assert_length(cache_mock.call_args_list, 10)
|
self.assert_length(cache_mock.call_args_list, 10)
|
||||||
|
|
||||||
html = result.content.decode('utf-8')
|
html = result.content.decode('utf-8')
|
||||||
@@ -244,7 +245,7 @@ class HomeTest(ZulipTestCase):
|
|||||||
with queries_captured() as queries2:
|
with queries_captured() as queries2:
|
||||||
result = self._get_home_page()
|
result = self._get_home_page()
|
||||||
|
|
||||||
self.assert_length(queries2, 34)
|
self.assert_length(queries2, 35)
|
||||||
|
|
||||||
# Do a sanity check that our new streams were in the payload.
|
# Do a sanity check that our new streams were in the payload.
|
||||||
html = result.content.decode('utf-8')
|
html = result.content.decode('utf-8')
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ from zerver.lib.user_groups import (
|
|||||||
get_user_groups,
|
get_user_groups,
|
||||||
user_groups_in_realm,
|
user_groups_in_realm,
|
||||||
get_memberships_of_users,
|
get_memberships_of_users,
|
||||||
|
user_groups_in_realm_serialized,
|
||||||
)
|
)
|
||||||
from zerver.models import UserProfile, UserGroup, get_realm, Realm, \
|
from zerver.models import UserProfile, UserGroup, get_realm, Realm, \
|
||||||
UserGroupMembership
|
UserGroupMembership
|
||||||
@@ -33,6 +34,19 @@ class UserGroupTestCase(ZulipTestCase):
|
|||||||
self.assertEqual(len(user_groups), 1)
|
self.assertEqual(len(user_groups), 1)
|
||||||
self.assertEqual(user_groups[0].name, 'support')
|
self.assertEqual(user_groups[0].name, 'support')
|
||||||
|
|
||||||
|
def test_user_groups_in_realm_serialized(self):
|
||||||
|
# type: () -> None
|
||||||
|
realm = get_realm('zulip')
|
||||||
|
user_group = self.create_user_group_for_test('support')
|
||||||
|
hamlet = self.example_user('hamlet')
|
||||||
|
check_add_user_to_user_group(hamlet, user_group)
|
||||||
|
members = user_groups_in_realm_serialized(realm)
|
||||||
|
self.assertEqual(len(members), 1)
|
||||||
|
self.assertEqual(members[0]['id'], user_group.id)
|
||||||
|
self.assertEqual(members[0]['name'], user_group.name)
|
||||||
|
self.assertEqual(members[0]['description'], '')
|
||||||
|
self.assertEqual(members[0]['members'], [4, 6])
|
||||||
|
|
||||||
def test_get_user_groups(self):
|
def test_get_user_groups(self):
|
||||||
# type: () -> None
|
# type: () -> None
|
||||||
othello = self.example_user('othello')
|
othello = self.example_user('othello')
|
||||||
|
|||||||
Reference in New Issue
Block a user