mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	notifications: Move send_future_email to zerver/lib/send_email.py.
This commit is contained in:
		@@ -10,8 +10,9 @@ from django.db.models import Q, QuerySet
 | 
				
			|||||||
from django.template import loader
 | 
					from django.template import loader
 | 
				
			||||||
from django.conf import settings
 | 
					from django.conf import settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from zerver.lib.send_email import send_future_email
 | 
				
			||||||
from zerver.lib.notifications import build_message_list, hash_util_encode, \
 | 
					from zerver.lib.notifications import build_message_list, hash_util_encode, \
 | 
				
			||||||
    send_future_email, one_click_unsubscribe_link
 | 
					    one_click_unsubscribe_link
 | 
				
			||||||
from zerver.models import UserProfile, UserMessage, Recipient, Stream, \
 | 
					from zerver.models import UserProfile, UserMessage, Recipient, Stream, \
 | 
				
			||||||
    Subscription, get_active_streams
 | 
					    Subscription, get_active_streams
 | 
				
			||||||
from zerver.context_processors import common_context
 | 
					from zerver.context_processors import common_context
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,7 @@ from django.core.mail import EmailMultiAlternatives
 | 
				
			|||||||
from django.template import loader
 | 
					from django.template import loader
 | 
				
			||||||
from django.utils.timezone import now as timezone_now
 | 
					from django.utils.timezone import now as timezone_now
 | 
				
			||||||
from zerver.decorator import statsd_increment
 | 
					from zerver.decorator import statsd_increment
 | 
				
			||||||
 | 
					from zerver.lib.send_email import send_future_email
 | 
				
			||||||
from zerver.lib.queue import queue_json_publish
 | 
					from zerver.lib.queue import queue_json_publish
 | 
				
			||||||
