zulip/zerver/lib
Sahil Batra 1d026d9b2b streams: Make sure an anonymous group is used for only one setting.
When creating multiple streams using "POST /users/me/subscriptions"
endpoint, same anonymous group was being used for settings of all
the streams, like if can_subscribe_group was being set to an
anonymous group, all streams created using that endpoint would
use the same anonymous group for can_subscribe_group setting.

Using the same anonymous groups for multiple streams caused
unintended behavior  -

- Changing a setting for one stream also changed it for all
other streams sharing the the same anonymous group, because
eventually the members and subgroups of the group were updated.

- Changing the setting to a named user group failed because
`do_change_stream_permission_group` attempts to delete the
anonymous group during the update. However, deletion of
anonymous group is restricted if they are still referenced
by setting fields.

This commit fixes this so that one anonymous group is used
only for one setting for a single stream.
2025-11-04 11:51:31 -08:00
..
markdown markdown: Use re-exported guess_type to ensure adding EXTRA_MIME_TYPES. 2025-10-08 23:36:15 -07:00
upload upload: Use normpath when comparing to LOCAL_UPLOADS_DIR. 2025-10-14 12:56:10 -07:00
url_preview python: Replace deprecated BeautifulSoup.findAll. 2025-02-18 22:04:43 -08:00
webhooks webhooks: Add nocoverage comment for unused MAPPING. 2025-08-07 17:39:05 -07:00
__init__.py
addressee.py scheduled_messages: Set read_by_sender for self-DMs using DM group. 2025-07-21 22:46:38 -07:00
alert_words.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
async_utils.py mypy: Enable new error explicit-override. 2023-10-12 12:28:41 -07:00
attachments.py message: Use .is_channel_message column instead of is_stream_message(). 2025-08-19 23:37:07 -07:00
avatar_hash.py avatars: Encode version into the filename. 2024-07-07 14:40:07 -07:00
avatar.py avatar: Add option to disable gravatars per realm. 2025-01-30 18:46:02 -08:00
bot_config.py ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
bot_lib.py worker: Flag messages processed by outgoing bot. 2025-01-24 17:56:44 -08:00
bot_storage.py ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
bulk_create.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
cache_helpers.py cache_helpers: Use iterators, so we do not keep the full list in memory. 2025-10-01 10:36:37 -07:00
cache.py cache: Write cache_key_prefixes without any compression. 2025-09-09 19:28:52 -07:00
camo.py
channel_folders.py channel-folders: Order by order field in GET method. 2025-08-06 16:34:40 -07:00
compatibility.py ruff: Fix PLR6104 Use += to perform an augmented assignment directly. 2024-07-14 13:49:51 -07:00
context_managers.py ruff: Fix SIM117 Use a single with statement with multiple contexts. 2024-07-14 13:48:32 -07:00
create_user.py api: Improve handling of delivery_email in the GET /users/{email} API. 2024-10-08 18:01:49 -07:00
db_connections.py db: Split reset_queries into a new module zerver.lib.db_connections. 2024-04-17 16:49:03 -07:00
db.py ruff: Fix UP035 Import from collections.abc, typing instead. 2024-07-13 22:28:22 -07:00
debug.py ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
default_streams.py default streams: Return set instead of a list. 2025-01-22 10:55:25 -08:00
demo_organizations.py demo-orgs: Delete expired demo orgs in archive_messages cron job. 2025-06-07 22:53:01 -07:00
dev_ldap_directory.py ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
digest.py CVE-2025-52559: Generate HTML for digest new channels safely. 2025-07-02 12:12:36 -07:00
display_recipient.py get_recipient_ids: Include user ID for self-messages using DM group. 2025-08-28 10:04:37 -07:00
domains.py ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
drafts.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
email_mirror_helpers.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
email_mirror_server.py email_mirror_server: Fix the logfile path which is checked. 2025-10-23 11:57:30 -07:00
email_mirror.py email_mirror: Drop missed-message emails which are autogenerated. 2025-09-26 09:18:13 -07:00
email_notifications.py email_notifications: Convert datetime to local date string. 2025-10-01 11:25:00 -07:00
email_validation.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
emoji_utils.py emoji: Match emoji sequences in markdown. 2023-08-23 16:18:15 -07:00
emoji.py emoji: Use a non-predictable filename. 2024-07-12 13:26:47 -07:00
event_schema.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
event_types.py ruff: Fix PYI061 Use None rather than Literal[None]. 2025-09-30 16:47:54 -07:00
events.py events: Remove realm_is_zephyr_mirror_realm from API. 2025-09-16 11:23:10 -07:00
exceptions.py exceptions: Add link to rate-limiting docs in 429 response. 2025-10-27 16:22:13 -07:00
export.py export: Move all queries, when possible, to iterators. 2025-10-01 11:21:34 -07:00
external_accounts.py ruff: Fix UP006 Use list instead of List for type annotation. 2024-07-13 22:28:22 -07:00
fix_unreads.py ruff: Fix UP035 Import from collections.abc, typing instead. 2024-07-13 22:28:22 -07:00
generate_test_data.py ruff: Fix PLR6104 Use += to perform an augmented assignment directly. 2024-07-14 13:49:51 -07:00
github.py apps: Provide arm64 app build by default for macOS. 2025-03-28 16:45:07 -07:00
home.py zephyr: Remove Zephyr mirroring support. 2025-09-16 11:18:18 -07:00
html_diff.py ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
html_to_text.py ruff: Fix UP035 Import from collections.abc, typing instead. 2024-07-13 22:28:22 -07:00
i18n.py registration: Fix language code missing for find_team emails. 2025-03-24 14:41:23 -07:00
import_realm.py export: Move all queries, when possible, to iterators. 2025-10-01 11:21:34 -07:00
initial_password.py ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
integrations.py integrations: Remove Slack from WEBHOOK_SCREENSHOT_CONFIG. 2025-11-03 16:42:07 -08:00
invites.py ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
logging_util.py logging_util: Error-proof against weird exc_info. 2025-05-19 16:39:44 -07:00
management.py management: Skip hourly crons during deploys. 2025-07-15 09:07:36 -07:00
mdiff.py tests: Rename the Node tests to *.cjs. 2024-11-13 09:18:56 -08:00
mention.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
message_cache.py message_cache: Skip pickling JSON-encoded string in cache. 2025-08-27 09:22:56 -07:00
message_report.py message: Use .is_channel_message column instead of is_stream_message(). 2025-08-19 23:37:07 -07:00
message.py push_notifications: Skip enqueuing notif for users without push devices. 2025-09-17 12:32:49 -07:00
migrate.py ruff: Fix UP035 Import from collections.abc, typing instead. 2024-07-13 22:28:22 -07:00
migration_status.py migration_status: Refactor parse_migration_status. 2025-03-20 10:57:54 -07:00
mime_types.py mime_types: Remove incorrect comment, and add audio/mp4 and audio/webm. 2025-07-16 09:20:31 -07:00
mobile_auth_otp.py ruff: Fix B905 zip() without an explicit strict= parameter. 2024-07-13 22:28:22 -07:00
muted_users.py ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
name_restrictions.py signup: Add "airsi.de" as an allowed email domain. 2025-03-19 10:04:11 -07:00
narrow_helpers.py url_decoding: Add parse_narrow_url. 2025-02-24 15:37:40 -08:00
narrow_predicate.py narrow_term: Refactor a NeverNegatedNarrowTerm. 2025-02-24 15:37:40 -08:00
narrow.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
navigation_views.py navigation_views: Add backend for navigation views in left sidebar. 2025-05-23 16:25:08 -07:00
notes.py ruff: Fix PYI059 Generic[] should always be the last base class. 2025-09-30 16:47:54 -07:00
notification_data.py notification_data: Fix a typo. 2025-11-03 15:45:22 -08:00
onboarding_steps.py onboarding_steps: Add 'navigation_tour_video' for new users. 2025-03-13 14:38:16 -07:00
onboarding.py help: Do not treat Help Center as a proper noun. 2025-09-17 13:20:25 -07:00
outgoing_http.py ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
outgoing_webhook.py outgoing_webhook: Lump chunked-encoding errors with connection errors. 2025-09-05 10:35:01 -07:00
partial.py ruff: Fix UP035 Import from collections.abc, typing instead. 2024-07-13 22:28:22 -07:00
per_request_cache.py ruff: Fix UP035 Import from collections.abc, typing instead. 2024-07-13 22:28:22 -07:00
presence.py zephyr: Remove Zephyr mirroring support. 2025-09-16 11:18:18 -07:00
profile.py ruff: Fix UP035 Import from collections.abc, typing instead. 2024-07-13 22:28:22 -07:00
push_notifications.py push_notifications: Fix error while sending legacy notification. 2025-11-03 08:15:18 -08:00
push_registration.py push_registration: Fix incorrect line-wrapping. 2025-07-14 15:12:30 -07:00
pysa.py
query_helpers.py mypy: Remove use of ValuesQuerySet and QuerySetAny. 2024-08-24 17:30:41 -07:00
queue.py ruff: Fix PYI059 Generic[] should always be the last base class. 2025-09-30 16:47:54 -07:00
rate_limiter.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
realm_description.py
realm_icon.py
realm_logo.py ruff: Fix UP006 Use list instead of List for type annotation. 2024-07-13 22:28:22 -07:00
recipient_parsing.py scheduled_messages: Migrate to typed_endpoint. 2024-08-20 10:03:22 -07:00
recipient_users.py direct_messages: Use DM groups for 1:1 or self DMs if present. 2025-05-18 23:58:59 -07:00
redis_utils.py ruff: Fix UP035 Import from collections.abc, typing instead. 2024-07-13 22:28:22 -07:00
reminders.py reminders: Stop interpolating user-provided values in format string. 2025-08-27 12:07:21 -07:00
remote_server.py push_notification: Send end-to-end encrypted push notifications. 2025-07-22 17:08:55 -07:00
request.py request: Use Django 5.2 HttpRequest.get_preferred_type. 2025-07-17 14:37:11 -07:00
response.py requirements: Upgrade Python requirements. 2025-09-30 16:47:54 -07:00
rest.py rest_api: Add logging for use of the deprecated method parameter. 2025-04-24 13:10:52 -07:00
retention.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
safe_session_cached_db.py ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
scheduled_messages.py zerver: Add endpoints and events for reminders. 2025-07-02 12:47:00 -07:00
scim_filter.py scim: Add support for Groups. 2025-08-08 17:29:11 -07:00
scim.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
send_email.py custom_emails: Prevent duplicate emails from send_custom_email command. 2025-11-02 11:17:09 -08:00
server_initialization.py migration: Rename 'populate_db' Client to 'ZulipDataImport'. 2025-05-08 12:18:34 -07:00
sessions.py sessions: Use the narrow user fetch when expiring sessions. 2025-02-13 12:40:53 -08:00
singleton_bmemcached.py cache: Use zstd compression level 9 for bmemcached compression. 2025-08-27 09:22:56 -07:00
soft_deactivation.py mypy: Fix no-redef errors from django-stubs. 2025-09-30 16:47:54 -07:00
sounds.py ruff: Fix UP006 Use list instead of List for type annotation. 2024-07-13 22:28:22 -07:00
sqlalchemy_utils.py ruff: Fix UP035 Import from collections.abc, typing instead. 2024-07-13 22:28:22 -07:00
storage.py storage: Simplify system bot avatar logic. 2024-10-25 10:59:57 -07:00
stream_color.py codespell: Fix typos caught by codespell. 2025-02-18 22:04:43 -08:00
stream_subscription.py stream: Add subscriber_count field. 2025-05-13 17:36:53 -07:00
stream_topic.py ruff: Fix UP006 Use list instead of List for type annotation. 2024-07-13 22:28:22 -07:00
stream_traffic.py mypy: Fix no-redef errors from django-stubs. 2025-09-30 16:47:54 -07:00
streams.py streams: Make sure an anonymous group is used for only one setting. 2025-11-04 11:51:31 -08:00
string_validation.py message_send: Add support to send message with an empty topic name. 2025-01-07 17:24:00 -08:00
subdomains.py auth: Pass None as default_subdomain to verify the host. 2025-07-28 10:59:38 -07:00
subscription_info.py zephyr: Remove Zephyr mirroring support. 2025-09-16 11:18:18 -07:00
templates.py help_relative_links: Delete. 2025-09-04 09:37:34 -07:00
test_classes.py test_classes: Give useful error when using /json/ URLs wrong. 2025-10-03 15:49:20 -07:00
test_console_output.py ruff: Fix UP035 Import from collections.abc, typing instead. 2024-07-13 22:28:22 -07:00
test_data.source.txt
test_fixtures.py requirements: Migrate to uv. 2025-02-24 22:29:24 -08:00
test_helpers.py test_helpers: Use care in load_subdomain_token URL parsing. 2025-10-08 23:33:47 -07:00
test_runner.py ruff: Fix FURB122 Use of f.write in a for loop. 2025-06-25 11:49:02 -07:00
tex.py ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
thumbnail.py markdown: Render inline audio files using the ![title](url) syntax. 2025-07-11 13:11:56 -07:00
timeout.py ruff: Fix UP035 Import from collections.abc, typing instead. 2024-07-13 22:28:22 -07:00
timestamp.py timestamp: Use localized formatting in format_datetime_to_string. 2025-10-03 10:43:16 -07:00
timezone.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
topic_link_util.py url_encoding: Standardize to use encode_hash_component. 2025-07-03 14:40:49 -07:00
topic_sqlalchemy.py topic: Enforce is_channel_message=True on topic queries. 2025-03-18 09:34:11 -07:00
topic.py topics: Server generated permalinks now prefer latest message id. 2025-07-03 11:06:39 -07:00
transfer.py transfer: Upload thumbnails for image files. 2025-08-06 15:46:07 -07:00
typed_endpoint_validators.py zerver: Extract function to parse Enum from string value. 2025-05-13 16:04:43 -07:00
typed_endpoint.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
types.py stream_settings: Add can_delete_own_message_group setting. 2025-07-17 15:44:52 -07:00
url_decoding.py url_decoding: Add parse_narrow_url. 2025-02-24 15:37:40 -08:00
url_encoding.py notification: Use existing email format for missed 1:1 DM via DM group. 2025-07-24 16:41:52 -07:00
url_redirects.py help: Move URL redirects from Django to Astro. 2025-09-03 09:28:15 -07:00
user_agent.py ruff: Fix UP006 Use list instead of List for type annotation. 2024-07-13 22:28:22 -07:00
user_counts.py ruff: Fix UP006 Use list instead of List for type annotation. 2024-07-13 22:28:22 -07:00
user_groups.py user_groups: Fix union typing. 2025-09-30 16:47:54 -07:00
user_message.py ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
user_status.py ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
user_topics.py user_topics: Use a list instead of tuple for muted_topics. 2025-03-17 14:21:37 -07:00
users.py users: Allow 1-character names. 2025-09-08 14:30:59 -07:00
utils.py mattermost_import: Log when processing messages. 2025-05-21 16:08:30 -07:00
validator.py requirements: Upgrade Python requirements. 2025-06-25 11:49:02 -07:00
widget.py python: Simplify with str.removeprefix, str.removesuffix. 2024-09-03 12:30:16 -07:00
zcommand.py python: Simplify with str.removeprefix, str.removesuffix. 2024-09-03 12:30:16 -07:00
zstd_level9.py cache: Use zstd compression level 9 for bmemcached compression. 2025-08-27 09:22:56 -07:00
zulip_update_announcements.py updates: Add update message (level=22). 2025-10-13 23:18:00 -07:00