mirror of https://github.com/zulip/zulip.git
realm: Migrate to typed_endpoint.
This commit is contained in:
parent
a7da24a36f
commit
ba79d759f1
|
@ -2016,6 +2016,12 @@ class RealmAPITest(ZulipTestCase):
|
|||
)
|
||||
self.assert_json_error(result, "Invalid email batching period: 604810 seconds")
|
||||
|
||||
def test_invalid_emojiset_value(self) -> None:
|
||||
result = self.client_patch("/json/realm/user_settings_defaults", {"emojiset": "invalid"})
|
||||
self.assert_json_error(
|
||||
result, "Invalid emojiset: Value error, Not in the list of possible values"
|
||||
)
|
||||
|
||||
def test_ignored_parameters_in_realm_default_endpoint(self) -> None:
|
||||
params = {"starred_message_counts": orjson.dumps(False).decode(), "emoji_set": "twitter"}
|
||||
result = self.client_patch("/json/realm/user_settings_defaults", params)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from collections.abc import Mapping
|
||||
from typing import Annotated, Any
|
||||
from typing import Annotated, Any, Literal
|
||||
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db import transaction
|
||||
|
@ -31,11 +31,15 @@ from zerver.decorator import require_realm_admin, require_realm_owner
|
|||
from zerver.forms import check_subdomain_available as check_subdomain
|
||||
from zerver.lib.exceptions import JsonableError, OrganizationOwnerRequiredError
|
||||
from zerver.lib.i18n import get_available_language_codes
|
||||
from zerver.lib.request import REQ, has_request_variables
|
||||
from zerver.lib.response import json_success
|
||||
from zerver.lib.retention import parse_message_retention_days
|
||||
from zerver.lib.streams import access_stream_by_id
|
||||
from zerver.lib.typed_endpoint import ApiParamConfig, typed_endpoint
|
||||
from zerver.lib.typed_endpoint import (
|
||||
ApiParamConfig,
|
||||
typed_endpoint,
|
||||
typed_endpoint_without_parameters,
|
||||
)
|
||||
from zerver.lib.typed_endpoint_validators import check_int_in_validator, check_string_in_validator
|
||||
from zerver.lib.user_groups import (
|
||||
GroupSettingChangeRequest,
|
||||
access_user_group_for_setting,
|
||||
|
@ -43,14 +47,7 @@ from zerver.lib.user_groups import (
|
|||
parse_group_setting_value,
|
||||
validate_group_setting_value_change,
|
||||
)
|
||||
from zerver.lib.validator import (
|
||||
check_bool,
|
||||
check_capped_url,
|
||||
check_int,
|
||||
check_int_in,
|
||||
check_string,
|
||||
check_string_in,
|
||||
)
|
||||
from zerver.lib.validator import check_capped_url, check_string
|
||||
from zerver.models import Realm, RealmReactivationStatus, RealmUserDefault, UserProfile
|
||||
from zerver.models.realms import (
|
||||
BotCreationPolicyEnum,
|
||||
|
@ -485,7 +482,7 @@ def update_realm(
|
|||
|
||||
|
||||
@require_realm_owner
|
||||
@has_request_variables
|
||||
@typed_endpoint_without_parameters
|
||||
def deactivate_realm(request: HttpRequest, user: UserProfile) -> HttpResponse:
|
||||
realm = user.realm
|
||||
do_deactivate_realm(
|
||||
|
@ -521,74 +518,68 @@ def realm_reactivation(request: HttpRequest, confirmation_key: str) -> HttpRespo
|
|||
|
||||
|
||||
emojiset_choices = {emojiset["key"] for emojiset in RealmUserDefault.emojiset_choices()}
|
||||
web_home_view_options = ["recent_topics", "inbox", "all_messages"]
|
||||
|
||||
|
||||
@require_realm_admin
|
||||
@has_request_variables
|
||||
@typed_endpoint
|
||||
def update_realm_user_settings_defaults(
|
||||
request: HttpRequest,
|
||||
user_profile: UserProfile,
|
||||
dense_mode: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
web_mark_read_on_scroll_policy: int | None = REQ(
|
||||
json_validator=check_int_in(UserProfile.WEB_MARK_READ_ON_SCROLL_POLICY_CHOICES),
|
||||
default=None,
|
||||
),
|
||||
web_channel_default_view: int | None = REQ(
|
||||
json_validator=check_int_in(UserProfile.WEB_CHANNEL_DEFAULT_VIEW_CHOICES),
|
||||
default=None,
|
||||
),
|
||||
starred_message_counts: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
receives_typing_notifications: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
web_stream_unreads_count_display_policy: int | None = REQ(
|
||||
json_validator=check_int_in(UserProfile.WEB_STREAM_UNREADS_COUNT_DISPLAY_POLICY_CHOICES),
|
||||
default=None,
|
||||
),
|
||||
fluid_layout_width: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
high_contrast_mode: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
color_scheme: int | None = REQ(
|
||||
json_validator=check_int_in(UserProfile.COLOR_SCHEME_CHOICES), default=None
|
||||
),
|
||||
web_font_size_px: int | None = REQ(json_validator=check_int, default=None),
|
||||
web_line_height_percent: int | None = REQ(json_validator=check_int, default=None),
|
||||
translate_emoticons: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
display_emoji_reaction_users: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
web_home_view: str | None = REQ(
|
||||
str_validator=check_string_in(web_home_view_options), default=None
|
||||
),
|
||||
web_escape_navigates_to_home_view: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
left_side_userlist: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
emojiset: str | None = REQ(str_validator=check_string_in(emojiset_choices), default=None),
|
||||
demote_inactive_streams: int | None = REQ(
|
||||
json_validator=check_int_in(UserProfile.DEMOTE_STREAMS_CHOICES), default=None
|
||||
),
|
||||
enable_stream_desktop_notifications: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
enable_stream_email_notifications: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
enable_stream_push_notifications: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
enable_stream_audible_notifications: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
wildcard_mentions_notify: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
enable_followed_topic_desktop_notifications: bool | None = REQ(
|
||||
json_validator=check_bool, default=None
|
||||
),
|
||||
enable_followed_topic_email_notifications: bool | None = REQ(
|
||||
json_validator=check_bool, default=None
|
||||
),
|
||||
enable_followed_topic_push_notifications: bool | None = REQ(
|
||||
json_validator=check_bool, default=None
|
||||
),
|
||||
enable_followed_topic_audible_notifications: bool | None = REQ(
|
||||
json_validator=check_bool, default=None
|
||||
),
|
||||
enable_followed_topic_wildcard_mentions_notify: bool | None = REQ(
|
||||
json_validator=check_bool, default=None
|
||||
),
|
||||
notification_sound: str | None = REQ(default=None),
|
||||
enable_desktop_notifications: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
enable_sounds: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
enable_offline_email_notifications: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
enable_offline_push_notifications: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
enable_online_push_notifications: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
enable_digest_emails: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
*,
|
||||
dense_mode: Json[bool] | None = None,
|
||||
web_mark_read_on_scroll_policy: Json[
|
||||
Annotated[
|
||||
int,
|
||||
check_int_in_validator(UserProfile.WEB_MARK_READ_ON_SCROLL_POLICY_CHOICES),
|
||||
]
|
||||
]
|
||||
| None = None,
|
||||
web_channel_default_view: Json[
|
||||
Annotated[int, check_int_in_validator(UserProfile.WEB_CHANNEL_DEFAULT_VIEW_CHOICES)]
|
||||
]
|
||||
| None = None,
|
||||
starred_message_counts: Json[bool] | None = None,
|
||||
receives_typing_notifications: Json[bool] | None = None,
|
||||
web_stream_unreads_count_display_policy: Json[
|
||||
Annotated[
|
||||
int,
|
||||
check_int_in_validator(UserProfile.WEB_STREAM_UNREADS_COUNT_DISPLAY_POLICY_CHOICES),
|
||||
]
|
||||
]
|
||||
| None = None,
|
||||
fluid_layout_width: Json[bool] | None = None,
|
||||
high_contrast_mode: Json[bool] | None = None,
|
||||
color_scheme: Json[Annotated[int, check_int_in_validator(UserProfile.COLOR_SCHEME_CHOICES)]]
|
||||
| None = None,
|
||||
web_font_size_px: Json[int] | None = None,
|
||||
web_line_height_percent: Json[int] | None = None,
|
||||
translate_emoticons: Json[bool] | None = None,
|
||||
display_emoji_reaction_users: Json[bool] | None = None,
|
||||
web_home_view: Literal["recent_topics", "inbox", "all_messages"] | None = None,
|
||||
web_escape_navigates_to_home_view: Json[bool] | None = None,
|
||||
left_side_userlist: Json[bool] | None = None,
|
||||
emojiset: Annotated[str, check_string_in_validator(emojiset_choices)] | None = None,
|
||||
demote_inactive_streams: Json[
|
||||
Annotated[int, check_int_in_validator(UserProfile.DEMOTE_STREAMS_CHOICES)]
|
||||
]
|
||||
| None = None,
|
||||
enable_stream_desktop_notifications: Json[bool] | None = None,
|
||||
enable_stream_email_notifications: Json[bool] | None = None,
|
||||
enable_stream_push_notifications: Json[bool] | None = None,
|
||||
enable_stream_audible_notifications: Json[bool] | None = None,
|
||||
wildcard_mentions_notify: Json[bool] | None = None,
|
||||
enable_followed_topic_desktop_notifications: Json[bool] | None = None,
|
||||
enable_followed_topic_email_notifications: Json[bool] | None = None,
|
||||
enable_followed_topic_push_notifications: Json[bool] | None = None,
|
||||
enable_followed_topic_audible_notifications: Json[bool] | None = None,
|
||||
enable_followed_topic_wildcard_mentions_notify: Json[bool] | None = None,
|
||||
notification_sound: str | None = None,
|
||||
enable_desktop_notifications: Json[bool] | None = None,
|
||||
enable_sounds: Json[bool] | None = None,
|
||||
enable_offline_email_notifications: Json[bool] | None = None,
|
||||
enable_offline_push_notifications: Json[bool] | None = None,
|
||||
enable_online_push_notifications: Json[bool] | None = None,
|
||||
enable_digest_emails: Json[bool] | None = None,
|
||||
# enable_login_emails is not included here, because we don't want
|
||||
# security-related settings to be controlled by organization administrators.
|
||||
# enable_marketing_emails is not included here, since we don't at
|
||||
|
@ -597,45 +588,51 @@ def update_realm_user_settings_defaults(
|
|||
#
|
||||
# We may want to change this model in the future, since some SSO signups
|
||||
# do not offer an opportunity to prompt the user at all during signup.
|
||||
message_content_in_email_notifications: bool | None = REQ(
|
||||
json_validator=check_bool, default=None
|
||||
),
|
||||
pm_content_in_desktop_notifications: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
desktop_icon_count_display: int | None = REQ(
|
||||
json_validator=check_int_in(UserProfile.DESKTOP_ICON_COUNT_DISPLAY_CHOICES), default=None
|
||||
),
|
||||
realm_name_in_email_notifications_policy: int | None = REQ(
|
||||
json_validator=check_int_in(UserProfile.REALM_NAME_IN_EMAIL_NOTIFICATIONS_POLICY_CHOICES),
|
||||
default=None,
|
||||
),
|
||||
automatically_follow_topics_policy: int | None = REQ(
|
||||
json_validator=check_int_in(UserProfile.AUTOMATICALLY_CHANGE_VISIBILITY_POLICY_CHOICES),
|
||||
default=None,
|
||||
),
|
||||
automatically_unmute_topics_in_muted_streams_policy: int | None = REQ(
|
||||
json_validator=check_int_in(UserProfile.AUTOMATICALLY_CHANGE_VISIBILITY_POLICY_CHOICES),
|
||||
default=None,
|
||||
),
|
||||
automatically_follow_topics_where_mentioned: bool | None = REQ(
|
||||
json_validator=check_bool, default=None
|
||||
),
|
||||
presence_enabled: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
enter_sends: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
enable_drafts_synchronization: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
email_notifications_batching_period_seconds: int | None = REQ(
|
||||
json_validator=check_int, default=None
|
||||
),
|
||||
twenty_four_hour_time: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
send_stream_typing_notifications: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
send_private_typing_notifications: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
send_read_receipts: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
user_list_style: int | None = REQ(
|
||||
json_validator=check_int_in(UserProfile.USER_LIST_STYLE_CHOICES), default=None
|
||||
),
|
||||
email_address_visibility: int | None = REQ(
|
||||
json_validator=check_int_in(UserProfile.EMAIL_ADDRESS_VISIBILITY_TYPES), default=None
|
||||
),
|
||||
web_navigate_to_sent_message: bool | None = REQ(json_validator=check_bool, default=None),
|
||||
message_content_in_email_notifications: Json[bool] | None = None,
|
||||
pm_content_in_desktop_notifications: Json[bool] | None = None,
|
||||
desktop_icon_count_display: Json[
|
||||
Annotated[int, check_int_in_validator(UserProfile.DESKTOP_ICON_COUNT_DISPLAY_CHOICES)]
|
||||
]
|
||||
| None = None,
|
||||
realm_name_in_email_notifications_policy: Json[
|
||||
Annotated[
|
||||
int,
|
||||
check_int_in_validator(UserProfile.REALM_NAME_IN_EMAIL_NOTIFICATIONS_POLICY_CHOICES),
|
||||
]
|
||||
]
|
||||
| None = None,
|
||||
automatically_follow_topics_policy: Json[
|
||||
Annotated[
|
||||
int,
|
||||
check_int_in_validator(UserProfile.AUTOMATICALLY_CHANGE_VISIBILITY_POLICY_CHOICES),
|
||||
]
|
||||
]
|
||||
| None = None,
|
||||
automatically_unmute_topics_in_muted_streams_policy: Json[
|
||||
Annotated[
|
||||
int,
|
||||
check_int_in_validator(UserProfile.AUTOMATICALLY_CHANGE_VISIBILITY_POLICY_CHOICES),
|
||||
]
|
||||
]
|
||||
| None = None,
|
||||
automatically_follow_topics_where_mentioned: Json[bool] | None = None,
|
||||
presence_enabled: Json[bool] | None = None,
|
||||
enter_sends: Json[bool] | None = None,
|
||||
enable_drafts_synchronization: Json[bool] | None = None,
|
||||
email_notifications_batching_period_seconds: Json[int] | None = None,
|
||||
twenty_four_hour_time: Json[bool] | None = None,
|
||||
send_stream_typing_notifications: Json[bool] | None = None,
|
||||
send_private_typing_notifications: Json[bool] | None = None,
|
||||
send_read_receipts: Json[bool] | None = None,
|
||||
user_list_style: Json[
|
||||
Annotated[int, check_int_in_validator(UserProfile.USER_LIST_STYLE_CHOICES)]
|
||||
]
|
||||
| None = None,
|
||||
email_address_visibility: Json[
|
||||
Annotated[int, check_int_in_validator(UserProfile.EMAIL_ADDRESS_VISIBILITY_TYPES)]
|
||||
]
|
||||
| None = None,
|
||||
web_navigate_to_sent_message: Json[bool] | None = None,
|
||||
) -> HttpResponse:
|
||||
if notification_sound is not None or email_notifications_batching_period_seconds is not None:
|
||||
check_settings_values(notification_sound, email_notifications_batching_period_seconds)
|
||||
|
|
Loading…
Reference in New Issue