queue_processor: Add langauge to the events added to invites queue.

This is a prep commit for adding realm-level default for various
user settings. We add the language, in which the invite email will
be sent, to the dict added to queue itself to avoid making queries
in a loop when sending multiple emails from queue.

We also handle the case for old events in the queue.
This commit is contained in:
sahil839
2021-06-22 16:59:40 +05:30
committed by Tim Abbott
parent 6a191a7bf0
commit 37bf160298
3 changed files with 22 additions and 6 deletions

View File

@@ -6652,7 +6652,9 @@ def filter_presence_idle_user_ids(user_ids: Set[int]) -> List[int]:
return sorted(idle_user_ids)
def do_send_confirmation_email(invitee: PreregistrationUser, referrer: UserProfile) -> str:
def do_send_confirmation_email(
invitee: PreregistrationUser, referrer: UserProfile, email_language: str
) -> str:
"""
Send the confirmation/welcome e-mail to an invited user.
"""
@@ -6667,7 +6669,7 @@ def do_send_confirmation_email(invitee: PreregistrationUser, referrer: UserProfi
"zerver/emails/invitation",
to_emails=[invitee.email],
from_address=FromAddress.tokenized_no_reply_address(),
language=referrer.realm.default_language,
language=email_language,
context=context,
realm=referrer.realm,
)
@@ -6829,7 +6831,11 @@ def do_invite_users(
stream_ids = [stream.id for stream in streams]
prereg_user.streams.set(stream_ids)
event = {"prereg_id": prereg_user.id, "referrer_id": user_profile.id}
event = {
"prereg_id": prereg_user.id,
"referrer_id": user_profile.id,
"email_language": user_profile.realm.default_language,
}
queue_json_publish("invites", event)
if skipped:
@@ -6951,6 +6957,7 @@ def do_resend_user_invite_email(prereg_user: PreregistrationUser) -> int:
event = {
"prereg_id": prereg_user.id,
"referrer_id": prereg_user.referred_by.id,
"email_language": prereg_user.referred_by.realm.default_language,
}
queue_json_publish("invites", event)

View File

@@ -442,6 +442,11 @@ class WorkerTest(ZulipTestCase):
)
data: List[Dict[str, Any]] = [
dict(prereg_id=prereg_alice.id, referrer_id=inviter.id),
dict(
prereg_id=prereg_alice.id,
referrer_id=inviter.id,
email_language="en",
),
# Nonexistent prereg_id, as if the invitation was deleted
dict(prereg_id=-1, referrer_id=inviter.id),
]
@@ -455,7 +460,7 @@ class WorkerTest(ZulipTestCase):
"zerver.worker.queue_processors.send_future_email"
) as send_mock:
worker.start()
self.assertEqual(send_mock.call_count, 1)
self.assertEqual(send_mock.call_count, 2)
def test_error_handling(self) -> None:
processed = []

View File

@@ -424,7 +424,11 @@ class ConfirmationEmailWorker(QueueProcessingWorker):
logger.info(
"Sending invitation for realm %s to %s", referrer.realm.string_id, invitee.email
)
activate_url = do_send_confirmation_email(invitee, referrer)
if "email_language" in data:
email_language = data["email_language"]
else:
email_language = referrer.realm.default_language
activate_url = do_send_confirmation_email(invitee, referrer, email_language)
# queue invitation reminder
if settings.INVITATION_LINK_VALIDITY_DAYS >= 4:
@@ -440,7 +444,7 @@ class ConfirmationEmailWorker(QueueProcessingWorker):
referrer.realm,
to_emails=[invitee.email],
from_address=FromAddress.tokenized_no_reply_placeholder,
language=referrer.realm.default_language,
language=email_language,
context=context,
delay=datetime.timedelta(days=settings.INVITATION_LINK_VALIDITY_DAYS - 2),
)