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
« prev ^ index » next coverage.py v7.2.5, created at 2023-05-24 14:13 +0000
1from app.models import *
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)
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)
24 self._pmCache = {}
25 self._bsCache = None
27 @property
28 def isAdmin(self):
29 return (self.isCeltsAdmin or self.isCeltsStudentStaff)
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()
38 return self._bsCache
40 @property
41 def fullName(self):
42 return f"{self.firstName} {self.lastName}"
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)
49 return (f' {self} added as Program Manager')
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()
56 return (f'{self} removed from Program Manager')
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
64 if program not in self._pmCache:
65 self._pmCache[program] = ProgramManager.select().where(ProgramManager.user == self, ProgramManager.program == program).exists()
67 return self._pmCache[program]
69 def isProgramManagerForEvent(self, event):
70 # Looks to see who the Program Manager for a specific event is
71 return self.isProgramManagerFor(event.singleProgram)