Coverage for app/models/event.py: 91%
46 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 *
2from app.models.term import Term
3from app.models.program import Program
4from datetime import datetime
6class Event(baseModel):
7 name = CharField()
8 term = ForeignKeyField(Term)
9 description = TextField()
10 timeStart = TimeField()
11 timeEnd = TimeField()
12 location = CharField()
13 isFoodProvided = BooleanField(default=False)
14 isTraining = BooleanField(default=False)
15 isRsvpRequired = BooleanField(default=False)
16 isService = BooleanField(default=False)
17 isAllVolunteerTraining = BooleanField(default=False)
18 startDate = DateField()
19 endDate = DateField(null=True)
20 recurringId = IntegerField(null=True)
21 contactEmail = CharField(null=True)
22 contactName = CharField(null=True)
24 _spCache = "Empty"
26 def __str__(self):
27 return f"{self.id}: {self.description}"
29 @property
30 def noProgram(self):
31 return not self.programEvents.exists()
33 @property
34 def singleProgram(self):
35 from app.models.programEvent import ProgramEvent
37 if self._spCache == "Empty":
38 countPE = list(self.programEvents.select(ProgramEvent, Program).join(Program).execute())
39 if len(countPE) == 1:
40 self._spCache = countPE[0].program
41 else:
42 self._spCache = None
44 return self._spCache
46 @property
47 def isPast(self):
48 return datetime.now() >= datetime.combine(self.startDate, self.timeStart)
50 @property
51 def isRecurring(self):
52 return bool(self.recurringId)
54 @property
55 def isFirstRecurringEvent(self):
56 firstRecurringEvent = Event.select().where(Event.recurringId==self.recurringId).order_by(Event.id).get()
57 return firstRecurringEvent.id == self.id