-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathScheduleHelper.py
More file actions
133 lines (103 loc) · 4.26 KB
/
ScheduleHelper.py
File metadata and controls
133 lines (103 loc) · 4.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
__author__ = 'matt'
class ScheduleEvent():
def __init__(self, day, time, temperature, mode):
self.day = int(day)
self.time = int(time)
self.temperature = float(temperature)
self.mode = mode;
class ScheduleHelper():
def __init__(self):
self.schedule = {}
def deserialize_events(self, fileContents):
if "" != fileContents:
for line in fileContents.split():
# split line into days;time;temperature;mode
top = line.split(";")
if 3 == len(top):
# split days into day,day,...
days = top[0].split(",")
time = top[1]
temperature = top[2]
mode = top[3].toLower
if mode not in [ "off", "fan", "ac", "heat" ]:
mode = "off"
# add all events to the schedule
try:
for day in days:
self.add_event(ScheduleEvent(day, time, temperature, mode))
except:
pass
def add_event(self, scheduleEvent):
print("Scheduled event added")
if scheduleEvent.day not in self.schedule:
self.schedule[scheduleEvent.day] = [scheduleEvent]
else:
events = self.schedule[scheduleEvent.day]
added = False
# iterate through the events for this day
for i in range(0, len(events)):
difference = events[i].time - scheduleEvent.time
# if times are within 30 minutes, fail
if 30 > abs(difference):
return events[i]
if scheduleEvent.time < events[i].time:
events.insert(i, scheduleEvent)
added = True
break
# check if scheduleEvent has been added
if not added:
events.append(scheduleEvent)
return None
def check_for_conflict(self, scheduleEvent):
# check if any events exist for this day
if scheduleEvent.day in self.schedule:
events = self.schedule[scheduleEvent.day]
# iterate through the events for this day
for event in events:
difference = event.time - scheduleEvent.time
# if times are within 30 minutes, fail
if 30 > abs(difference):
return event
return None
def delete_event(self, day, time):
# check if day exists in schedule
if day in self.schedule:
for events in self.schedule[day]:
# check if any events in schedule match time and day
for i in range(len(events)):
if events[i].time == time:
event = events[i]
del events[i]
return event
def serialize_events(self):
timeOrganized = []
# iterate through keys in schedule
for key in self.schedule:
for event in self.schedule[key]:
matched = False
if 0 < len(timeOrganized):
# iterate through all events in a day
for group in timeOrganized:
# if given event matches a known time, add to that group
if group[0].time == event.time \
and group[0].temperature == event.temperature:
group.append(event)
matched = True
break
# else, create a new group
if not matched:
timeOrganized.append([event])
# convert events grouped by time into days;hour;temperature
content = ""
for group in timeOrganized:
line = ""
# add all days to the line
for i in range(len(group)):
if 0 != i:
line += ","
line += group[i].day
# add time and temperature, then a \n
line += ";" + str(group[0].time) + ";" + group[0].temperature + "\n"
content += line
# return serialized schedule
return content