mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 21:43:21 +00:00
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).
47 lines
1.9 KiB
Python
47 lines
1.9 KiB
Python
import os
|
|
|
|
ZULIP_VERSION = "4.0-dev+git"
|
|
# Add information on number of commits and commit hash to version, if available
|
|
zulip_git_version_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'zulip-git-version')
|
|
if os.path.exists(zulip_git_version_file):
|
|
with open(zulip_git_version_file) as f:
|
|
version = f.read().strip()
|
|
if version:
|
|
ZULIP_VERSION = version
|
|
|
|
LATEST_MAJOR_VERSION = "3.0"
|
|
LATEST_RELEASE_VERSION = "3.0"
|
|
LATEST_RELEASE_ANNOUNCEMENT = "https://blog.zulip.org/2020/07/16/zulip-3-0-released/"
|
|
|
|
# Versions of the desktop app below DESKTOP_MINIMUM_VERSION will be
|
|
# prevented from connecting to the Zulip server. Versions above
|
|
# DESKTOP_MINIMUM_VERSION but below DESKTOP_WARNING_VERSION will have
|
|
# a banner at the top of the page asking the user to upgrade.
|
|
DESKTOP_MINIMUM_VERSION = "5.0.0"
|
|
DESKTOP_WARNING_VERSION = "5.2.0"
|
|
|
|
# Bump the API_FEATURE_LEVEL whenever an API change is made
|
|
# that clients might want to condition on. If we forget at
|
|
# the time we make the change, then bump it later as soon
|
|
# as we notice; clients using API_FEATURE_LEVEL will just not
|
|
# use the new feature/API until the bump.
|
|
#
|
|
# Changes should be accompanied by documentation explaining what the
|
|
# new level means in templates/zerver/api/changelog.md.
|
|
API_FEATURE_LEVEL = 37
|
|
|
|
# Bump the minor PROVISION_VERSION to indicate that folks should provision
|
|
# only when going from an old version of the code to a newer version. Bump
|
|
# the major version to indicate that folks should provision in both
|
|
# directions.
|
|
|
|
# Typically,
|
|
# * adding a dependency only requires a minor version bump;
|
|
# * removing a dependency requires a major version bump;
|
|
# * upgrading a dependency requires a major version bump, unless the
|
|
# upgraded dependency is backwards compatible with all of our
|
|
# historical commits sharing the same major version, in which case a
|
|
# minor version bump suffices.
|
|
|
|
PROVISION_VERSION = '120.0'
|