2727TASK_LOG = logging .getLogger ("edx.celery.task" )
2828
2929
30- def _get_current_site () -> Site | None :
30+ def _get_current_site (site_id : int | None = None ) -> Site | None :
3131 """
3232 Get the current Django Site instance with fallback logic.
3333
34+ Args:
35+ site_id (int | None): Optional site ID to retrieve. If provided, attempts
36+ to get this specific site first before falling back.
37+
3438 Returns:
3539 Site | None: The current Site object or None if unavailable
3640 """
41+ if site_id :
42+ try :
43+ return Site .objects .get (id = site_id )
44+ except Site .DoesNotExist :
45+ pass
46+
3747 # Try to get current site if method exists
3848 if hasattr (Site .objects , "get_current" ):
3949 site = Site .objects .get_current ()
@@ -46,7 +56,6 @@ def _get_current_site() -> Site | None:
4656 except Site .DoesNotExist :
4757 pass
4858
49- # Last resort: get first site
5059 try :
5160 return Site .objects .first ()
5261 except Exception : # pylint: disable=broad-except
@@ -144,11 +153,12 @@ def send_enrollment_task_completion_email(
144153 - failed: Number of failed operations
145154 """
146155 requester = instructor_task .requester
147- site = _get_current_site ()
148156 task_input = _parse_task_input (instructor_task )
157+
158+ site_id = task_input .get ("site_id" )
159+ site = _get_current_site (site_id )
149160 user_language = get_user_preference (requester , LANGUAGE_KEY )
150161
151- # Build email context
152162 user_context = _build_enrollment_email_context (
153163 course_key = course_key ,
154164 requester = requester ,
@@ -158,7 +168,6 @@ def send_enrollment_task_completion_email(
158168 task_input = task_input ,
159169 )
160170
161- # Create and send message
162171 message = BatchEnrollment ().personalize (
163172 recipient = Recipient (lms_user_id = requester .id , email_address = requester .email ),
164173 language = user_language ,
0 commit comments