mirror of https://github.com/zulip/zulip.git
actions: Split out zerver.actions.message_send.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
parent
ec6355389a
commit
975066e3f0
|
@ -971,7 +971,8 @@ def update_sponsorship_status(
|
||||||
|
|
||||||
|
|
||||||
def approve_sponsorship(realm: Realm, *, acting_user: Optional[UserProfile]) -> None:
|
def approve_sponsorship(realm: Realm, *, acting_user: Optional[UserProfile]) -> None:
|
||||||
from zerver.lib.actions import do_change_realm_plan_type, internal_send_private_message
|
from zerver.actions.message_send import internal_send_private_message
|
||||||
|
from zerver.lib.actions import do_change_realm_plan_type
|
||||||
|
|
||||||
do_change_realm_plan_type(realm, Realm.PLAN_TYPE_STANDARD_FREE, acting_user=acting_user)
|
do_change_realm_plan_type(realm, Realm.PLAN_TYPE_STANDARD_FREE, acting_user=acting_user)
|
||||||
customer = get_customer_by_realm(realm)
|
customer = get_customer_by_realm(realm)
|
||||||
|
|
|
@ -71,12 +71,12 @@ This section details the ways in which it is different:
|
||||||
`apply_markdown` and `client_gravatar` features in our
|
`apply_markdown` and `client_gravatar` features in our
|
||||||
[events API docs](https://zulip.com/api/register-queue)).
|
[events API docs](https://zulip.com/api/register-queue)).
|
||||||
- Following our standard naming convention, input validation is done
|
- Following our standard naming convention, input validation is done
|
||||||
inside the `check_message` function in `zerver/lib/actions.py`, which is responsible for
|
inside the `check_message` function in `zerver/actions/message_send.py`, which is responsible for
|
||||||
validating the user can send to the recipient,
|
validating the user can send to the recipient,
|
||||||
[rendering the Markdown](markdown.md), etc. --
|
[rendering the Markdown](markdown.md), etc. --
|
||||||
basically everything that can fail due to bad user input.
|
basically everything that can fail due to bad user input.
|
||||||
- The core `do_send_messages` function (which handles actually sending
|
- The core `do_send_messages` function (which handles actually sending
|
||||||
the message) in `zerver/lib/actions.py` is one of the most optimized and thus complex parts of
|
the message) in `zerver/actions/message_send.py` is one of the most optimized and thus complex parts of
|
||||||
the system. But in short, its job is to atomically do a few key
|
the system. But in short, its job is to atomically do a few key
|
||||||
things:
|
things:
|
||||||
- Store a `Message` row in the database.
|
- Store a `Message` row in the database.
|
||||||
|
|
|
@ -23,7 +23,7 @@ def zerver.lib.avatar_hash.user_avatar_path_from_ids(user_profile_id, realm_id)
|
||||||
# This function creates a list of 'UserMessageLite' objects, which contain only
|
# This function creates a list of 'UserMessageLite' objects, which contain only
|
||||||
# integral IDs and flags. These should safe for use with SQL and other
|
# integral IDs and flags. These should safe for use with SQL and other
|
||||||
# operations.
|
# operations.
|
||||||
def zerver.lib.actions.create_user_messages(
|
def zerver.actions.message_send.create_user_messages(
|
||||||
message,
|
message,
|
||||||
um_eligible_user_ids,
|
um_eligible_user_ids,
|
||||||
long_term_idle_user_ids,
|
long_term_idle_user_ids,
|
||||||
|
|
|
@ -378,7 +378,7 @@ python_rules = RuleList(
|
||||||
"exclude_line": {
|
"exclude_line": {
|
||||||
# This one in check_message is kinda terrible, since it's
|
# This one in check_message is kinda terrible, since it's
|
||||||
# how most instances are written, but better to exclude something than nothing
|
# how most instances are written, but better to exclude something than nothing
|
||||||
("zerver/lib/actions.py", "stream = get_stream(stream_name, realm)"),
|
("zerver/actions/message_send.py", "stream = get_stream(stream_name, realm)"),
|
||||||
},
|
},
|
||||||
"description": "Please use access_stream_by_*() to fetch Stream objects",
|
"description": "Please use access_stream_by_*() to fetch Stream objects",
|
||||||
},
|
},
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -6,7 +6,7 @@ from django.conf import settings
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from zulip_bots.lib import BotIdentity, RateLimit
|
from zulip_bots.lib import BotIdentity, RateLimit
|
||||||
|
|
||||||
from zerver.lib.actions import (
|
from zerver.actions.message_send import (
|
||||||
internal_send_huddle_message,
|
internal_send_huddle_message,
|
||||||
internal_send_private_message,
|
internal_send_private_message,
|
||||||
internal_send_stream_message_by_name,
|
internal_send_stream_message_by_name,
|
||||||
|
|
|
@ -9,7 +9,7 @@ from django.conf import settings
|
||||||
from django.utils.timezone import now as timezone_now
|
from django.utils.timezone import now as timezone_now
|
||||||
from django.utils.timezone import timedelta
|
from django.utils.timezone import timedelta
|
||||||
|
|
||||||
from zerver.lib.actions import (
|
from zerver.actions.message_send import (
|
||||||
check_send_message,
|
check_send_message,
|
||||||
internal_send_huddle_message,
|
internal_send_huddle_message,
|
||||||
internal_send_private_message,
|
internal_send_private_message,
|
||||||
|
|
|
@ -5,8 +5,8 @@ from typing import Any, Dict
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.mail import mail_admins
|
from django.core.mail import mail_admins
|
||||||
|
|
||||||
|
from zerver.actions.message_send import internal_send_stream_message
|
||||||
from zerver.filters import clean_data_from_query_parameters
|
from zerver.filters import clean_data_from_query_parameters
|
||||||
from zerver.lib.actions import internal_send_stream_message
|
|
||||||
from zerver.models import get_realm, get_stream, get_system_bot
|
from zerver.models import get_realm, get_stream, get_system_bot
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,13 +5,12 @@ from django.db import transaction
|
||||||
from django.db.models import Count
|
from django.db.models import Count
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
from zerver.lib.actions import (
|
from zerver.actions.message_send import (
|
||||||
do_add_reaction,
|
|
||||||
do_send_messages,
|
do_send_messages,
|
||||||
internal_prep_stream_message_by_name,
|
internal_prep_stream_message_by_name,
|
||||||
internal_send_private_message,
|
internal_send_private_message,
|
||||||
setup_realm_internal_bots,
|
|
||||||
)
|
)
|
||||||
|
from zerver.lib.actions import do_add_reaction, setup_realm_internal_bots
|
||||||
from zerver.lib.emoji import emoji_name_to_emoji_code
|
from zerver.lib.emoji import emoji_name_to_emoji_code
|
||||||
from zerver.lib.message import SendMessageRequest
|
from zerver.lib.message import SendMessageRequest
|
||||||
from zerver.models import Message, Realm, UserProfile, get_system_bot
|
from zerver.models import Message, Realm, UserProfile, get_system_bot
|
||||||
|
|
|
@ -10,7 +10,7 @@ from django.utils.translation import gettext as _
|
||||||
from requests import Response
|
from requests import Response
|
||||||
|
|
||||||
from version import ZULIP_VERSION
|
from version import ZULIP_VERSION
|
||||||
from zerver.lib.actions import check_send_message
|
from zerver.actions.message_send import check_send_message
|
||||||
from zerver.lib.exceptions import JsonableError
|
from zerver.lib.exceptions import JsonableError
|
||||||
from zerver.lib.message import MessageDict
|
from zerver.lib.message import MessageDict
|
||||||
from zerver.lib.outgoing_http import OutgoingSession
|
from zerver.lib.outgoing_http import OutgoingSession
|
||||||
|
|
|
@ -47,12 +47,11 @@ from fakeldap import MockLDAP
|
||||||
from two_factor.models import PhoneDevice
|
from two_factor.models import PhoneDevice
|
||||||
|
|
||||||
from corporate.models import Customer, CustomerPlan, LicenseLedger
|
from corporate.models import Customer, CustomerPlan, LicenseLedger
|
||||||
|
from zerver.actions.message_send import check_send_message, check_send_stream_message
|
||||||
from zerver.decorator import do_two_factor_login
|
from zerver.decorator import do_two_factor_login
|
||||||
from zerver.lib.actions import (
|
from zerver.lib.actions import (
|
||||||
bulk_add_subscriptions,
|
bulk_add_subscriptions,
|
||||||
bulk_remove_subscriptions,
|
bulk_remove_subscriptions,
|
||||||
check_send_message,
|
|
||||||
check_send_stream_message,
|
|
||||||
do_set_realm_property,
|
do_set_realm_property,
|
||||||
)
|
)
|
||||||
from zerver.lib.cache import bounce_key_prefix_for_testing
|
from zerver.lib.cache import bounce_key_prefix_for_testing
|
||||||
|
|
|
@ -7,7 +7,7 @@ from urllib.parse import unquote
|
||||||
from django.http import HttpRequest
|
from django.http import HttpRequest
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
from zerver.lib.actions import (
|
from zerver.actions.message_send import (
|
||||||
check_send_private_message,
|
check_send_private_message,
|
||||||
check_send_stream_message,
|
check_send_stream_message,
|
||||||
check_send_stream_message_by_id,
|
check_send_stream_message_by_id,
|
||||||
|
|
|
@ -8,7 +8,7 @@ from django.core.management.base import BaseCommand
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.utils.timezone import now as timezone_now
|
from django.utils.timezone import now as timezone_now
|
||||||
|
|
||||||
from zerver.lib.actions import build_message_send_dict, do_send_messages
|
from zerver.actions.message_send import build_message_send_dict, do_send_messages
|
||||||
from zerver.lib.logging_util import log_to_file
|
from zerver.lib.logging_util import log_to_file
|
||||||
from zerver.lib.message import SendMessageRequest
|
from zerver.lib.message import SendMessageRequest
|
||||||
from zerver.models import Message, ScheduledMessage, get_user_by_delivery_email
|
from zerver.models import Message, ScheduledMessage, get_user_by_delivery_email
|
||||||
|
|
|
@ -8,9 +8,10 @@ from django.http import HttpRequest, HttpResponse
|
||||||
from django.utils.timezone import now as timezone_now
|
from django.utils.timezone import now as timezone_now
|
||||||
|
|
||||||
from version import API_FEATURE_LEVEL, ZULIP_MERGE_BASE, ZULIP_VERSION
|
from version import API_FEATURE_LEVEL, ZULIP_MERGE_BASE, ZULIP_VERSION
|
||||||
|
from zerver.actions.message_send import check_send_message
|
||||||
from zerver.actions.presence import do_update_user_presence
|
from zerver.actions.presence import do_update_user_presence
|
||||||
from zerver.actions.users import do_change_user_role
|
from zerver.actions.users import do_change_user_role
|
||||||
from zerver.lib.actions import check_send_message, do_set_realm_property
|
from zerver.lib.actions import do_set_realm_property
|
||||||
from zerver.lib.event_schema import check_restart_event
|
from zerver.lib.event_schema import check_restart_event
|
||||||
from zerver.lib.events import fetch_initial_state_data
|
from zerver.lib.events import fetch_initial_state_data
|
||||||
from zerver.lib.exceptions import AccessDeniedError
|
from zerver.lib.exceptions import AccessDeniedError
|
||||||
|
|
|
@ -420,7 +420,7 @@ class PreviewTestCase(ZulipTestCase):
|
||||||
self, sender: UserProfile, queue_should_run: bool = True, relative_url: bool = False
|
self, sender: UserProfile, queue_should_run: bool = True, relative_url: bool = False
|
||||||
) -> Message:
|
) -> Message:
|
||||||
url = "http://test.org/"
|
url = "http://test.org/"
|
||||||
with mock_queue_publish("zerver.lib.actions.queue_json_publish") as patched:
|
with mock_queue_publish("zerver.actions.message_send.queue_json_publish") as patched:
|
||||||
msg_id = self.send_personal_message(
|
msg_id = self.send_personal_message(
|
||||||
sender,
|
sender,
|
||||||
self.example_user("cordelia"),
|
self.example_user("cordelia"),
|
||||||
|
@ -462,7 +462,7 @@ class PreviewTestCase(ZulipTestCase):
|
||||||
self.login_user(user)
|
self.login_user(user)
|
||||||
original_url = "http://test.org/"
|
original_url = "http://test.org/"
|
||||||
edited_url = "http://edited.org/"
|
edited_url = "http://edited.org/"
|
||||||
with mock_queue_publish("zerver.lib.actions.queue_json_publish") as patched:
|
with mock_queue_publish("zerver.actions.message_send.queue_json_publish") as patched:
|
||||||
msg_id = self.send_stream_message(
|
msg_id = self.send_stream_message(
|
||||||
user, "Denmark", topic_name="foo", content=original_url
|
user, "Denmark", topic_name="foo", content=original_url
|
||||||
)
|
)
|
||||||
|
@ -573,7 +573,7 @@ class PreviewTestCase(ZulipTestCase):
|
||||||
user = self.example_user("hamlet")
|
user = self.example_user("hamlet")
|
||||||
self.login_user(user)
|
self.login_user(user)
|
||||||
url = "http://test.org/"
|
url = "http://test.org/"
|
||||||
with mock_queue_publish("zerver.lib.actions.queue_json_publish") as patched:
|
with mock_queue_publish("zerver.actions.message_send.queue_json_publish") as patched:
|
||||||
msg_id = self.send_stream_message(user, "Denmark", topic_name="foo", content=url)
|
msg_id = self.send_stream_message(user, "Denmark", topic_name="foo", content=url)
|
||||||
patched.assert_called_once()
|
patched.assert_called_once()
|
||||||
queue = patched.call_args[0][0]
|
queue = patched.call_args[0][0]
|
||||||
|
@ -606,7 +606,7 @@ class PreviewTestCase(ZulipTestCase):
|
||||||
@override_settings(INLINE_URL_EMBED_PREVIEW=True)
|
@override_settings(INLINE_URL_EMBED_PREVIEW=True)
|
||||||
def test_inline_relative_url_embed_preview(self) -> None:
|
def test_inline_relative_url_embed_preview(self) -> None:
|
||||||
# Relative URLs should not be sent for URL preview.
|
# Relative URLs should not be sent for URL preview.
|
||||||
with mock_queue_publish("zerver.lib.actions.queue_json_publish") as patched:
|
with mock_queue_publish("zerver.actions.message_send.queue_json_publish") as patched:
|
||||||
self.send_personal_message(
|
self.send_personal_message(
|
||||||
self.example_user("prospero"),
|
self.example_user("prospero"),
|
||||||
self.example_user("cordelia"),
|
self.example_user("cordelia"),
|
||||||
|
@ -677,7 +677,7 @@ class PreviewTestCase(ZulipTestCase):
|
||||||
user = self.example_user("hamlet")
|
user = self.example_user("hamlet")
|
||||||
self.login_user(user)
|
self.login_user(user)
|
||||||
url = "http://test.org/audio.mp3"
|
url = "http://test.org/audio.mp3"
|
||||||
with mock_queue_publish("zerver.lib.actions.queue_json_publish") as patched:
|
with mock_queue_publish("zerver.actions.message_send.queue_json_publish") as patched:
|
||||||
msg_id = self.send_stream_message(user, "Denmark", topic_name="foo", content=url)
|
msg_id = self.send_stream_message(user, "Denmark", topic_name="foo", content=url)
|
||||||
patched.assert_called_once()
|
patched.assert_called_once()
|
||||||
queue = patched.call_args[0][0]
|
queue = patched.call_args[0][0]
|
||||||
|
@ -709,7 +709,7 @@ class PreviewTestCase(ZulipTestCase):
|
||||||
user = self.example_user("hamlet")
|
user = self.example_user("hamlet")
|
||||||
self.login_user(user)
|
self.login_user(user)
|
||||||
url = "http://test.org/foo.html"
|
url = "http://test.org/foo.html"
|
||||||
with mock_queue_publish("zerver.lib.actions.queue_json_publish") as patched:
|
with mock_queue_publish("zerver.actions.message_send.queue_json_publish") as patched:
|
||||||
msg_id = self.send_stream_message(user, "Denmark", topic_name="foo", content=url)
|
msg_id = self.send_stream_message(user, "Denmark", topic_name="foo", content=url)
|
||||||
patched.assert_called_once()
|
patched.assert_called_once()
|
||||||
queue = patched.call_args[0][0]
|
queue = patched.call_args[0][0]
|
||||||
|
@ -744,7 +744,7 @@ class PreviewTestCase(ZulipTestCase):
|
||||||
user = self.example_user("hamlet")
|
user = self.example_user("hamlet")
|
||||||
self.login_user(user)
|
self.login_user(user)
|
||||||
url = "http://test.org/foo.html"
|
url = "http://test.org/foo.html"
|
||||||
with mock_queue_publish("zerver.lib.actions.queue_json_publish") as patched:
|
with mock_queue_publish("zerver.actions.message_send.queue_json_publish") as patched:
|
||||||
msg_id = self.send_stream_message(user, "Denmark", topic_name="foo", content=url)
|
msg_id = self.send_stream_message(user, "Denmark", topic_name="foo", content=url)
|
||||||
patched.assert_called_once()
|
patched.assert_called_once()
|
||||||
queue = patched.call_args[0][0]
|
queue = patched.call_args[0][0]
|
||||||
|
@ -782,7 +782,7 @@ class PreviewTestCase(ZulipTestCase):
|
||||||
user = self.example_user("hamlet")
|
user = self.example_user("hamlet")
|
||||||
self.login_user(user)
|
self.login_user(user)
|
||||||
url = "http://test.org/foo.html"
|
url = "http://test.org/foo.html"
|
||||||
with mock_queue_publish("zerver.lib.actions.queue_json_publish") as patched:
|
with mock_queue_publish("zerver.actions.message_send.queue_json_publish") as patched:
|
||||||
msg_id = self.send_stream_message(user, "Denmark", topic_name="foo", content=url)
|
msg_id = self.send_stream_message(user, "Denmark", topic_name="foo", content=url)
|
||||||
patched.assert_called_once()
|
patched.assert_called_once()
|
||||||
queue = patched.call_args[0][0]
|
queue = patched.call_args[0][0]
|
||||||
|
@ -819,7 +819,7 @@ class PreviewTestCase(ZulipTestCase):
|
||||||
user = self.example_user("hamlet")
|
user = self.example_user("hamlet")
|
||||||
self.login_user(user)
|
self.login_user(user)
|
||||||
url = "http://test.org/"
|
url = "http://test.org/"
|
||||||
with mock_queue_publish("zerver.lib.actions.queue_json_publish") as patched:
|
with mock_queue_publish("zerver.actions.message_send.queue_json_publish") as patched:
|
||||||
msg_id = self.send_stream_message(user, "Denmark", topic_name="foo", content=url)
|
msg_id = self.send_stream_message(user, "Denmark", topic_name="foo", content=url)
|
||||||
patched.assert_called_once()
|
patched.assert_called_once()
|
||||||
queue = patched.call_args[0][0]
|
queue = patched.call_args[0][0]
|
||||||
|
@ -847,7 +847,7 @@ class PreviewTestCase(ZulipTestCase):
|
||||||
@override_settings(INLINE_URL_EMBED_PREVIEW=True)
|
@override_settings(INLINE_URL_EMBED_PREVIEW=True)
|
||||||
def test_valid_content_type_error_get_data(self) -> None:
|
def test_valid_content_type_error_get_data(self) -> None:
|
||||||
url = "http://test.org/"
|
url = "http://test.org/"
|
||||||
with mock_queue_publish("zerver.lib.actions.queue_json_publish"):
|
with mock_queue_publish("zerver.actions.message_send.queue_json_publish"):
|
||||||
msg_id = self.send_personal_message(
|
msg_id = self.send_personal_message(
|
||||||
self.example_user("hamlet"),
|
self.example_user("hamlet"),
|
||||||
self.example_user("cordelia"),
|
self.example_user("cordelia"),
|
||||||
|
@ -891,7 +891,7 @@ class PreviewTestCase(ZulipTestCase):
|
||||||
def test_invalid_url(self) -> None:
|
def test_invalid_url(self) -> None:
|
||||||
url = "http://test.org/"
|
url = "http://test.org/"
|
||||||
error_url = "http://test.org/x"
|
error_url = "http://test.org/x"
|
||||||
with mock_queue_publish("zerver.lib.actions.queue_json_publish"):
|
with mock_queue_publish("zerver.actions.message_send.queue_json_publish"):
|
||||||
msg_id = self.send_personal_message(
|
msg_id = self.send_personal_message(
|
||||||
self.example_user("hamlet"),
|
self.example_user("hamlet"),
|
||||||
self.example_user("cordelia"),
|
self.example_user("cordelia"),
|
||||||
|
@ -927,7 +927,7 @@ class PreviewTestCase(ZulipTestCase):
|
||||||
@override_settings(INLINE_URL_EMBED_PREVIEW=True)
|
@override_settings(INLINE_URL_EMBED_PREVIEW=True)
|
||||||
def test_safe_oembed_html_url(self) -> None:
|
def test_safe_oembed_html_url(self) -> None:
|
||||||
url = "http://test.org/"
|
url = "http://test.org/"
|
||||||
with mock_queue_publish("zerver.lib.actions.queue_json_publish"):
|
with mock_queue_publish("zerver.actions.message_send.queue_json_publish"):
|
||||||
msg_id = self.send_personal_message(
|
msg_id = self.send_personal_message(
|
||||||
self.example_user("hamlet"),
|
self.example_user("hamlet"),
|
||||||
self.example_user("cordelia"),
|
self.example_user("cordelia"),
|
||||||
|
@ -969,7 +969,7 @@ class PreviewTestCase(ZulipTestCase):
|
||||||
@override_settings(INLINE_URL_EMBED_PREVIEW=True)
|
@override_settings(INLINE_URL_EMBED_PREVIEW=True)
|
||||||
def test_youtube_url_title_replaces_url(self) -> None:
|
def test_youtube_url_title_replaces_url(self) -> None:
|
||||||
url = "https://www.youtube.com/watch?v=eSJTXC7Ixgg"
|
url = "https://www.youtube.com/watch?v=eSJTXC7Ixgg"
|
||||||
with mock_queue_publish("zerver.lib.actions.queue_json_publish"):
|
with mock_queue_publish("zerver.actions.message_send.queue_json_publish"):
|
||||||
msg_id = self.send_personal_message(
|
msg_id = self.send_personal_message(
|
||||||
self.example_user("hamlet"),
|
self.example_user("hamlet"),
|
||||||
self.example_user("cordelia"),
|
self.example_user("cordelia"),
|
||||||
|
@ -1005,7 +1005,7 @@ class PreviewTestCase(ZulipTestCase):
|
||||||
@override_settings(INLINE_URL_EMBED_PREVIEW=True)
|
@override_settings(INLINE_URL_EMBED_PREVIEW=True)
|
||||||
def test_custom_title_replaces_youtube_url_title(self) -> None:
|
def test_custom_title_replaces_youtube_url_title(self) -> None:
|
||||||
url = "[YouTube link](https://www.youtube.com/watch?v=eSJTXC7Ixgg)"
|
url = "[YouTube link](https://www.youtube.com/watch?v=eSJTXC7Ixgg)"
|
||||||
with mock_queue_publish("zerver.lib.actions.queue_json_publish"):
|
with mock_queue_publish("zerver.actions.message_send.queue_json_publish"):
|
||||||
msg_id = self.send_personal_message(
|
msg_id = self.send_personal_message(
|
||||||
self.example_user("hamlet"),
|
self.example_user("hamlet"),
|
||||||
self.example_user("cordelia"),
|
self.example_user("cordelia"),
|
||||||
|
|
|
@ -10,17 +10,11 @@ from django.http import HttpResponse
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
from django.utils.timezone import now as timezone_now
|
from django.utils.timezone import now as timezone_now
|
||||||
|
|
||||||
from zerver.actions.users import do_change_can_forge_sender, do_deactivate_user
|
from zerver.actions.message_send import (
|
||||||
from zerver.lib.actions import (
|
|
||||||
build_message_send_dict,
|
build_message_send_dict,
|
||||||
check_message,
|
check_message,
|
||||||
check_send_stream_message,
|
check_send_stream_message,
|
||||||
do_add_realm_domain,
|
|
||||||
do_change_stream_post_policy,
|
|
||||||
do_create_realm,
|
|
||||||
do_create_user,
|
|
||||||
do_send_messages,
|
do_send_messages,
|
||||||
do_set_realm_property,
|
|
||||||
extract_private_recipients,
|
extract_private_recipients,
|
||||||
extract_stream_indicator,
|
extract_stream_indicator,
|
||||||
internal_prep_private_message,
|
internal_prep_private_message,
|
||||||
|
@ -31,6 +25,14 @@ from zerver.lib.actions import (
|
||||||
internal_send_stream_message_by_name,
|
internal_send_stream_message_by_name,
|
||||||
send_rate_limited_pm_notification_to_bot_owner,
|
send_rate_limited_pm_notification_to_bot_owner,
|
||||||
)
|
)
|
||||||
|
from zerver.actions.users import do_change_can_forge_sender, do_deactivate_user
|
||||||
|
from zerver.lib.actions import (
|
||||||
|
do_add_realm_domain,
|
||||||
|
do_change_stream_post_policy,
|
||||||
|
do_create_realm,
|
||||||
|
do_create_user,
|
||||||
|
do_set_realm_property,
|
||||||
|
)
|
||||||
from zerver.lib.addressee import Addressee
|
from zerver.lib.addressee import Addressee
|
||||||
from zerver.lib.cache import cache_delete, get_stream_cache_key
|
from zerver.lib.cache import cache_delete, get_stream_cache_key
|
||||||
from zerver.lib.exceptions import JsonableError
|
from zerver.lib.exceptions import JsonableError
|
||||||
|
|
|
@ -3,7 +3,7 @@ from typing import List
|
||||||
|
|
||||||
from django.utils.timezone import now as timezone_now
|
from django.utils.timezone import now as timezone_now
|
||||||
|
|
||||||
from zerver.lib.actions import get_active_presence_idle_user_ids
|
from zerver.actions.message_send import get_active_presence_idle_user_ids
|
||||||
from zerver.lib.test_classes import ZulipTestCase
|
from zerver.lib.test_classes import ZulipTestCase
|
||||||
from zerver.models import (
|
from zerver.models import (
|
||||||
Message,
|
Message,
|
||||||
|
|
|
@ -4,7 +4,7 @@ from unittest import mock
|
||||||
from django.db import IntegrityError
|
from django.db import IntegrityError
|
||||||
from django.utils.timezone import now as timezone_now
|
from django.utils.timezone import now as timezone_now
|
||||||
|
|
||||||
from zerver.lib.actions import create_mirror_user_if_needed
|
from zerver.actions.message_send import create_mirror_user_if_needed
|
||||||
from zerver.lib.create_user import create_user_profile
|
from zerver.lib.create_user import create_user_profile
|
||||||
from zerver.lib.test_classes import ZulipTestCase
|
from zerver.lib.test_classes import ZulipTestCase
|
||||||
from zerver.lib.test_helpers import reset_emails_in_zulip_realm
|
from zerver.lib.test_helpers import reset_emails_in_zulip_realm
|
||||||
|
@ -172,7 +172,7 @@ class MirroredMessageUsersTest(ZulipTestCase):
|
||||||
create_user_profile(**kwargs).save()
|
create_user_profile(**kwargs).save()
|
||||||
raise IntegrityError()
|
raise IntegrityError()
|
||||||
|
|
||||||
with mock.patch("zerver.lib.actions.create_user", side_effect=create_user) as m:
|
with mock.patch("zerver.actions.message_send.create_user", side_effect=create_user) as m:
|
||||||
mirror_fred_user = create_mirror_user_if_needed(
|
mirror_fred_user = create_mirror_user_if_needed(
|
||||||
realm,
|
realm,
|
||||||
email,
|
email,
|
||||||
|
|
|
@ -254,7 +254,7 @@ class UserPresenceTests(ZulipTestCase):
|
||||||
|
|
||||||
def test_filter_presence_idle_user_ids(self) -> None:
|
def test_filter_presence_idle_user_ids(self) -> None:
|
||||||
user_profile = self.example_user("hamlet")
|
user_profile = self.example_user("hamlet")
|
||||||
from zerver.lib.actions import filter_presence_idle_user_ids
|
from zerver.actions.message_send import filter_presence_idle_user_ids
|
||||||
|
|
||||||
self.login("hamlet")
|
self.login("hamlet")
|
||||||
|
|
||||||
|
|
|
@ -5,13 +5,9 @@ from unittest import mock
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.timezone import now as timezone_now
|
from django.utils.timezone import now as timezone_now
|
||||||
|
|
||||||
|
from zerver.actions.message_send import internal_send_private_message
|
||||||
from zerver.actions.submessage import do_add_submessage
|
from zerver.actions.submessage import do_add_submessage
|
||||||
from zerver.lib.actions import (
|
from zerver.lib.actions import do_create_realm, do_delete_messages, do_set_realm_property
|
||||||
do_create_realm,
|
|
||||||
do_delete_messages,
|
|
||||||
do_set_realm_property,
|
|
||||||
internal_send_private_message,
|
|
||||||
)
|
|
||||||
from zerver.lib.retention import (
|
from zerver.lib.retention import (
|
||||||
archive_messages,
|
archive_messages,
|
||||||
clean_archived_data,
|
clean_archived_data,
|
||||||
|
|
|
@ -6,7 +6,8 @@ import orjson
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
|
|
||||||
from zerver.lib.actions import do_create_user, get_service_bot_events
|
from zerver.actions.message_send import get_service_bot_events
|
||||||
|
from zerver.lib.actions import do_create_user
|
||||||
from zerver.lib.bot_config import ConfigError, load_bot_config_template, set_bot_config
|
from zerver.lib.bot_config import ConfigError, load_bot_config_template, set_bot_config
|
||||||
from zerver.lib.bot_lib import EmbeddedBotEmptyRecipientsList, EmbeddedBotHandler, StateHandler
|
from zerver.lib.bot_lib import EmbeddedBotEmptyRecipientsList, EmbeddedBotHandler, StateHandler
|
||||||
from zerver.lib.bot_storage import StateError
|
from zerver.lib.bot_storage import StateError
|
||||||
|
@ -452,7 +453,7 @@ class TestServiceBotEventTriggers(ZulipTestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
@for_all_bot_types
|
@for_all_bot_types
|
||||||
@patch_queue_publish("zerver.lib.actions.queue_json_publish")
|
@patch_queue_publish("zerver.actions.message_send.queue_json_publish")
|
||||||
def test_trigger_on_stream_mention_from_user(self, mock_queue_json_publish: mock.Mock) -> None:
|
def test_trigger_on_stream_mention_from_user(self, mock_queue_json_publish: mock.Mock) -> None:
|
||||||
content = "@**FooBot** foo bar!!!"
|
content = "@**FooBot** foo bar!!!"
|
||||||
recipient = "Denmark"
|
recipient = "Denmark"
|
||||||
|
@ -478,7 +479,7 @@ class TestServiceBotEventTriggers(ZulipTestCase):
|
||||||
self.send_stream_message(self.user_profile, "Denmark", content)
|
self.send_stream_message(self.user_profile, "Denmark", content)
|
||||||
self.assertTrue(mock_queue_json_publish.called)
|
self.assertTrue(mock_queue_json_publish.called)
|
||||||
|
|
||||||
@patch_queue_publish("zerver.lib.actions.queue_json_publish")
|
@patch_queue_publish("zerver.actions.message_send.queue_json_publish")
|
||||||
def test_no_trigger_on_stream_message_without_mention(
|
def test_no_trigger_on_stream_message_without_mention(
|
||||||
self, mock_queue_json_publish: mock.Mock
|
self, mock_queue_json_publish: mock.Mock
|
||||||
) -> None:
|
) -> None:
|
||||||
|
@ -487,7 +488,7 @@ class TestServiceBotEventTriggers(ZulipTestCase):
|
||||||
self.assertFalse(mock_queue_json_publish.called)
|
self.assertFalse(mock_queue_json_publish.called)
|
||||||
|
|
||||||
@for_all_bot_types
|
@for_all_bot_types
|
||||||
@patch_queue_publish("zerver.lib.actions.queue_json_publish")
|
@patch_queue_publish("zerver.actions.message_send.queue_json_publish")
|
||||||
def test_no_trigger_on_stream_mention_from_bot(
|
def test_no_trigger_on_stream_mention_from_bot(
|
||||||
self, mock_queue_json_publish: mock.Mock
|
self, mock_queue_json_publish: mock.Mock
|
||||||
) -> None:
|
) -> None:
|
||||||
|
@ -495,7 +496,7 @@ class TestServiceBotEventTriggers(ZulipTestCase):
|
||||||
self.assertFalse(mock_queue_json_publish.called)
|
self.assertFalse(mock_queue_json_publish.called)
|
||||||
|
|
||||||
@for_all_bot_types
|
@for_all_bot_types
|
||||||
@patch_queue_publish("zerver.lib.actions.queue_json_publish")
|
@patch_queue_publish("zerver.actions.message_send.queue_json_publish")
|
||||||
def test_trigger_on_personal_message_from_user(
|
def test_trigger_on_personal_message_from_user(
|
||||||
self, mock_queue_json_publish: mock.Mock
|
self, mock_queue_json_publish: mock.Mock
|
||||||
) -> None:
|
) -> None:
|
||||||
|
@ -525,7 +526,7 @@ class TestServiceBotEventTriggers(ZulipTestCase):
|
||||||
self.assertTrue(mock_queue_json_publish.called)
|
self.assertTrue(mock_queue_json_publish.called)
|
||||||
|
|
||||||
@for_all_bot_types
|
@for_all_bot_types
|
||||||
@patch_queue_publish("zerver.lib.actions.queue_json_publish")
|
@patch_queue_publish("zerver.actions.message_send.queue_json_publish")
|
||||||
def test_no_trigger_on_personal_message_from_bot(
|
def test_no_trigger_on_personal_message_from_bot(
|
||||||
self, mock_queue_json_publish: mock.Mock
|
self, mock_queue_json_publish: mock.Mock
|
||||||
) -> None:
|
) -> None:
|
||||||
|
@ -535,7 +536,7 @@ class TestServiceBotEventTriggers(ZulipTestCase):
|
||||||
self.assertFalse(mock_queue_json_publish.called)
|
self.assertFalse(mock_queue_json_publish.called)
|
||||||
|
|
||||||
@for_all_bot_types
|
@for_all_bot_types
|
||||||
@patch_queue_publish("zerver.lib.actions.queue_json_publish")
|
@patch_queue_publish("zerver.actions.message_send.queue_json_publish")
|
||||||
def test_trigger_on_huddle_message_from_user(self, mock_queue_json_publish: mock.Mock) -> None:
|
def test_trigger_on_huddle_message_from_user(self, mock_queue_json_publish: mock.Mock) -> None:
|
||||||
self.second_bot_profile.bot_type = self.bot_profile.bot_type
|
self.second_bot_profile.bot_type = self.bot_profile.bot_type
|
||||||
self.second_bot_profile.save()
|
self.second_bot_profile.save()
|
||||||
|
@ -563,7 +564,7 @@ class TestServiceBotEventTriggers(ZulipTestCase):
|
||||||
self.assertEqual(mock_queue_json_publish.call_count, 2)
|
self.assertEqual(mock_queue_json_publish.call_count, 2)
|
||||||
|
|
||||||
@for_all_bot_types
|
@for_all_bot_types
|
||||||
@patch_queue_publish("zerver.lib.actions.queue_json_publish")
|
@patch_queue_publish("zerver.actions.message_send.queue_json_publish")
|
||||||
def test_no_trigger_on_huddle_message_from_bot(
|
def test_no_trigger_on_huddle_message_from_bot(
|
||||||
self, mock_queue_json_publish: mock.Mock
|
self, mock_queue_json_publish: mock.Mock
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from zerver.lib.actions import internal_send_private_message
|
from zerver.actions.message_send import internal_send_private_message
|
||||||
from zerver.lib.test_classes import ZulipTestCase
|
from zerver.lib.test_classes import ZulipTestCase
|
||||||
from zerver.lib.test_helpers import message_stream_count, most_recent_message
|
from zerver.lib.test_helpers import message_stream_count, most_recent_message
|
||||||
from zerver.models import UserProfile, get_system_bot
|
from zerver.models import UserProfile, get_system_bot
|
||||||
|
|
|
@ -19,16 +19,12 @@ from django_sendfile.utils import _get_sendfile
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
import zerver.lib.upload
|
import zerver.lib.upload
|
||||||
|
from zerver.actions.message_send import internal_send_private_message
|
||||||
from zerver.actions.realm_icon import do_change_icon_source
|
from zerver.actions.realm_icon import do_change_icon_source
|
||||||
from zerver.actions.realm_logo import do_change_logo_source
|
from zerver.actions.realm_logo import do_change_logo_source
|
||||||
from zerver.actions.uploads import do_delete_old_unclaimed_attachments
|
from zerver.actions.uploads import do_delete_old_unclaimed_attachments
|
||||||
from zerver.actions.user_settings import do_delete_avatar_image
|
from zerver.actions.user_settings import do_delete_avatar_image
|
||||||
from zerver.lib.actions import (
|
from zerver.lib.actions import do_change_realm_plan_type, do_create_realm, do_set_realm_property
|
||||||
do_change_realm_plan_type,
|
|
||||||
do_create_realm,
|
|
||||||
do_set_realm_property,
|
|
||||||
internal_send_private_message,
|
|
||||||
)
|
|
||||||
from zerver.lib.avatar import avatar_url, get_avatar_field
|
from zerver.lib.avatar import avatar_url, get_avatar_field
|
||||||
from zerver.lib.avatar_hash import user_avatar_path
|
from zerver.lib.avatar_hash import user_avatar_path
|
||||||
from zerver.lib.cache import cache_get, get_realm_used_upload_space_cache_key
|
from zerver.lib.cache import cache_get, get_realm_used_upload_space_cache_key
|
||||||
|
|
|
@ -13,6 +13,7 @@ from django.utils.timezone import now as timezone_now
|
||||||
|
|
||||||
from confirmation.models import Confirmation
|
from confirmation.models import Confirmation
|
||||||
from zerver.actions.invites import do_create_multiuse_invite_link, do_invite_users
|
from zerver.actions.invites import do_create_multiuse_invite_link, do_invite_users
|
||||||
|
from zerver.actions.message_send import get_recipient_info
|
||||||
from zerver.actions.users import (
|
from zerver.actions.users import (
|
||||||
change_user_is_active,
|
change_user_is_active,
|
||||||
do_change_can_create_users,
|
do_change_can_create_users,
|
||||||
|
@ -25,7 +26,6 @@ from zerver.lib.actions import (
|
||||||
do_mute_user,
|
do_mute_user,
|
||||||
do_reactivate_user,
|
do_reactivate_user,
|
||||||
do_set_realm_property,
|
do_set_realm_property,
|
||||||
get_recipient_info,
|
|
||||||
)
|
)
|
||||||
from zerver.lib.avatar import avatar_url, get_gravatar_url
|
from zerver.lib.avatar import avatar_url, get_gravatar_url
|
||||||
from zerver.lib.bulk_create import create_users
|
from zerver.lib.bulk_create import create_users
|
||||||
|
|
|
@ -8,7 +8,7 @@ from django.http import HttpRequest, HttpResponse
|
||||||
from django.utils.timezone import now as timezone_now
|
from django.utils.timezone import now as timezone_now
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
from zerver.lib.actions import (
|
from zerver.actions.message_send import (
|
||||||
check_schedule_message,
|
check_schedule_message,
|
||||||
check_send_message,
|
check_send_message,
|
||||||
compute_irc_user_fullname,
|
compute_irc_user_fullname,
|
||||||
|
|
|
@ -21,6 +21,11 @@ from zerver.actions.default_streams import (
|
||||||
do_remove_streams_from_default_stream_group,
|
do_remove_streams_from_default_stream_group,
|
||||||
get_default_streams_for_realm,
|
get_default_streams_for_realm,
|
||||||
)
|
)
|
||||||
|
from zerver.actions.message_send import (
|
||||||
|
do_send_messages,
|
||||||
|
internal_prep_private_message,
|
||||||
|
internal_prep_stream_message,
|
||||||
|
)
|
||||||
from zerver.context_processors import get_valid_realm_from_request
|
from zerver.context_processors import get_valid_realm_from_request
|
||||||
from zerver.decorator import (
|
from zerver.decorator import (
|
||||||
authenticated_json_view,
|
authenticated_json_view,
|
||||||
|
@ -39,10 +44,7 @@ from zerver.lib.actions import (
|
||||||
do_deactivate_stream,
|
do_deactivate_stream,
|
||||||
do_delete_messages,
|
do_delete_messages,
|
||||||
do_rename_stream,
|
do_rename_stream,
|
||||||
do_send_messages,
|
|
||||||
get_subscriber_ids,
|
get_subscriber_ids,
|
||||||
internal_prep_private_message,
|
|
||||||
internal_prep_stream_message,
|
|
||||||
)
|
)
|
||||||
from zerver.lib.exceptions import (
|
from zerver.lib.exceptions import (
|
||||||
ErrorCode,
|
ErrorCode,
|
||||||
|
|
|
@ -3,8 +3,8 @@ from typing import Any, Dict
|
||||||
|
|
||||||
from django.http import HttpRequest, HttpResponse
|
from django.http import HttpRequest, HttpResponse
|
||||||
|
|
||||||
|
from zerver.actions.message_send import check_send_private_message
|
||||||
from zerver.decorator import webhook_view
|
from zerver.decorator import webhook_view
|
||||||
from zerver.lib.actions import check_send_private_message
|
|
||||||
from zerver.lib.request import REQ, RequestNotes, has_request_variables
|
from zerver.lib.request import REQ, RequestNotes, has_request_variables
|
||||||
from zerver.lib.response import json_success
|
from zerver.lib.response import json_success
|
||||||
from zerver.models import UserProfile, get_user
|
from zerver.models import UserProfile, get_user
|
||||||
|
|
|
@ -4,8 +4,8 @@ import dateutil.parser
|
||||||
from django.http import HttpRequest, HttpResponse
|
from django.http import HttpRequest, HttpResponse
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
|
from zerver.actions.message_send import send_rate_limited_pm_notification_to_bot_owner
|
||||||
from zerver.decorator import webhook_view
|
from zerver.decorator import webhook_view
|
||||||
from zerver.lib.actions import send_rate_limited_pm_notification_to_bot_owner
|
|
||||||
from zerver.lib.exceptions import JsonableError
|
from zerver.lib.exceptions import JsonableError
|
||||||
from zerver.lib.request import REQ, has_request_variables
|
from zerver.lib.request import REQ, has_request_variables
|
||||||
from zerver.lib.response import json_success
|
from zerver.lib.response import json_success
|
||||||
|
|
|
@ -2,8 +2,8 @@ from django.http import HttpRequest
|
||||||
from django.http.response import HttpResponse
|
from django.http.response import HttpResponse
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
|
from zerver.actions.message_send import check_send_stream_message
|
||||||
from zerver.decorator import webhook_view
|
from zerver.decorator import webhook_view
|
||||||
from zerver.lib.actions import check_send_stream_message
|
|
||||||
from zerver.lib.exceptions import JsonableError
|
from zerver.lib.exceptions import JsonableError
|
||||||
from zerver.lib.request import REQ, RequestNotes, has_request_variables
|
from zerver.lib.request import REQ, RequestNotes, has_request_variables
|
||||||
from zerver.lib.response import json_success
|
from zerver.lib.response import json_success
|
||||||
|
|
|
@ -5,11 +5,11 @@ from typing import Any, Dict, List, Optional
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.http import HttpRequest, HttpResponse
|
from django.http import HttpRequest, HttpResponse
|
||||||
|
|
||||||
from zerver.decorator import webhook_view
|
from zerver.actions.message_send import (
|
||||||
from zerver.lib.actions import (
|
|
||||||
check_send_private_message,
|
check_send_private_message,
|
||||||
send_rate_limited_pm_notification_to_bot_owner,
|
send_rate_limited_pm_notification_to_bot_owner,
|
||||||
)
|
)
|
||||||
|
from zerver.decorator import webhook_view
|
||||||
from zerver.lib.request import REQ, RequestNotes, has_request_variables
|
from zerver.lib.request import REQ, RequestNotes, has_request_variables
|
||||||
from zerver.lib.response import json_success
|
from zerver.lib.response import json_success
|
||||||
from zerver.lib.send_email import FromAddress
|
from zerver.lib.send_email import FromAddress
|
||||||
|
|
|
@ -3,8 +3,8 @@ from typing import Any, Dict
|
||||||
from django.http import HttpRequest, HttpResponse
|
from django.http import HttpRequest, HttpResponse
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
|
from zerver.actions.message_send import send_rate_limited_pm_notification_to_bot_owner
|
||||||
from zerver.decorator import webhook_view
|
from zerver.decorator import webhook_view
|
||||||
from zerver.lib.actions import send_rate_limited_pm_notification_to_bot_owner
|
|
||||||
from zerver.lib.exceptions import JsonableError
|
from zerver.lib.exceptions import JsonableError
|
||||||
from zerver.lib.request import REQ, has_request_variables
|
from zerver.lib.request import REQ, has_request_variables
|
||||||
from zerver.lib.response import json_success
|
from zerver.lib.response import json_success
|
||||||
|
|
|
@ -3,8 +3,8 @@ from typing import Optional
|
||||||
|
|
||||||
from django.http import HttpRequest, HttpResponse
|
from django.http import HttpRequest, HttpResponse
|
||||||
|
|
||||||
|
from zerver.actions.message_send import check_send_private_message
|
||||||
from zerver.decorator import webhook_view
|
from zerver.decorator import webhook_view
|
||||||
from zerver.lib.actions import check_send_private_message
|
|
||||||
from zerver.lib.request import REQ, RequestNotes, has_request_variables
|
from zerver.lib.request import REQ, RequestNotes, has_request_variables
|
||||||
from zerver.lib.response import json_success
|
from zerver.lib.response import json_success
|
||||||
from zerver.models import UserProfile, get_user
|
from zerver.models import UserProfile, get_user
|
||||||
|
|
|
@ -3,8 +3,8 @@ from typing import Any, Dict
|
||||||
from django.http import HttpRequest, HttpResponse
|
from django.http import HttpRequest, HttpResponse
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
|
from zerver.actions.message_send import send_rate_limited_pm_notification_to_bot_owner
|
||||||
from zerver.decorator import webhook_view
|
from zerver.decorator import webhook_view
|
||||||
from zerver.lib.actions import send_rate_limited_pm_notification_to_bot_owner
|
|
||||||
from zerver.lib.exceptions import JsonableError
|
from zerver.lib.exceptions import JsonableError
|
||||||
from zerver.lib.request import REQ, has_request_variables
|
from zerver.lib.request import REQ, has_request_variables
|
||||||
from zerver.lib.response import json_success
|
from zerver.lib.response import json_success
|
||||||
|
|
|
@ -47,16 +47,12 @@ from sentry_sdk import add_breadcrumb, configure_scope
|
||||||
from zulip_bots.lib import extract_query_without_mention
|
from zulip_bots.lib import extract_query_without_mention
|
||||||
|
|
||||||
from zerver.actions.invites import do_send_confirmation_email
|
from zerver.actions.invites import do_send_confirmation_email
|
||||||
|
from zerver.actions.message_send import internal_send_private_message, render_incoming_message
|
||||||
from zerver.actions.presence import do_update_user_presence
|
from zerver.actions.presence import do_update_user_presence
|
||||||
from zerver.actions.realm_export import notify_realm_export
|
from zerver.actions.realm_export import notify_realm_export
|
||||||
from zerver.actions.user_activity import do_update_user_activity, do_update_user_activity_interval
|
from zerver.actions.user_activity import do_update_user_activity, do_update_user_activity_interval
|
||||||
from zerver.context_processors import common_context
|
from zerver.context_processors import common_context
|
||||||
from zerver.lib.actions import (
|
from zerver.lib.actions import do_mark_stream_messages_as_read, do_update_embedded_data
|
||||||
do_mark_stream_messages_as_read,
|
|
||||||
do_update_embedded_data,
|
|
||||||
internal_send_private_message,
|
|
||||||
render_incoming_message,
|
|
||||||
)
|
|
||||||
from zerver.lib.bot_lib import EmbeddedBotHandler, EmbeddedBotQuitException, get_bot_handler
|
from zerver.lib.bot_lib import EmbeddedBotHandler, EmbeddedBotQuitException, get_bot_handler
|
||||||
from zerver.lib.context_managers import lockfile
|
from zerver.lib.context_managers import lockfile
|
||||||
from zerver.lib.db import reset_queries
|
from zerver.lib.db import reset_queries
|
||||||
|
|
|
@ -2,14 +2,9 @@ from typing import Any, Dict, List
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
|
from zerver.actions.message_send import do_send_messages, internal_prep_stream_message
|
||||||
from zerver.actions.user_settings import do_change_avatar_fields
|
from zerver.actions.user_settings import do_change_avatar_fields
|
||||||
from zerver.lib.actions import (
|
from zerver.lib.actions import bulk_add_subscriptions, do_add_reaction, do_create_user
|
||||||
bulk_add_subscriptions,
|
|
||||||
do_add_reaction,
|
|
||||||
do_create_user,
|
|
||||||
do_send_messages,
|
|
||||||
internal_prep_stream_message,
|
|
||||||
)
|
|
||||||
from zerver.lib.emoji import emoji_name_to_emoji_code
|
from zerver.lib.emoji import emoji_name_to_emoji_code
|
||||||
from zerver.lib.streams import ensure_stream
|
from zerver.lib.streams import ensure_stream
|
||||||
from zerver.lib.upload import upload_avatar_image
|
from zerver.lib.upload import upload_avatar_image
|
||||||
|
|
|
@ -23,9 +23,10 @@ from zerver.actions.custom_profile_fields import (
|
||||||
try_add_realm_custom_profile_field,
|
try_add_realm_custom_profile_field,
|
||||||
try_add_realm_default_custom_profile_field,
|
try_add_realm_default_custom_profile_field,
|
||||||
)
|
)
|
||||||
|
from zerver.actions.message_send import build_message_send_dict, do_send_messages
|
||||||
from zerver.actions.realm_emoji import check_add_realm_emoji
|
from zerver.actions.realm_emoji import check_add_realm_emoji
|
||||||
from zerver.actions.users import do_change_user_role
|
from zerver.actions.users import do_change_user_role
|
||||||
from zerver.lib.actions import build_message_send_dict, do_create_realm, do_send_messages
|
from zerver.lib.actions import do_create_realm
|
||||||
from zerver.lib.bulk_create import bulk_create_streams
|
from zerver.lib.bulk_create import bulk_create_streams
|
||||||
from zerver.lib.cache import cache_set
|
from zerver.lib.cache import cache_set
|
||||||
from zerver.lib.generate_test_data import create_test_data, generate_topics
|
from zerver.lib.generate_test_data import create_test_data, generate_topics
|
||||||
|
|
|
@ -469,7 +469,7 @@ OUTGOING_WEBHOOK_TIMEOUT_SECONDS = 10
|
||||||
|
|
||||||
# Maximum length of message content allowed.
|
# Maximum length of message content allowed.
|
||||||
# Any message content exceeding this limit will be truncated.
|
# Any message content exceeding this limit will be truncated.
|
||||||
# See: `_internal_prep_message` function in zerver/lib/actions.py.
|
# See: `_internal_prep_message` function in zerver/actions/message_send.py.
|
||||||
MAX_MESSAGE_LENGTH = 10000
|
MAX_MESSAGE_LENGTH = 10000
|
||||||
|
|
||||||
# The maximum number of drafts to send in the response to /register.
|
# The maximum number of drafts to send in the response to /register.
|
||||||
|
|
Loading…
Reference in New Issue