from zerver.models import (
 | 
					from zerver.models import (
 | 
				
			||||||
    Recipient,
 | 
					    Recipient,
 | 
				
			||||||
@@ -378,26 +379,6 @@ def log_digest_event(msg):
 | 
				
			|||||||
    logging.basicConfig(filename=settings.DIGEST_LOG_PATH, level=logging.INFO)
 | 
					    logging.basicConfig(filename=settings.DIGEST_LOG_PATH, level=logging.INFO)
 | 
				
			||||||
    logging.info(msg)
 | 
					    logging.info(msg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def send_future_email(template_prefix, recipients, from_email=None, context={},
 | 
					 | 
				
			||||||
                      delay=datetime.timedelta(0), tags=[]):
 | 
					 | 
				
			||||||
    # type: (str, List[Dict[str, Any]], Optional[Text], Dict[str, Any], datetime.timedelta, Iterable[Text]) -> None
 | 
					 | 
				
			||||||
    subject = loader.render_to_string(template_prefix + '.subject', context).strip()
 | 
					 | 
				
			||||||
    email_text = loader.render_to_string(template_prefix + '.txt', context)
 | 
					 | 
				
			||||||
    email_html = loader.render_to_string(template_prefix + '.html', context)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if from_email is None:
 | 
					 | 
				
			||||||
        from_email = settings.NOREPLY_EMAIL_ADDRESS
 | 
					 | 
				
			||||||
    for recipient in recipients:
 | 
					 | 
				
			||||||
        email_fields = {'email_html': email_html,
 | 
					 | 
				
			||||||
                        'email_subject': subject,
 | 
					 | 
				
			||||||
                        'email_text': email_text,
 | 
					 | 
				
			||||||
                        'recipient_email': recipient.get('email'),
 | 
					 | 
				
			||||||
                        'recipient_name': recipient.get('name'),
 | 
					 | 
				
			||||||
                        'from_email': from_email}
 | 
					 | 
				
			||||||
        ScheduledJob.objects.create(type=ScheduledJob.EMAIL, filter_string=recipient.get('email'),
 | 
					 | 
				
			||||||
                                    data=ujson.dumps(email_fields),
 | 
					 | 
				
			||||||
                                    scheduled_timestamp=timezone_now() + delay)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def enqueue_welcome_emails(email, name):
 | 
					def enqueue_welcome_emails(email, name):
 | 
				
			||||||
    # type: (Text, Text) -> None
 | 
					    # type: (Text, Text) -> None
 | 
				
			||||||
    from zerver.context_processors import common_context
 | 
					    from zerver.context_processors import common_context
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,13 @@
 | 
				
			|||||||
from django.conf import settings
 | 
					from django.conf import settings
 | 
				
			||||||
from django.core.mail import send_mail
 | 
					from django.core.mail import send_mail
 | 
				
			||||||
from django.template import loader, TemplateDoesNotExist
 | 
					from django.template import loader, TemplateDoesNotExist
 | 
				
			||||||
from zerver.models import UserProfile
 | 
					from django.utils.timezone import now as timezone_now
 | 
				
			||||||
 | 
					from zerver.models import UserProfile, ScheduledJob, get_user_profile_by_email
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from typing import Dict, List, Optional, Text
 | 
					import datetime
 | 
				
			||||||
 | 
					import ujson
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from typing import Any, Dict, Iterable, List, Optional, Text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def display_email(user):
 | 
					def display_email(user):
 | 
				
			||||||
    # type: (UserProfile) -> Text
 | 
					    # type: (UserProfile) -> Text
 | 
				
			||||||
@@ -27,3 +31,23 @@ def send_email(template_prefix, to_email, from_email=None, context={}):
 | 
				
			|||||||
def send_email_to_user(template_prefix, user, from_email=None, context={}):
 | 
					def send_email_to_user(template_prefix, user, from_email=None, context={}):
 | 
				
			||||||
    # type: (str, UserProfile, Optional[Text], Dict[str, Text]) -> bool
 | 
					    # type: (str, UserProfile, Optional[Text], Dict[str, Text]) -> bool
 | 
				
			||||||
    return send_email(template_prefix, display_email(user), from_email=from_email, context=context)
 | 
					    return send_email(template_prefix, display_email(user), from_email=from_email, context=context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def send_future_email(template_prefix, recipients, from_email=None, context={},
 | 
				
			||||||
 | 
					                      delay=datetime.timedelta(0), tags=[]):
 | 
				
			||||||
 | 
					    # type: (str, List[Dict[str, Any]], Optional[Text], Dict[str, Any], datetime.timedelta, Iterable[Text]) -> None
 | 
				
			||||||
 | 
					    subject = loader.render_to_string(template_prefix + '.subject', context).strip()
 | 
				
			||||||
 | 
					    email_text = loader.render_to_string(template_prefix + '.txt', context)
 | 
				
			||||||
 | 
					    email_html = loader.render_to_string(template_prefix + '.html', context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if from_email is None:
 | 
				
			||||||
 | 
					        from_email = settings.NOREPLY_EMAIL_ADDRESS
 | 
				
			||||||
 | 
					    for recipient in recipients:
 | 
				
			||||||
 | 
					        email_fields = {'email_html': email_html,
 | 
				
			||||||
 | 
					                        'email_subject': subject,
 | 
				
			||||||
 | 
					                        'email_text': email_text,
 | 
				
			||||||
 | 
					                        'recipient_email': recipient.get('email'),
 | 
				
			||||||
 | 
					                        'recipient_name': recipient.get('name'),
 | 
				
			||||||
 | 
					                        'from_email': from_email}
 | 
				
			||||||
 | 
					        ScheduledJob.objects.create(type=ScheduledJob.EMAIL, filter_string=recipient.get('email'),
 | 
				
			||||||
 | 
					                                    data=ujson.dumps(email_fields),
 | 
				
			||||||
 | 
					                                    scheduled_timestamp=timezone_now() + delay)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,7 +35,7 @@ from zerver.lib.actions import (
 | 
				
			|||||||
    get_stream,
 | 
					    get_stream,
 | 
				
			||||||
    do_create_realm,
 | 
					    do_create_realm,
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					from zerver.lib.send_email import send_future_email
 | 
				
			||||||
from zerver.lib.initial_password import initial_password
 | 
					from zerver.lib.initial_password import initial_password
 | 
				
			||||||
from zerver.lib.actions import (
 | 
					from zerver.lib.actions import (
 | 
				
			||||||
    do_deactivate_realm,
 | 
					    do_deactivate_realm,
 | 
				
			||||||
@@ -45,7 +45,7 @@ from zerver.lib.actions import (
 | 
				
			|||||||
from zerver.lib.mobile_auth_otp import xor_hex_strings, ascii_to_hex, \
 | 
					from zerver.lib.mobile_auth_otp import xor_hex_strings, ascii_to_hex, \
 | 
				
			||||||
    otp_encrypt_api_key, is_valid_otp, hex_to_ascii, otp_decrypt_api_key
 | 
					    otp_encrypt_api_key, is_valid_otp, hex_to_ascii, otp_decrypt_api_key
 | 
				
			||||||
from zerver.lib.notifications import enqueue_welcome_emails, \
 | 
					from zerver.lib.notifications import enqueue_welcome_emails, \
 | 
				
			||||||
    one_click_unsubscribe_link, send_future_email
 | 
					    one_click_unsubscribe_link
 | 
				
			||||||
from zerver.lib.test_helpers import find_pattern_in_email, find_key_by_email, queries_captured, \
 | 
					from zerver.lib.test_helpers import find_pattern_in_email, find_key_by_email, queries_captured, \
 | 
				
			||||||
    HostRequestMock, unsign_subdomain_cookie
 | 
					    HostRequestMock, unsign_subdomain_cookie
 | 
				
			||||||
from zerver.lib.test_classes import (
 | 
					from zerver.lib.test_classes import (
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ from zerver.lib.feedback import handle_feedback
 | 
				
			|||||||
from zerver.lib.queue import SimpleQueueClient, queue_json_publish
 | 
					from zerver.lib.queue import SimpleQueueClient, queue_json_publish
 | 
				
			||||||
from zerver.lib.timestamp import timestamp_to_datetime
 | 
					from zerver.lib.timestamp import timestamp_to_datetime
 | 
				
			||||||
from zerver.lib.notifications import handle_missedmessage_emails, enqueue_welcome_emails, \
 | 
					from zerver.lib.notifications import handle_missedmessage_emails, enqueue_welcome_emails, \
 | 
				
			||||||
    clear_followup_emails_queue, send_future_email, send_missedmessage_email
 | 
					    clear_followup_emails_queue, send_missedmessage_email
 | 
				
			||||||
from zerver.lib.push_notifications import handle_push_notification
 | 
					from zerver.lib.push_notifications import handle_push_notification
 | 
				
			||||||
from zerver.lib.actions import do_send_confirmation_email, \
 | 
					from zerver.lib.actions import do_send_confirmation_email, \
 | 
				
			||||||
    do_update_user_activity, do_update_user_activity_interval, do_update_user_presence, \
 | 
					    do_update_user_activity, do_update_user_activity_interval, do_update_user_presence, \
 | 
				
			||||||
@@ -22,6 +22,7 @@ from zerver.lib.actions import do_send_confirmation_email, \
 | 
				
			|||||||
    render_incoming_message, do_update_embedded_data
 | 
					    render_incoming_message, do_update_embedded_data
 | 
				
			||||||
from zerver.lib.url_preview import preview as url_preview
 | 
					from zerver.lib.url_preview import preview as url_preview
 | 
				
			||||||
from zerver.lib.digest import handle_digest_email
 | 
					from zerver.lib.digest import handle_digest_email
 | 
				
			||||||
 | 
					from zerver.lib.send_email import send_future_email
 | 
				
			||||||
from zerver.lib.email_mirror import process_message as mirror_email
 | 
					from zerver.lib.email_mirror import process_message as mirror_email
 | 
				
			||||||
from zerver.decorator import JsonableError
 | 
					from zerver.decorator import JsonableError
 | 
				
			||||||
from zerver.tornado.socket import req_redis_key
 | 
					from zerver.tornado.socket import req_redis_key
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user