-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUserKholan.py
168 lines (126 loc) · 5.18 KB
/
UserKholan.py
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
from KholEvent import *
import json
class UserKholen:
def __init__(self, userid, new=False):
"""
self.user is a dictionary that includes all events for the given userid. Events are stored on a day-day basis
and can be accessed via the date key in form [XXYYZZZZ] where XX is the day, YY is the month and ZZZZ
is the year. (i.e. [OO012000]). Events with the same date key are stored in a list (their position
in the list becomes the other identified if required).
Any changes(add, delete, edit) are made directly to self.user and self.save() must be called or the changes
will not be pushed to the final file.
:param userid: id of the user
"""
self.userid = str(userid)
if new:
self.create_user()
self.user = self.get_user_info()
def create_user(self):
# Get master dictionary
master = self.get_data()
# Check if userid already exists
if self.userid in master:
raise Exception("UserID already exists")
# Create values for new user
self.user = {'Events': {}}
# Save
self.save()
def get_user_info(self):
master = self.get_data()
return master[self.userid]
def get_data(self):
"""
:return: the data for all users in the UserKholen system in the form of a dictionary.
"""
data = {}
try:
with open("master_JSON_UserKholen.json", "r") as file:
data = json.load(file, object_hook=self.decode)
except FileNotFoundError:
file = open("master_JSON_UserKholen.json", "w")
file.write('{}')
return data
def delete(self):
"""
Deletes the current user from the system.
"""
master = self.get_data()
del master[self.userid]
with open("master_JSON_UserKholen.json", "w") as file:
json.dump(master, file, default=self.encode, indent=1)
def save(self):
"""
Saves what is currently in self.user to the master dictionary
"""
master = self.get_data()
master[self.userid] = self.user
with open("master_JSON_UserKholen.json", "w") as file:
json.dump(master, file, default=self.encode, indent=1)
def create_event(self, day, month, year, event_name, event_details):
"""
Adds the event as defined by the args to self.user
"""
# Create an event and get
new_event = KholEvent(day, month, year, event_name, event_details)
date_key = new_event.get_date_key()
# Check if date_key exists
if date_key in self.user["Events"]:
self.user["Events"][date_key].append({"__event__": new_event})
else:
self.user["Events"][date_key] = [{"__event__": new_event}]
def delete_event(self, event_key):
"""
deletes the KholEvent from self.user
:param event_key: tuple in the form of (date_key, position in date key event list)
"""
# Get date key list
events = self.user["Events"][event_key[0]]
# Delete the key
del events[event_key[1]]
# If events is empty delete that as well
if not events:
del self.user["Events"][event_key[0]]
def edit_event(self, event_key, day=False, month=False, year=False, event_name=False, event_details=False):
"""
creates a new event, where any arg that is =False remains the same as the original. Then deletes the original.
:param event_key: tuple in the form of (date_key, position in date key event list)
"""
event = self.user["Events"][event_key[0]][event_key[1]]["__event__"]
self.create_event(event.day if not day else day,
event.month if month != 0 and not month else month,
event.year if not year else year,
event.name if not event_name else event_name,
event.details if not event_details else event_details)
self.delete_event(event_key)
def get_events(self, date_key):
event_list = []
if date_key in self.user["Events"]:
for event in self.user["Events"][date_key]:
event_list.append(event['__event__'])
return event_list
else:
return 0
def encode(self, item):
"""
Encoding function for dumping JSON files
"""
if isinstance(item, KholEvent):
return item.get_tuple()
def decode(self, item):
"""
Decoding function for loading JSON files
"""
if "__event__" in item:
return {"__event__": KholEvent(*(item["__event__"]))}
return item
def __str__(self):
"""
Prints all events for the current user
:return:
"""
s = "UserID: {}\n".format(self.userid) + "_"*100 + "\n"
for date_key in self.user["Events"]:
for idx, event in enumerate(self.user["Events"][date_key]):
s += "Date Key: {} || Index: {}\n".format(date_key, idx)
s += event['__event__'].__str__() + "\n" + "_"*100 + "\n"
return s