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

49 statements  

« prev     ^ index     » next       coverage.py v7.2.5, created at 2023-05-24 14:13 +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 isStudent = BooleanField(default = False) 

12 major = CharField(null = True) 

13 classLevel = CharField(null = True) 

14 isFaculty = BooleanField(default = False) 

15 isStaff = BooleanField(default = False) 

16 isCeltsAdmin = BooleanField(default =False) 

17 isCeltsStudentStaff = BooleanField(default = False) 

18 dietRestriction = TextField(null=True) 

19 

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

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

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

23 

24 self._pmCache = {} 

25 self._bsCache = None 

26 

27 @property 

28 def isAdmin(self): 

29 return (self.isCeltsAdmin or self.isCeltsStudentStaff) 

30 

31 @property 

32 def isBonnerScholar(self): 

33 from app.models.bonnerCohort import BonnerCohort 

34 if self._bsCache is None: 

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

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

37 

38 return self._bsCache 

39 

40 @property 

41 def fullName(self): 

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

43 

44 def addProgramManager(self, program): 

45 # Makes a user a Program Manager 

46 from app.models.programManager import ProgramManager 

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

48 

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

50 

51 def removeProgramManager(self, program): 

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

53 from app.models.programManager import ProgramManager 

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

55 

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

57 

58 def isProgramManagerFor(self, program): 

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

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

61 if not program: 

62 return False 

63 

64 if program not in self._pmCache: 

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

66 

67 return self._pmCache[program] 

68 

69 def isProgramManagerForEvent(self, event): 

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

71 return self.isProgramManagerFor(event.singleProgram)