Coverage for functions \ flipdare \ util \ user_util.py: 93%

42 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-05-08 12:22 +1000

1#!/usr/bin/env python 

2# Copyright (c) 2026 Flipdare Pty Ltd. All rights reserved. 

3# 

4# This file is part of Flipdare's proprietary software and contains 

5# confidential and copyrighted material. Unauthorised copying, 

6# modification, distribution, or use of this file is strictly 

7# prohibited without prior written permission from Flipdare Pty Ltd. 

8# 

9# This software includes third-party components licensed under MIT, 

10# BSD, and Apache 2.0 licences. See THIRD_PARTY_NOTICES for details. 

11# 

12 

13 

14from flipdare.app_globals import string_has_alpha 

15 

16 

17class UserUtil: 

18 

19 def __init__(self) -> None: 

20 pass 

21 

22 @staticmethod 

23 def contact_name(email: str, display_name: str | None = None, name: str | None = None) -> str: 

24 if display_name and string_has_alpha(display_name): 

25 return display_name 

26 if name and string_has_alpha(name): 

27 return name 

28 

29 name = email.split("@", maxsplit=1)[0] 

30 if "." not in name: 

31 # just return the first part of the email as the name, capitalized 

32 return name.capitalize() 

33 

34 return UserUtil.guess_name_from_email(email) 

35 

36 @staticmethod 

37 def safe_name(email: str, display_name: str | None = None, name: str | None = None) -> str: 

38 if display_name and string_has_alpha(display_name): 

39 return display_name 

40 if name and string_has_alpha(name): 

41 return name 

42 

43 # email must exist in a valid user 

44 return UserUtil.guess_name_from_email(email) 

45 

46 @staticmethod 

47 def guess_name_from_email(email: str) -> str: 

48 """Extract name from email address.""" 

49 name = email.split("@", maxsplit=1)[0] 

50 if "." not in name: 

51 name = name.capitalize() 

52 else: 

53 firstname = name.split(".")[0] 

54 firstname = firstname.capitalize() 

55 

56 lastname = name.split(".")[-1] 

57 lastname = lastname.capitalize() 

58 

59 name = f"{firstname} {lastname}" 

60 

61 return name 

62 

63 @staticmethod 

64 def split_name(name: str) -> tuple[str | None, str | None]: 

65 """ 

66 Split full name into first and last name. 

67 

68 Returns: 

69 Tuple of (first_name, last_name) 

70 

71 """ 

72 if name.strip() == "": 

73 return None, None 

74 

75 name_parts = name.split() 

76 if len(name_parts) == 1: 

77 return name, None 

78 

79 first_name = name_parts[0] 

80 last_name = " ".join(name_parts[1:]) if len(name_parts) > 1 else None 

81 

82 return first_name, last_name