From ce6651348838c9af6a6e6d7001d544ca69158f41 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Tue, 6 May 2025 17:44:55 +0300 Subject: [PATCH] Refactor email sending to use reusable connections Updated email sending logic across multiple modules to utilize `django.core.mail.get_connection` for better email connection management and efficiency. Adjusted filters in `conditions.py` to correctly handle dictionary inputs when checking attribute lengths. --- core/templatetags/conditions.py | 9 ++++++++- core/utils/emailing.py | 9 ++++++++- vibes_auth/utils/emailing.py | 5 +++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/core/templatetags/conditions.py b/core/templatetags/conditions.py index fd6cc842..eb606a4b 100644 --- a/core/templatetags/conditions.py +++ b/core/templatetags/conditions.py @@ -6,4 +6,11 @@ register = template.Library() @register.filter def attributes_length(value, arg): """Returns True if the value length is more than the argument.""" - return len(value) > arg + if isinstance(value, dict): + count = int() + for attribute, _value in value.items(): + if attribute.endswith("_system"): + continue + count += 1 + return count > arg + return False diff --git a/core/utils/emailing.py b/core/utils/emailing.py index 314917fa..41011a3b 100644 --- a/core/utils/emailing.py +++ b/core/utils/emailing.py @@ -2,6 +2,7 @@ from datetime import datetime from celery.app import shared_task from constance import config +from django.core import mail from django.core.mail import EmailMessage from django.template.loader import render_to_string from django.utils.translation import activate @@ -14,6 +15,7 @@ from core.utils.constance import set_email_settings @shared_task def contact_us_email(contact_info): set_email_settings() + connection = mail.get_connection() email = EmailMessage( _(f"{config.PROJECT_NAME} | contact us initiated"), @@ -30,6 +32,7 @@ def contact_us_email(contact_info): ), to=[config.EMAIL_HOST_USER], from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", + connection=connection, ) email.content_subtype = "html" email.send() @@ -47,6 +50,7 @@ def send_order_created_email(order_pk: str) -> tuple[bool, str]: activate(order.user.language) set_email_settings() + connection = mail.get_connection() if not order.is_whole_digital: email = EmailMessage( @@ -62,6 +66,7 @@ def send_order_created_email(order_pk: str) -> tuple[bool, str]: ), to=[order.user.email], from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", + connection=connection, ) email.content_subtype = "html" email.send() @@ -78,13 +83,14 @@ def send_order_finished_email(order_pk: str) -> tuple[bool, str]: activate(order.user.language) set_email_settings() + connection = mail.get_connection() email = EmailMessage( _(f"{config.PROJECT_NAME} | order delivered"), render_to_string( template_name="digital_order_delivered_email.html", context={ - "order_uuid": order.uuid, + "order_uuid": order.human_readable_id, "user_first_name": order.user.first_name, "order_products": ops, "project_name": config.PROJECT_NAME, @@ -96,6 +102,7 @@ def send_order_finished_email(order_pk: str) -> tuple[bool, str]: ), to=[order.user.email], from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", + connection=connection, ) email.content_subtype = "html" email.send() diff --git a/vibes_auth/utils/emailing.py b/vibes_auth/utils/emailing.py index 523b3563..ec6517f7 100644 --- a/vibes_auth/utils/emailing.py +++ b/vibes_auth/utils/emailing.py @@ -1,6 +1,7 @@ from celery.app import shared_task from constance import config from django.contrib.auth.tokens import PasswordResetTokenGenerator +from django.core import mail from django.core.mail import EmailMessage from django.template.loader import render_to_string from django.utils.encoding import force_bytes @@ -21,6 +22,7 @@ def send_verification_email_task(user_pk: str) -> tuple[bool, str]: activate(user.language) set_email_settings() + connection = mail.get_connection() email_subject = _(f"{config.PROJECT_NAME} | Activate Account") email_body = render_to_string( @@ -38,6 +40,7 @@ def send_verification_email_task(user_pk: str) -> tuple[bool, str]: body=email_body, from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", to=[user.email], + connection=connection, ) email.content_subtype = "html" email.send() @@ -61,6 +64,7 @@ def send_reset_password_email_task(user_pk: str) -> tuple[bool, str]: activate(user.language) set_email_settings() + connection = mail.get_connection() email_subject = _(f"{config.PROJECT_NAME} | Reset Password") email_body = render_to_string( @@ -79,6 +83,7 @@ def send_reset_password_email_task(user_pk: str) -> tuple[bool, str]: body=email_body, from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", to=[user.email], + connection=connection, ) email.content_subtype = "html" email.send()