Skip to content

Commit 0e1a17e

Browse files
committed
further fix/tests for record edits clobbering DictDB
1 parent dbad051 commit 0e1a17e

2 files changed

Lines changed: 9 additions & 3 deletions

File tree

IPython/parallel/controller/dictdb.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
# the file COPYING, distributed as part of this software.
4747
#-----------------------------------------------------------------------------
4848

49-
from copy import copy
49+
from copy import deepcopy as copy
5050
from datetime import datetime
5151

5252
from IPython.config.configurable import LoggingConfigurable
@@ -129,7 +129,7 @@ def _extract_subdict(self, rec, keys):
129129
d['msg_id'] = rec['msg_id']
130130
for key in keys:
131131
d[key] = rec[key]
132-
return d
132+
return copy(d)
133133

134134
def add_record(self, msg_id, rec):
135135
"""Add a new Task Record, by msg_id."""

IPython/parallel/tests/test_db.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,29 +197,35 @@ def test_pop_safe_get(self):
197197
rec = self.db.get_record(msg_id)
198198
rec.pop('buffers')
199199
rec['garbage'] = 'hello'
200+
rec['header']['msg_id'] = 'fubar'
200201
rec2 = self.db.get_record(msg_id)
201202
self.assertTrue('buffers' in rec2)
202203
self.assertFalse('garbage' in rec2)
204+
self.assertEquals(rec2['header']['msg_id'], msg_id)
203205

204206
def test_pop_safe_find(self):
205207
"""editing query results shouldn't affect record [find]"""
206208
msg_id = self.db.get_history()[-1]
207209
rec = self.db.find_records({'msg_id' : msg_id})[0]
208210
rec.pop('buffers')
209211
rec['garbage'] = 'hello'
212+
rec['header']['msg_id'] = 'fubar'
210213
rec2 = self.db.find_records({'msg_id' : msg_id})[0]
211214
self.assertTrue('buffers' in rec2)
212215
self.assertFalse('garbage' in rec2)
216+
self.assertEquals(rec2['header']['msg_id'], msg_id)
213217

214218
def test_pop_safe_find_keys(self):
215219
"""editing query results shouldn't affect record [find+keys]"""
216220
msg_id = self.db.get_history()[-1]
217-
rec = self.db.find_records({'msg_id' : msg_id}, keys=['buffers'])[0]
221+
rec = self.db.find_records({'msg_id' : msg_id}, keys=['buffers', 'header'])[0]
218222
rec.pop('buffers')
219223
rec['garbage'] = 'hello'
224+
rec['header']['msg_id'] = 'fubar'
220225
rec2 = self.db.find_records({'msg_id' : msg_id})[0]
221226
self.assertTrue('buffers' in rec2)
222227
self.assertFalse('garbage' in rec2)
228+
self.assertEquals(rec2['header']['msg_id'], msg_id)
223229

224230

225231
class TestSQLiteBackend(TestDictBackend):

0 commit comments

Comments
 (0)