fix: update autogenerated username functionality (#35052)
This commit is contained in:
@@ -45,6 +45,8 @@ class TestGenerateUsername(TestCase):
|
|||||||
({}, None),
|
({}, None),
|
||||||
({'first_name': '', 'last_name': ''}, None),
|
({'first_name': '', 'last_name': ''}, None),
|
||||||
({'name': ''}, None),
|
({'name': ''}, None),
|
||||||
|
({'name': '='}, None),
|
||||||
|
({'name': '@'}, None),
|
||||||
({'first_name': '阿提亚', 'last_name': '阿提亚'}, "AT"),
|
({'first_name': '阿提亚', 'last_name': '阿提亚'}, "AT"),
|
||||||
({'first_name': 'أحمد', 'last_name': 'محمد'}, "HM"),
|
({'first_name': 'أحمد', 'last_name': 'محمد'}, "HM"),
|
||||||
({'name': 'أحمد محمد'}, "HM"),
|
({'name': 'أحمد محمد'}, "HM"),
|
||||||
|
|||||||
@@ -128,16 +128,25 @@ def _get_username_prefix(data):
|
|||||||
- str: Name initials or None.
|
- str: Name initials or None.
|
||||||
"""
|
"""
|
||||||
username_regex_partial = settings.USERNAME_REGEX_PARTIAL
|
username_regex_partial = settings.USERNAME_REGEX_PARTIAL
|
||||||
|
valid_username_regex = r'^[A-Za-z0-9_\-]+$'
|
||||||
full_name = ''
|
full_name = ''
|
||||||
if data.get('first_name', '').strip() and data.get('last_name', '').strip():
|
try:
|
||||||
full_name = f"{unidecode(data.get('first_name', ''))} {unidecode(data.get('last_name', ''))}"
|
if data.get('first_name', '').strip() and data.get('last_name', '').strip():
|
||||||
elif data.get('name', '').strip():
|
full_name = f"{unidecode(data.get('first_name', ''))} {unidecode(data.get('last_name', ''))}"
|
||||||
full_name = unidecode(data['name'])
|
elif data.get('name', '').strip():
|
||||||
|
full_name = unidecode(data['name'])
|
||||||
|
|
||||||
if full_name.strip():
|
if full_name.strip():
|
||||||
full_name = re.findall(username_regex_partial, full_name)[0]
|
matched_name = re.findall(username_regex_partial, full_name)
|
||||||
name_initials = "".join([name_part[0] for name_part in full_name.split()[:2]])
|
if matched_name:
|
||||||
return name_initials.upper() if name_initials else None
|
full_name = " ".join(matched_name)
|
||||||
|
name_initials = "".join([name_part[0] for name_part in full_name.split()[:2]])
|
||||||
|
if re.match(valid_username_regex, name_initials):
|
||||||
|
return name_initials.upper() if name_initials else None
|
||||||
|
|
||||||
|
except Exception as e: # pylint: disable=broad-except
|
||||||
|
logging.info(f"Error in _get_username_prefix: {e}")
|
||||||
|
return None
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user