mirror of https://github.com/zulip/zulip.git
d9740045a5
We eliminate some redundant checks. We also consistently provide a `subscribers` field in our stream data with `[]`, even if our users can't access subscribers. We therefore bump the API version and tweak the docs. (See further down for a detailed justification of the change.) Even though it is sometimes fine to have redundant code that is defensive in nature, some upcoming changes are gonna move subscriber-related logic out of build_stream_dict_for_sub for certain codepaths as part of our effort to streamline the payload for subscribers within page_params. So we can't rely on the code that I removed here inside of build_stream_dict_for_sub. Anyway, it makes more sense to do these checks explicitly in the validate function. The code in build_stream_dict_for_sub was almost effectively a noop, since the validation function was already preventing us from getting subscriber info. The only difference it made was sometimes converting `[]` to `None`, and then subsequently omitting the subscribers field. Neither ZT nor the webapp make any distinction between `[]` or <missing key> for the `subscribers` data in `page_params`. The webapp has had this code for a long time (and now equivalent code elsewhere in this PR): if (!Object.prototype.hasOwnProperty.call(sub, "subscribers")) { sub.subscribers = new LazySet([]); } The webapp calculates access based on booleans, anyway: sub.can_access_subscribers = page_params.is_admin || sub.subscribed || (!page_params.is_guest && !sub.invite_only); And ZT would choke if `subscribers` were missing, except that it never gets to the relevant code due to other checks: def get_other_subscribers_in_stream(<snip>): assert stream_id is not None or stream_name is not None if stream_id: assert self.is_user_subscribed_to_stream(stream_id) return [sub for sub in self.stream_dict[stream_id]['subscribers'] if sub != self.user_id] else: return [sub for _, stream in self.stream_dict.items() for sub in stream['subscribers'] if stream['name'] == stream_name if sub != self.user_id] You could make a semantic argument that we should prefer <missing key> to `[]` when subscribers aren't even available, but we have precedent from the way that `bulk_get_subscriber_user_ids` has traditionally populated its result: result: Dict[int, List[int]] = {stream["id"]: [] for stream in stream_dicts} If we changed `stream_dicts` to `target_stream_dicts` we would faciliate a move toward `None`, but it would just cause headaches for other server code as well as the frontends (which, to reiterate, already prefer the empty array for convenience). |
||
---|---|---|
.. | ||
add-linkifier.md | ||
add-reaction.md | ||
api-keys.md | ||
changelog.md | ||
check-narrow-matches.md | ||
client-libraries.md | ||
configuring-python-bindings.md | ||
construct-narrow.md | ||
create-custom-profile-field.md | ||
create-stream.md | ||
create-user-group.md | ||
create-user.md | ||
deactivate-user.md | ||
delete-message.md | ||
delete-queue.md | ||
delete-stream.md | ||
deploying-bots.md | ||
dev-fetch-api-key.md | ||
fetch-api-key.md | ||
get-attachments.md | ||
get-custom-emoji.md | ||
get-custom-profile-fields.md | ||
get-events.md | ||
get-linkifiers.md | ||
get-message-history.md | ||
get-messages.md | ||
get-own-user.md | ||
get-raw-message.md | ||
get-server-settings.md | ||
get-stream-id.md | ||
get-stream-topics.md | ||
get-streams.md | ||
get-subscription-status.md | ||
get-subscriptions.md | ||
get-user-groups.md | ||
get-user-presence.md | ||
get-user.md | ||
get-users.md | ||
incoming-webhooks-overview.md | ||
incoming-webhooks-walkthrough.md | ||
index.md | ||
installation-instructions.md | ||
integrations-overview.md | ||
mark-all-as-read.md | ||
missing.md | ||
mute-topic.md | ||
non-webhook-integrations.md | ||
outgoing-webhooks.md | ||
reactivate-user.md | ||
real-time-events.md | ||
register-queue.md | ||
remove-linkifier.md | ||
remove-reaction.md | ||
remove-user-group.md | ||
render-message.md | ||
reorder-custom-profile-fields.md | ||
rest-error-handling.md | ||
rest.md | ||
running-bots.md | ||
send-message.md | ||
set-typing-status.md | ||
sidebar_index.md | ||
subscribe.md | ||
unsubscribe.md | ||
update-message-flags.md | ||
update-message.md | ||
update-notification-settings.md | ||
update-stream.md | ||
update-subscription-settings.md | ||
update-user-group-members.md | ||
update-user-group.md | ||
update-user.md | ||
upload-custom-emoji.md | ||
upload-file.md | ||
writing-bots.md |