diff --git a/allianceauth/framework/api/user.py b/allianceauth/framework/api/user.py index cada8262..8840b928 100644 --- a/allianceauth/framework/api/user.py +++ b/allianceauth/framework/api/user.py @@ -2,8 +2,12 @@ Alliance Auth User API """ +from typing import Optional + from django.contrib.auth.models import User +from allianceauth.eveonline.models import EveCharacter + def get_sentinel_user() -> User: """ @@ -14,8 +18,7 @@ def get_sentinel_user() -> User: return User.objects.get_or_create(username="deleted")[0] - -def get_main_character_from_user(user: User) -> str: +def get_main_character_from_user(user: User) -> Optional[EveCharacter]: """ Get the main character from a user @@ -25,14 +28,37 @@ def get_main_character_from_user(user: User) -> str: :rtype: """ + if user is None: + return None + + try: + main_character = user.profile.main_character + except AttributeError: + return None + + return main_character + + +def get_main_character_name_from_user(user: User) -> str: + """ + Get the main character name from a user + + :param user: + :type user: + :return: + :rtype: + """ + if user is None: sentinel_user = get_sentinel_user() return sentinel_user.username + main_character = get_main_character_from_user(user=user) + try: - return_value = user.profile.main_character.character_name + username = main_character.character_name except AttributeError: return str(user) - return return_value + return username diff --git a/allianceauth/framework/tests/test_api_user.py b/allianceauth/framework/tests/test_api_user.py index 7201f5b0..afb90b00 100644 --- a/allianceauth/framework/tests/test_api_user.py +++ b/allianceauth/framework/tests/test_api_user.py @@ -10,7 +10,7 @@ from django.test import TestCase # Alliance Auth from allianceauth.framework.api.user import get_sentinel_user, \ - get_main_character_from_user + get_main_character_name_from_user from allianceauth.tests.auth_utils import AuthUtils @@ -74,7 +74,7 @@ class TestGetMainForUser(TestCase): user=cls.user, name=character_name, character_id=1001 ) - def test_get_main_character_from_user_should_return_character_name(self): + def test_get_main_character_name_from_user_should_return_character_name(self): """ Test should return the main character name for a regular user @@ -82,11 +82,11 @@ class TestGetMainForUser(TestCase): :rtype: """ - character_name = get_main_character_from_user(user=self.user) + character_name = get_main_character_name_from_user(user=self.user) self.assertEqual(first=character_name, second="William T. Riker") - def test_get_main_character_from_user_should_return_user_name(self): + def test_get_main_character_name_from_user_should_return_user_name(self): """ Test should return just the username for a user without a character @@ -96,11 +96,11 @@ class TestGetMainForUser(TestCase): user = AuthUtils.create_user(username="John Doe") - character_name = get_main_character_from_user(user=user) + character_name = get_main_character_name_from_user(user=user) self.assertEqual(first=character_name, second="John Doe") - def test_get_main_character_from_user_should_return_sentinel_user(self): + def test_get_main_character_name_from_user_should_return_sentinel_user(self): """ Test should return "deleted" as username (Sentinel User) @@ -110,7 +110,7 @@ class TestGetMainForUser(TestCase): user = get_sentinel_user() - character_name = get_main_character_from_user(user=user) + character_name = get_main_character_name_from_user(user=user) self.assertEqual(first=character_name, second="deleted") @@ -124,6 +124,6 @@ class TestGetMainForUser(TestCase): user = None - character_name = get_main_character_from_user(user=user) + character_name = get_main_character_name_from_user(user=user) self.assertEqual(first=character_name, second="deleted")