Coverage for app/models/user.py: 98%

53 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2025-04-17 19:46 +0000

1from app.models import * 

2 

3 

4class User(baseModel): 

5 username = CharField(primary_key = True) 

6 bnumber = CharField(unique = True) 

7 email = CharField() 

8 phoneNumber = CharField(null = True) 

9 firstName = CharField() 

10 lastName = CharField() 

11 cpoNumber = CharField(null=False) 

12 isStudent = BooleanField(default = False) 

13 major = CharField(null = True) 

14 classLevel = CharField(null = True) 

15 isFaculty = BooleanField(default = False) 

16 isStaff = BooleanField(default = False) 

17 isCeltsAdmin = BooleanField(default =False) 

18 isCeltsStudentStaff = BooleanField(default = False) 

19 dietRestriction = TextField(null=True) 

20 minorInterest = BooleanField(default=False) 

21 hasGraduated = BooleanField(default=False) 

22 declaredMinor = BooleanField(default=False) 

23 

24 # override BaseModel's __init__ so that we can set up an instance attribute for cache 

25 def __init__(self,*args, **kwargs): 

26 super().__init__(*args,**kwargs) 

27 

28 self._pmCache = {} 

29 self._bsCache = None 

30 

31 @property 

32 def isAdmin(self): 

33 return (self.isCeltsAdmin or self.isCeltsStudentStaff) 

34 

35 @property 

36 def isBonnerScholar(self): 

37 from app.models.bonnerCohort import BonnerCohort 

38 if self._bsCache is None: 

39 # TODO should we exclude users who are banned from Bonner here? 

40 self._bsCache = BonnerCohort.select().where(BonnerCohort.user == self).exists() 

41 

42 return self._bsCache 

43 

44 @property 

45 def fullName(self): 

46 return f"{self.firstName} {self.lastName}" 

47 

48 def addProgramManager(self, program): 

49 # Makes a user a Program Manager 

50 from app.models.programManager import ProgramManager 

51 ProgramManager.create(user = self, program = program) 

52 

53 return (f' {self} added as Program Manager') 

54 

55 def removeProgramManager(self, program): 

56 # Removes an existing Program Manager from being a Program Manager 

57 from app.models.programManager import ProgramManager 

58 ProgramManager.delete().where(ProgramManager.user == self, ProgramManager.program == program).execute() 

59 

60 return (f'{self} removed from Program Manager') 

61 

62 def isProgramManagerFor(self, program): 

63 # Looks to see who is the Program Manager for a program 

64 from app.models.programManager import ProgramManager # Must defer import until now to avoid circular reference 

65 if not program: 

66 return False 

67 

68 if program not in self._pmCache: 

69 self._pmCache[program] = ProgramManager.select().where(ProgramManager.user == self, ProgramManager.program == program).exists() 

70 

71 return self._pmCache[program] 

72 

73 def isProgramManagerForEvent(self, event): 

74 # Looks to see who the Program Manager for a specific event is 

75 return self.isProgramManagerFor(event.program) 

76 

77