-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathGameDataModule.py
More file actions
64 lines (49 loc) · 1.97 KB
/
GameDataModule.py
File metadata and controls
64 lines (49 loc) · 1.97 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
from DBProcessor import DBSaver, DBLoader, DBSerializer
from CustomExceptions import NoSuchObjectInGameError
from DataProcessingInterfaces import ISerializer, ISaver, ILoader
from ClassGetter import ClassGetter
class GameData(ISerializer, ISaver, ILoader):
__objects_list = []
@staticmethod
def get_objects_list():
return GameData.__objects_list
@staticmethod
def add_obj(obj):
GameData.__objects_list.append(obj)
@staticmethod
def rem_obj(obj):
if obj in GameData.__objects_list:
GameData.__objects_list.remove(obj)
else:
raise NoSuchObjectInGameError(GameData.get_objects_list(), obj, "No such object exists in game")
@staticmethod
def serialize_data(data=None):
return Serializer.serialize_data(GameData.__objects_list)
@staticmethod
def save_data(data=None):
DBSaver.save_data(GameData.serialize_data())
@staticmethod
def load_data():
GameData.__objects_list = DBSerializer.deserialize(DBLoader.load_data())
class Serializer(ISerializer):
# serializes and returns only the attributes those an object's instance does not have
@staticmethod
def serialize_attr_dict(attr_dict):
obj_instance = object()
attr_list = []
types_list = []
values_list = []
for key, value in attr_dict:
if not hasattr(obj_instance, key):
attr_list.append(key)
types_list.append(ClassGetter.get_class_name(value))
values_list.append(value)
return [attr_list, types_list, values_list]
@staticmethod
def serialize_data(objects_list):
data_list = []
for instance in objects_list:
instance_data = [ClassGetter.get_class_name(instance), Serializer.serialize_attr_dict(instance.__dict__)]
# serialized attributes' dict is [attr_list, types_list, values_list] list
data_list.append(instance_data)
return data_list