Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 4f3009e

Browse files
authored
add lock on TinyDB (#170)
1 parent 891b99f commit 4f3009e

File tree

2 files changed

+51
-41
lines changed

2 files changed

+51
-41
lines changed

‎coderbot/activity.py

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from tinydb import TinyDB, Query
2-
2+
fromthreadingimportLock
33
# Programs and Activities databases
44
class Activities():
55
_instance = None
@@ -13,34 +13,39 @@ def get_instance(cls):
1313
def __init__(self):
1414
self.activities = TinyDB("data/activities.json")
1515
self.query = Query()
16+
self.lock = Lock()
1617

1718
def load(self, name, default):
18-
if name and default is None:
19-
activities = self.activities.search(self.query.name == name)
20-
if len(activities) > 0:
21-
return activities[0]
22-
elif default is not None:
23-
if len(self.activities.search(self.query.default == True)) > 0:
24-
return self.activities.search(self.query.default == True)[0]
19+
with self.lock:
20+
if name and default is None:
21+
activities = self.activities.search(self.query.name == name)
22+
if len(activities) > 0:
23+
return activities[0]
24+
elif default is not None:
25+
if len(self.activities.search(self.query.default == True)) > 0:
26+
return self.activities.search(self.query.default == True)[0]
27+
return None
2528
return None
26-
return None
2729

2830
def save(self, name, activity):
29-
# if saved activity is "default", reset existing default activity to "non-default"
30-
if activity.get("default", False) is True:
31-
self.activities.update({'default': False})
32-
if self.activities.search(self.query.name == name) == []:
33-
self.activities.insert(activity)
34-
else:
35-
self.activities.update(activity, self.query.name == activity["name"])
31+
with self.lock:
32+
# if saved activity is "default", reset existing default activity to "non-default"
33+
if activity.get("default", False) is True:
34+
self.activities.update({'default': False})
35+
if self.activities.search(self.query.name == name) == []:
36+
self.activities.insert(activity)
37+
else:
38+
self.activities.update(activity, self.query.name == activity["name"])
3639

3740
def delete(self, name):
38-
activities = self.activities.search(self.query.name == name)
39-
if len(activities) > 0:
40-
activity = activities[0]
41-
if activity.get("default", False) is True:
42-
self.activities.update({'default': True}, self.query.stock == True)
43-
self.activities.remove(self.query.name == activity["name"])
41+
with self.lock:
42+
activities = self.activities.search(self.query.name == name)
43+
if len(activities) > 0:
44+
activity = activities[0]
45+
if activity.get("default", False) is True:
46+
self.activities.update({'default': True}, self.query.stock == True)
47+
self.activities.remove(self.query.name == activity["name"])
4448

4549
def list(self):
46-
return self.activities.all()
50+
with self.lock:
51+
return self.activities.all()

‎coderbot/program.py

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
import math
2727
from tinydb import TinyDB, Query
28+
from threading import Lock
2829

2930
import coderbot
3031
import camera
@@ -80,6 +81,7 @@ def __init__(self):
8081
self._programs = TinyDB(PROGRAMS_DB)
8182
# initialise DB from default programs
8283
query = Query()
84+
self.lock = Lock()
8385
for dirname, dirnames, filenames, in os.walk(PROGRAMS_PATH_DEFAULTS):
8486
dirnames
8587
for filename in filenames:
@@ -102,28 +104,31 @@ def prog_list(self):
102104
return self._programs.all()
103105

104106
def save(self, program):
105-
query = Query()
106-
self._program = program
107-
program_db_entry = self._program.as_dict()
108-
if self._programs.search(query.name == program.name) != []:
109-
self._programs.update(program_db_entry, query.name == program.name)
110-
else:
111-
self._programs.insert(program_db_entry)
107+
with self.lock:
108+
query = Query()
109+
self._program = program
110+
program_db_entry = self._program.as_dict()
111+
if self._programs.search(query.name == program.name) != []:
112+
self._programs.update(program_db_entry, query.name == program.name)
113+
else:
114+
self._programs.insert(program_db_entry)
112115

113116
def load(self, name):
114-
query = Query()
115-
program_db_entries = self._programs.search(query.name == name)
116-
if len(program_db_entries) > 0:
117-
prog_db_entry = program_db_entries[0]
118-
logging.debug(prog_db_entry)
119-
self._program = Program.from_dict(prog_db_entry)
120-
return self._program
121-
return None
117+
with self.lock:
118+
query = Query()
119+
program_db_entries = self._programs.search(query.name == name)
120+
if len(program_db_entries) > 0:
121+
prog_db_entry = program_db_entries[0]
122+
logging.debug(prog_db_entry)
123+
self._program = Program.from_dict(prog_db_entry)
124+
return self._program
125+
return None
122126

123127
def delete(self, name):
124-
query = Query()
125-
program_db_entries = self._programs.search(query.name == name)
126-
self._programs.remove(query.name == name)
128+
with self.lock:
129+
query = Query()
130+
program_db_entries = self._programs.search(query.name == name)
131+
self._programs.remove(query.name == name)
127132

128133
def create(self, name, code):
129134
self._program = Program(name, code)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /