-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathlogger.py
50 lines (42 loc) · 1.44 KB
/
logger.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
import os
import pickle
import random
class Logger(object):
def __init__(self, index=None, path='logs/', always_save=True):
if index is None:
index = '{:06x}'.format(random.getrandbits(6 * 4))
self.index = index
self.filename = os.path.join(path, '{}.p'.format(self.index))
self._dict = {}
self.logs = []
self.always_save = always_save
def __getitem__(self, k):
return self._dict[k]
def __setitem__(self,k,v):
self._dict[k] = v
@staticmethod
def load(filename, path='logs/'):
if not os.path.isfile(filename):
filename = os.path.join(path, '{}.p'.format(filename))
if not os.path.isfile(filename):
raise ValueError("{} is not a valid filename".format(filename))
with open(filename, 'rb') as f:
return pickle.load(f)
def save(self):
with open(self.filename,'wb') as f:
pickle.dump(self, f)
def get(self, _type):
l = [x for x in self.logs if x['_type'] == _type]
l = [x['_data'] if '_data' in x else x for x in l]
# if len(l) == 1:
# return l[0]
return l
def append(self, _type, *args, **kwargs):
kwargs['_type'] = _type
if len(args)==1:
kwargs['_data'] = args[0]
elif len(args) > 1:
kwargs['_data'] = args
self.logs.append(kwargs)
if self.always_save:
self.save()