Coverage for app/models/event.py: 88%

66 statements  

« prev     ^ index     » next       coverage.py v7.10.2, created at 2026-07-08 20:07 +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 isLaborOnly = BooleanField(default=False) 

15 isTraining = BooleanField(default=False) 

16 isRsvpRequired = BooleanField(default=False) 

17 isService = BooleanField(default=False) 

18 isEngagement = BooleanField(default=False) 

19 isAllVolunteerTraining = BooleanField(default=False) 

20 rsvpLimit = IntegerField(null=True) 

21 startDate = DateField() 

22 seriesId = IntegerField(null=True) 

23 isRepeating = BooleanField(default=False) 

24 contactEmail = CharField(null=True) 

25 contactName = CharField(null=True) 

26 program = ForeignKeyField(Program) 

27 isCanceled = BooleanField(default=False) 

28 deletionDate = DateTimeField(null=True) 

29 deletedBy = TextField(null=True) 

30 campusGroupsId = IntegerField(null=True) 

31 campusGroupsURL = CharField(null=True) 

32 isCampusGroupsSynced = BooleanField(default=False) 

33 

34 _spCache = "Empty" 

35 

36 def __str__(self): 

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

38 

39 @property 

40 def isDeleted(self): 

41 return self.deletionDate is not None 

42 

43 @property 

44 def noProgram(self): 

45 return not self.program_id 

46 

47 @property 

48 def isPastStart(self): 

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

50 

51 @property 

52 def isPastEnd(self): 

53 return datetime.now() >= datetime.combine(self.startDate, self.timeEnd) 

54 

55 @property 

56 def isFirstRepeatingEvent(self): 

57 firstRepeatingEvent = Event.select().where(Event.seriesId==self.seriesId).order_by(Event.id).get() 

58 return firstRepeatingEvent.id == self.id 

59 

60 @property 

61 def relativeTime(self): 

62 relativeTime = datetime.combine(self.startDate, self.timeStart) - datetime.now() 

63 

64 secondsFromNow = relativeTime.seconds 

65 minutesFromNow = secondsFromNow // 60 

66 hoursFromNow = minutesFromNow // 60 

67 daysFromNow = relativeTime.days 

68 if self.isPastStart: 

69 return "" 

70 elif (daysFromNow): 

71 return f"{daysFromNow} day" + ("s" if daysFromNow > 1 else "") 

72 elif hoursFromNow: 

73 return f"{hoursFromNow} hour" + ("s" if hoursFromNow > 1 else "") 

74 elif minutesFromNow: 

75 return f"{minutesFromNow} minute" + ("s" if minutesFromNow > 1 else "") 

76 else: 

77 return f"happening now" 

78 

79