mirror of
https://github.com/zulip/zulip.git
synced 2025-10-29 02:53:52 +00:00
subscriptions: Avoid sending unneeded subscriber information.
The `users/me/subscriptions` endpoint accidentally started returning subscriber information for each stream. This is convenient, but unnecessarily costly for those clients which either don't need it (most API apps) or already acquire this information via /register (including Zulip's apps). This change removes that data set from the default response. Clients which had come to rely on it, or would like to rely on it in future, may still access it via an additional documented API parameter. Fixes #12917.
This commit is contained in:
@@ -4736,20 +4736,28 @@ def gather_subscriptions_helper(user_profile: UserProfile,
|
||||
sorted(unsubscribed, key=lambda x: x['name']),
|
||||
sorted(never_subscribed, key=lambda x: x['name']))
|
||||
|
||||
def gather_subscriptions(user_profile: UserProfile) -> Tuple[List[Dict[str, Any]], List[Dict[str, Any]]]:
|
||||
subscribed, unsubscribed, never_subscribed = gather_subscriptions_helper(user_profile)
|
||||
user_ids = set()
|
||||
for subs in [subscribed, unsubscribed, never_subscribed]:
|
||||
for sub in subs:
|
||||
if 'subscribers' in sub:
|
||||
for subscriber in sub['subscribers']:
|
||||
user_ids.add(subscriber)
|
||||
email_dict = get_emails_from_user_ids(list(user_ids))
|
||||
def gather_subscriptions(
|
||||
user_profile: UserProfile,
|
||||
include_subscribers: bool=False,
|
||||
) -> Tuple[List[Dict[str, Any]], List[Dict[str, Any]]]:
|
||||
subscribed, unsubscribed, _ = gather_subscriptions_helper(
|
||||
user_profile, include_subscribers=include_subscribers)
|
||||
|
||||
for subs in [subscribed, unsubscribed]:
|
||||
for sub in subs:
|
||||
if 'subscribers' in sub:
|
||||
sub['subscribers'] = sorted([email_dict[user_id] for user_id in sub['subscribers']])
|
||||
if include_subscribers:
|
||||
user_ids = set()
|
||||
for subs in [subscribed, unsubscribed]:
|
||||
for sub in subs:
|
||||
if 'subscribers' in sub:
|
||||
for subscriber in sub['subscribers']:
|
||||
user_ids.add(subscriber)
|
||||
email_dict = get_emails_from_user_ids(list(user_ids))
|
||||
|
||||
for subs in [subscribed, unsubscribed]:
|
||||
for sub in subs:
|
||||
if 'subscribers' in sub:
|
||||
sub['subscribers'] = sorted([
|
||||
email_dict[user_id] for user_id in sub['subscribers']
|
||||
])
|
||||
|
||||
return (subscribed, unsubscribed)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user