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

1from app.models import * 

2from app.models.term import Term 

3from app.models.program import Program 

4from datetime import datetime 

5 

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) 

23 

24 _spCache = "Empty" 

25 

26 def __str__(self): 

27 return f"{self.id}: {self.description}" 

28 

29 @property 

30 def noProgram(self): 

31 return not self.programEvents.exists() 

32 

33 @property 

34 def singleProgram(self): 

35 from app.models.programEvent import ProgramEvent 

36 

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 

43 

44 return self._spCache 

45 

46 @property 

47 def isPast(self): 

48 return datetime.now() >= datetime.combine(self.startDate, self.timeStart) 

49 

50 @property 

51 def isRecurring(self): 

52 return bool(self.recurringId) 

53 

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