mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	Extract query_all_subs_by_stream().
This code was in bulk_add_subscriptions, but we want the same logic to eventually happen in bulk_remove_subscriptions.
This commit is contained in:
		@@ -1360,6 +1360,18 @@ def get_peer_user_ids_for_stream_change(stream, altered_users, subscribed_users)
 | 
			
		||||
        # structure to stay up-to-date.
 | 
			
		||||
        return set(active_user_ids(stream.realm)) - set(altered_user_ids)
 | 
			
		||||
 | 
			
		||||
def query_all_subs_by_stream(streams):
 | 
			
		||||
    # type: (Iterable[Stream]) -> Dict[int, List[UserProfile]]
 | 
			
		||||
    all_subs = Subscription.objects.filter(recipient__type=Recipient.STREAM,
 | 
			
		||||
                                           recipient__type_id__in=[stream.id for stream in streams],
 | 
			
		||||
                                           user_profile__is_active=True,
 | 
			
		||||
                                           active=True).select_related('recipient', 'user_profile')
 | 
			
		||||
 | 
			
		||||
    all_subs_by_stream = defaultdict(list) # type: Dict[int, List[UserProfile]]
 | 
			
		||||
    for sub in all_subs:
 | 
			
		||||
        all_subs_by_stream[sub.recipient.type_id].append(sub.user_profile)
 | 
			
		||||
    return all_subs_by_stream
 | 
			
		||||
 | 
			
		||||
def bulk_add_subscriptions(streams, users):
 | 
			
		||||
    # type: (Iterable[Stream], Iterable[UserProfile]) -> Tuple[List[Tuple[UserProfile, Stream]], List[Tuple[UserProfile, Stream]]]
 | 
			
		||||
    recipients_map = bulk_get_recipients(Recipient.STREAM, [stream.id for stream in streams]) # type: Mapping[int, Recipient]
 | 
			
		||||
@@ -1426,14 +1438,7 @@ def bulk_add_subscriptions(streams, users):
 | 
			
		||||
    # First, get all users subscribed to the streams that we care about
 | 
			
		||||
    # We fetch all subscription information upfront, as it's used throughout
 | 
			
		||||
    # the following code and we want to minize DB queries
 | 
			
		||||
    all_subs = Subscription.objects.filter(recipient__type=Recipient.STREAM,
 | 
			
		||||
                                           recipient__type_id__in=[stream.id for stream in streams],
 | 
			
		||||
                                           user_profile__is_active=True,
 | 
			
		||||
                                           active=True).select_related('recipient', 'user_profile')
 | 
			
		||||
 | 
			
		||||
    all_subs_by_stream = defaultdict(list) # type: Dict[int, List[UserProfile]]
 | 
			
		||||
    for sub in all_subs:
 | 
			
		||||
        all_subs_by_stream[sub.recipient.type_id].append(sub.user_profile)
 | 
			
		||||
    all_subs_by_stream = query_all_subs_by_stream(streams=streams)
 | 
			
		||||
 | 
			
		||||
    def fetch_stream_subscriber_emails(stream):
 | 
			
		||||
        # type: (Stream) -> List[text_type]
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user