-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.py
93 lines (72 loc) · 2.18 KB
/
utils.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
import json
class PersistedList:
"""A list that persists to a file"""
def __init__(self, filename):
self.filename = filename
self.items = []
self.load()
def __repr__(self):
return f"PersistableList(items={self.items})"
def save(self):
with open(self.filename, "w") as f:
json.dump(self.items, f)
def load(self):
try:
with open(self.filename, "r") as f:
self.items = json.load(f)
except FileNotFoundError:
pass
def append(self, item):
if item not in self.items:
self.items.append(item)
self.save()
def pop(self, index=0):
item = self.items.pop(index)
self.save()
return item
def remove(self, item):
try:
self.items.remove(item)
self.save()
except ValueError:
pass
class PersistableDict:
"""A dict that persists to a file"""
def __init__(self, filename, default_value=None):
self.filename = filename
self.data = {}
self.load()
if self.data == {}:
self.data = default_value
self.save()
def __repr__(self):
return f"PersistableDict(items={self.data})"
def save(self):
with open(self.filename, "w") as f:
json.dump(self.data, f)
def load(self):
try:
with open(self.filename, "r") as f:
self.data = json.load(f)
except FileNotFoundError:
pass
class Persistable:
"""Base class for persistable objects"""
def __init__(self, filename, default_value=None):
self.filename = filename
self.data = None
self.load()
if self.data is None and default_value is not None:
self.data = default_value
self.save()
def __repr__(self):
return f"Persistable(filename={self.filename})"
def save(self):
with open(self.filename, "w") as f:
json.dump(self.data, f)
def load(self):
try:
with open(self.filename, "r") as f:
self.data = json.load(f)
except FileNotFoundError:
pass