@@ -265,7 +265,7 @@ def _set_edx_error(open_edx_user, data):
265265 open_edx_user .save ()
266266
267267
268- def _create_edx_user_request (open_edx_user , user , access_token ): # noqa: C901
268+ def _create_edx_user_request (open_edx_user , user , access_token ): # noqa: C901, PLR0915
269269 """
270270 Handle the actual user creation request to Open edX with retry logic for duplicate usernames.
271271
@@ -314,7 +314,7 @@ def _create_edx_user_request(open_edx_user, user, access_token): # noqa: C901
314314 try :
315315 resp = None
316316 data = None
317-
317+ tried_duplicate_email_fix = False
318318 while attempt < max_attempts :
319319 attempt += 1
320320
@@ -335,6 +335,16 @@ def _create_edx_user_request(open_edx_user, user, access_token): # noqa: C901
335335
336336 data = _parse_openedx_response (resp )
337337
338+ # Only try for LTI user duplicate email error fix if the response error was duplicate-email
339+ if _is_duplicate_email_error (resp , data ) and not tried_duplicate_email_fix :
340+ tried_duplicate_email_fix = True
341+ client = get_edx_api_lti_dup_email_client ()
342+ dup_email_fix_resp = client .fix_lti_user (email = user .email )
343+ # If the LTI API fixed the duplicate email issue, Retry account creation
344+ if dup_email_fix_resp .status_code == status .HTTP_200_OK :
345+ continue
346+ break
347+
338348 new_username , should_continue , should_reset_attempts = (
339349 _handle_username_collision (
340350 resp ,
@@ -351,17 +361,6 @@ def _create_edx_user_request(open_edx_user, user, access_token): # noqa: C901
351361 if should_reset_attempts :
352362 attempt = 0
353363 continue
354-
355- # Only try for LTI user duplicate email error fix if the response error was duplicate-email
356- if _is_duplicate_email_error (resp , data ):
357- client = get_edx_api_lti_dup_email_client ()
358- dup_email_fix_resp = client .fix_lti_user (
359- email = user .email , username = current_username
360- )
361- # If the LTI API fixed the duplicate email issue, Retry account creation
362- if dup_email_fix_resp .status_code == status .HTTP_200_OK :
363- continue
364- break
365364 break
366365
367366 if _is_bad_request (resp ):
0 commit comments