mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 13:33:24 +00:00
This commit adds code to pass stream traffic data using the "stream_weekly_traffic" field in stream objects. We already include the traffic data in Subscription objects, but the traffic data does not depend on the user to stream relationship and is stream-only information, so it's better to include it in Stream objects. We may remove the traffic data and other stream information fields for Subscription objects in future. This will help clients to correctly display the stream traffic data in case where client receives a stream creation event and no subscription event, for an already existing stream which the user did not have access to before.
33 lines
1.3 KiB
Python
33 lines
1.3 KiB
Python
from typing import List, Set
|
|
|
|
from zerver.lib.types import DefaultStreamDict
|
|
from zerver.models import DefaultStream, Stream
|
|
|
|
|
|
def get_slim_realm_default_streams(realm_id: int) -> List[Stream]:
|
|
# We really want this query to be simple and just get "thin" Stream objects
|
|
# in one round trip.
|
|
#
|
|
# The above is enforced by at least three tests that verify query counts,
|
|
# and test_query_count in test_subs.py makes sure that the query itself is
|
|
# not like 11000 bytes, which is what we had in a prior version that used
|
|
# select_related() with not arguments (and thus joined to too many tables).
|
|
#
|
|
# Please be careful about modifying this code, as it has had a history
|
|
# of performance problems.
|
|
return list(Stream.objects.filter(defaultstream__realm_id=realm_id))
|
|
|
|
|
|
def get_default_stream_ids_for_realm(realm_id: int) -> Set[int]:
|
|
return set(DefaultStream.objects.filter(realm_id=realm_id).values_list("stream_id", flat=True))
|
|
|
|
|
|
def get_default_streams_for_realm_as_dicts(realm_id: int) -> List[DefaultStreamDict]:
|
|
"""
|
|
Return all the default streams for a realm using a list of dictionaries sorted
|
|
by stream name.
|
|
"""
|
|
streams = get_slim_realm_default_streams(realm_id)
|
|
stream_dicts = [stream.to_dict() for stream in streams]
|
|
return sorted(stream_dicts, key=lambda stream: stream["name"])
|