-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathevent.py
More file actions
232 lines (195 loc) · 9.19 KB
/
event.py
File metadata and controls
232 lines (195 loc) · 9.19 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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
import json
import re
import datetime
from tools import next_weekday, selectEvents, translateDM, dayNameFromWeekday
def readEventsFromFile(file):
events = []
with open(file, 'r') as i:
try:
test = json.load(i)
for ob in test:
if ob["repetitive"]:
events.append(event(ob["name"], ob["group"], ob["repetitive"], time_specified=ob["time_specified"], repetitive_day=ob["repetitive_day"], repetitive_time=ob["repetitive_time"]))
else:
events.append(event(ob["name"], ob["group"], ob["repetitive"], date=ob["date"], time_specified=ob["time_specified"]))
except json.decoder.JSONDecodeError:
print(str(file) + " is empty.")
return events
class Events:
def __init__(self, events_file, old_events_file):
self.events_file = events_file
self.old_events_file = old_events_file
self.events = readEventsFromFile(events_file)
self.old_events = readEventsFromFile(old_events_file)
# Add non repetitive event
def add(self, message:str):
# Example: .add "Test MN" "23-04" "23:55" "313"
groups = re.findall('"([^"]*)"', message)
if len(groups) < 2:
return "Arguments incorrect."
nume = groups[0]
data_raw = groups[1]
if len(groups) == 4:
# if group is not correct
data_raw = data_raw + ' ' + groups[2]
date = datetime.datetime.strptime(data_raw, "%d-%m %H:%M").replace(year=2020)
data_prelucrata = date.strftime("%Y-%m-%d %H:%M:%S")
even = event(nume, groups[3], False, True, date=data_prelucrata)
else:
# if group is not correct
date = datetime.datetime.strptime(data_raw, "%d-%m").replace(year=2020)
data_prelucrata = date.strftime("%Y-%m-%d %H:%M:%S")
even = event(nume, groups[2], False, False, date=data_prelucrata)
# Add newly created event to internal list
self.events.append(even)
# Update events file
f = open(self.events_file, "w")
json.dump([ob.__dict__ for ob in self.events], f)
return "Successful add non-repetitive event."
# Add repetitive event
def addR(self, message:str):
# Example: .addR "Curs MN" "24-04" "18:00" "313"
groups = re.findall('"([^"]*)"', message)
if len(groups) < 2:
return "Arguments incorrect."
nume = groups[0]
data_raw = groups[1]
weekday = datetime.datetime.strptime(data_raw, "%d-%m").replace(year=2020).weekday()
if len(groups) == 4:
even = event(nume, groups[3], True, True, repetitive_day=weekday, repetitive_time=groups[2])
else:
date = datetime.datetime.strptime(data_raw, "%d-%m").replace(year=2020)
data_prelucrata = date.strftime("%Y-%m-%d %H:%M:%S")
even = event(nume, groups[2], True, False, repetitive_day=weekday)
# Add newly created event to internal list
self.events.append(even)
# Update events file
f = open(self.events_file, "w")
json.dump([ob.__dict__ for ob in self.events], f)
return "Successful add repetitive event."
def show(self, message:str, group="all"):
# Parse week number
splitted_msg = message.split()
if len(splitted_msg) > 2:
return 'Comanda `.orar` se foloseste astfel: `.orar [nr_saptamanii]`\n`nr_saptamanii` reprezentand saptamana de afisat (1 - sapt curenta).'
if len(splitted_msg) == 1:
weeks = 1
elif splitted_msg[1] == 'tot' or splitted_msg[1] == 'full' or splitted_msg[1] == 'all':
weeks = -1
else:
try:
# Try converting to int
weeks = int(splitted_msg[1])
if weeks < 1:
return 'Comanda `.orar` se foloseste astfel: `.orar [nr_saptamanii]`\n ->`nr_saptamanii` reprezentand saptamana de afisat (1 - sapt curenta).'
except ValueError:
#Handle the exception
return 'Comanda `.orar` se foloseste astfel: `.orar [nr_saptamanii]`\n ->`nr_saptamanii` reprezentand saptamana de afisat (1 - sapt curenta).'
# Select events
selected_events = selectEvents(self.events, weeks, group)
# Manage header
if weeks == -1:
header = "Toate evenimentele sunt:\n"
elif weeks == 1:
header = "Evenimentele pentru saptamana curenta sunt:\n"
else:
header = "Evenimentele pentru saptamana " + str(weeks) + " sunt:\n"
# Manage content
content = ''
for ev in selected_events:
date_formatted = datetime.datetime.strptime(ev.date, "%Y-%m-%d %H:%M:%S")
if group == "all":
if ev.time_specified == False:
content += '{0}: {1.name} --> {2}\n'.format(ev.group, ev, date_formatted.strftime("%A, %d-%B"))
else:
content += '{0}: {1.name} --> {2}\n'.format(ev.group, ev, date_formatted.strftime("%A, %d-%B %H:%M"))
else:
if ev.time_specified == False:
content += '{0.name} --> {1}\n'.format(ev, date_formatted.strftime("%A, %d-%B"))
else:
content += '{0.name} --> {1}\n'.format(ev, date_formatted.strftime("%A, %d-%B %H:%M"))
# Translate days and months to Romainian
final_text = translateDM(header + content)
return final_text
def updateOldEvents(self):
for ev in self.events:
if not ev.repetitive:
date_formatted = datetime.datetime.strptime(
ev.date, "%Y-%m-%d %H:%M:%S")
if ev.time_specified:
if date_formatted < datetime.datetime.now() - datetime.timedelta(hours=2):
self.delEvent(ev)
print("Removed event: " + str(ev.name))
return("Autotask: Removed event: " + str(ev.name))
else:
if date_formatted.date() < datetime.datetime.now().date():
self.delEvent(ev)
print("Removed event: " + str(ev.name))
return("Autotask: Removed event: " + str(ev.name))
return 0
def delEvent(self, ev):
# Remove event from events list
try:
self.events.remove(ev)
except ValueError:
print("Cannot delete event, because it is not in events list")
return 0
# Put event into old_events list
self.old_events.append(ev)
# Update events file
f = open(self.events_file, "w")
json.dump([ob.__dict__ for ob in self.events], f)
# Update old_events file
g = open(self.old_events_file, "w")
json.dump([ob.__dict__ for ob in self.old_events], g)
return 1
def manager_show(self):
if len(self.events) == 0:
return 'Nu exista niciun eveniment.'
header = 'Evenimentele sunt:\n'
content = ''
# Show events
i = 0;
for ev in self.events:
if ev.repetitive:
weekday = dayNameFromWeekday(ev.repetitive_day)
if ev.time_specified:
content += f'{i}. R {ev.group}: {ev.name} --> {weekday} {ev.repetitive_time}'
else:
content += f'{i}. R {ev.group}: {ev.name} --> {weekday} Time not specified'
else:
if ev.time_specified:
date_with_time = datetime.datetime.strptime(ev.date, "%Y-%m-%d %H:%M:%S").strftime("%A, %d-%B %H:%M")
content += f'{i}. {ev.group}: {ev.name} --> {date_with_time}'
else:
date_without_time = datetime.datetime.strptime(ev.date, "%Y-%m-%d %H:%M:%S").strftime("%A, %d-%B")
content += f'{i}. {ev.group}: {ev.name} --> {date_without_time} Time not specified'
i += 1
final_text = translateDM(header + content)
return final_text
def delete(self, message):
groups = message.split()
if len(groups) == 1:
return self.manager_show()
else:
try:
# we need to delete event
event_index = int(groups[1])
return 'Successful deletion.' if self.delEvent(self.events[event_index - 1]) == 1 else 'Deletion failed.'
except Exception as e:
print(e)
return('Comanda gresita: A se folosi cu formatul: `.del [int]`')
class event:
def __init__(self, name, group, repetitive, time_specified, date = None, repetitive_day = None, repetitive_time = None):
# Event name
self.name = name
# If the event is specific for a group
self.group = group
# If the event repeats every week
self.repetitive = repetitive
self.time_specified = time_specified
if self.repetitive:
self.repetitive_day = repetitive_day
self.repetitive_time = repetitive_time
else:
self.date = date