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
« prev ^ index » next coverage.py v7.2.7, created at 2025-04-17 19:46 +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 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)
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)
28 self._pmCache = {}
29 self._bsCache = None
31 @property
32 def isAdmin(self):
33 return (self.isCeltsAdmin or self.isCeltsStudentStaff)
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()
42 return self._bsCache
44 @property
45 def fullName(self):
46 return f"{self.firstName} {self.lastName}"
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)
53 return (f' {self} added as Program Manager')
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()
60 return (f'{self} removed from Program Manager')
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
68 if program not in self._pmCache:
69 self._pmCache[program] = ProgramManager.select().where(ProgramManager.user == self, ProgramManager.program == program).exists()
71 return self._pmCache[program]
73 def isProgramManagerForEvent(self, event):
74 # Looks to see who the Program Manager for a specific event is
75 return self.isProgramManagerFor(event.program)