Browse Source
This is a regression from 7ca89f56ee, which introduced StoredList.
The newly added test was failing without the change.
```
Traceback (most recent call last):
File "/home/user/wspace/electrum/electrum/gui/qt/main_window.py", line 1786, in new_contact_dialog
self.set_contact(line2.text(), line1.text())
File "/home/user/wspace/electrum/electrum/gui/qt/main_window.py", line 1435, in set_contact
self.contacts[address] = ('address', label)
File "/home/user/wspace/electrum/electrum/contacts.py", line 75, in __setitem__
self.save()
File "/home/user/wspace/electrum/electrum/contacts.py", line 62, in save
self.db.put('contacts', dict(self))
File "/home/user/wspace/electrum/electrum/json_db.py", line 42, in wrapper
return func(self, *args, **kwargs)
File "/home/user/wspace/electrum/electrum/json_db.py", line 318, in put
self.data[key] = copy.deepcopy(value)
File "/usr/lib/python3.10/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/usr/lib/python3.10/copy.py", line 231, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/lib/python3.10/copy.py", line 172, in deepcopy
y = _reconstruct(x, memo, *rv)
File "/usr/lib/python3.10/copy.py", line 271, in _reconstruct
state = deepcopy(state, memo)
File "/usr/lib/python3.10/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/usr/lib/python3.10/copy.py", line 231, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/lib/python3.10/copy.py", line 172, in deepcopy
y = _reconstruct(x, memo, *rv)
File "/usr/lib/python3.10/copy.py", line 271, in _reconstruct
state = deepcopy(state, memo)
File "/usr/lib/python3.10/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/usr/lib/python3.10/copy.py", line 231, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/lib/python3.10/copy.py", line 161, in deepcopy
rv = reductor(4)
TypeError: cannot pickle '_thread.RLock' object
```
master
2 changed files with 32 additions and 0 deletions
@ -0,0 +1,31 @@ |
|||||||
|
import os |
||||||
|
|
||||||
|
from . import ElectrumTestCase |
||||||
|
|
||||||
|
from electrum.simple_config import SimpleConfig |
||||||
|
from electrum.wallet import restore_wallet_from_text, Abstract_Wallet |
||||||
|
from electrum.daemon import Daemon |
||||||
|
|
||||||
|
|
||||||
|
class TestContacts(ElectrumTestCase): |
||||||
|
TESTNET = True |
||||||
|
|
||||||
|
def setUp(self): |
||||||
|
super().setUp() |
||||||
|
self.config = SimpleConfig({'electrum_path': self.electrum_path}) |
||||||
|
self.wallet_path = os.path.join(self.electrum_path, "somewallet1") |
||||||
|
|
||||||
|
async def test_saving_contacts(self): |
||||||
|
text = 'cross end slow expose giraffe fuel track awake turtle capital ranch pulp' |
||||||
|
d = restore_wallet_from_text(text, path=self.wallet_path, gap_limit=2, config=self.config) |
||||||
|
w = d['wallet'] # type: Abstract_Wallet |
||||||
|
w.contacts["myNNuLYNgHE92nGQuJd5mXo6gy9gKXEDyQ"] = ("address", "alice") |
||||||
|
w.contacts["tb1q4syjltptqwhe62t3u5gwz9nsw87kmcwx003z05"] = ("address", "bob") |
||||||
|
self.assertEqual(2, len(w.contacts)) |
||||||
|
await w.stop() |
||||||
|
del w |
||||||
|
# re-open wallet from disk |
||||||
|
w = Daemon._load_wallet(self.wallet_path, password=None, config=self.config) |
||||||
|
self.assertEqual(2, len(w.contacts)) |
||||||
|
w.contacts["n4STqqWPrvkapAyvXY2wJzfoKMnuJbDWoH"] = ("address", "carol") |
||||||
|
self.assertEqual(3, len(w.contacts)) |
||||||
Loading…
Reference in new issue