Wallet functionalities updated

pull/100/head
asdf 3 years ago
parent 14c96dfb7f
commit 9c5b24f2ce

@ -5,6 +5,7 @@ import json
import logging import logging
import operator import operator
import requests import requests
import re
from ... import exceptions from ... import exceptions
from ...account import Account from ...account import Account
@ -317,6 +318,19 @@ class JSONRPCWallet(object):
"Method '{method}' failed with RPC Error of unknown code {code}, " "Method '{method}' failed with RPC Error of unknown code {code}, "
"message: {message}".format(method=method, data=data, result=result, **err)) "message: {message}".format(method=method, data=data, result=result, **err))
return result['result'] return result['result']
def open_wallet(self, filename, password=''):
params = {'filename': filename, 'password': password}
return self.raw_request('open_wallet', params=params)
def create_new_wallet(self, filename, password=''):
params = {'filename': filename, 'password': password, 'language': "English"}
return self.raw_request('create_wallet', params=params)
def close_current_wallet(self):
return self.raw_request('close_wallet')
_err2exc = { _err2exc = {
-2: exceptions.WrongAddress, -2: exceptions.WrongAddress,

@ -26,20 +26,23 @@ class Wallet(object):
The wallet exposes a number of methods that operate on the default account (of index 0). The wallet exposes a number of methods that operate on the default account (of index 0).
:param backend: a wallet backend :param backend: a wallet backend
:param wallet_open: if you started the RPC wallet with the argument '--wallet-file', leave it as it is. If the RPC wallet was launched with the argument '--wallet-dir', set its value to False.
:param \\**kwargs: arguments to initialize a :class:`JSONRPCWallet <monero.backends.jsonrpc.JSONRPCWallet>` :param \\**kwargs: arguments to initialize a :class:`JSONRPCWallet <monero.backends.jsonrpc.JSONRPCWallet>`
instance if no backend is given instance if no backend is given
""" """
accounts = None accounts = None
def __init__(self, backend=None, **kwargs): def __init__(self, backend=None, wallet_open=True, **kwargs):
if backend and len(kwargs): if backend and len(kwargs):
raise ValueError('backend already given, other arguments are extraneous') raise ValueError('backend already given, other arguments are extraneous')
self._backend = backend if backend else JSONRPCWallet(**kwargs) self._backend = backend if backend else JSONRPCWallet(**kwargs)
self.incoming = PaymentManager(0, self._backend, 'in') self.incoming = PaymentManager(0, self._backend, 'in')
self.outgoing = PaymentManager(0, self._backend, 'out') self.outgoing = PaymentManager(0, self._backend, 'out')
self.refresh()
if wallet_open:
self.refresh()
def refresh(self): def refresh(self):
""" """
Reloads the wallet and its accounts. By default, this method is called only once, Reloads the wallet and its accounts. By default, this method is called only once,
@ -66,7 +69,44 @@ class Wallet(object):
:rtype: int :rtype: int
""" """
return self._backend.height() return self._backend.height()
def open_wallet(self, filename, password=''):
"""
Open a existing wallet within the directory you specified with the argument --wallet-dir,
when launching 'monero-wallet-rpc.'
"""
if password == '':
self._backend.open_wallet(filename)
else:
self._backend.open_wallet(filename, password)
self.refresh()
def close_wallet(self):
"""
Saves and closes the wallet and clears the 'accounts' variable of a list type.
If you happened to launch the 'monero-wallet-rpc' with the argument --wallet-file,
you have to restart 'monero-wallet-rpc' without the argument --wallet-file and with the argument --wallet-dir.
"""
self._backend.close_current_wallet()
self.accounts.clear()
def create_wallet(self, filename, password=''):
"""
Creates a new wallet with the 'filename' argument as a name of the wallet file
within the directory you specified with the argument --wallet-dir.
Specify the password if needed.
"""
if password == '':
self._backend.create_new_wallet(filename)
else:
self._backend.create_new_wallet(filename, password)
self.refresh()
def spend_key(self): def spend_key(self):
""" """
Returns private spend key. None if wallet is view-only. Returns private spend key. None if wallet is view-only.

@ -36,6 +36,16 @@ class JSONRPCWalletTestCase(JSONTestCase):
'total_balance': 236153709446071, 'total_balance': 236153709446071,
'total_unlocked_balance': 236153709446071}} 'total_unlocked_balance': 236153709446071}}
def test_open_wallet(self):
self.wallet = Wallet(JSONRPCWallet(), wallet_open=False)
self.wallet.open_wallet('ReuseIt', 'hahaha')
accounts = self.wallet.accounts
self.assertEqual(type(self.wallet._backend), JSONRPCWallet)
self.assertNotEqual(len(accounts), 0)
@patch('monero.backends.jsonrpc.wallet.requests.post') @patch('monero.backends.jsonrpc.wallet.requests.post')
def test_seed(self, mock_post): def test_seed(self, mock_post):
mock_post.return_value.status_code = 200 mock_post.return_value.status_code = 200
@ -157,7 +167,7 @@ class JSONRPCWalletTestCase(JSONTestCase):
subaddr, index = w.accounts[1].new_address() subaddr, index = w.accounts[1].new_address()
self.assertIsInstance(subaddr, SubAddress) self.assertIsInstance(subaddr, SubAddress)
self.assertIsInstance(index, int) self.assertIsInstance(index, int)
@patch('monero.backends.jsonrpc.wallet.requests.post') @patch('monero.backends.jsonrpc.wallet.requests.post')
def test_incoming_confirmed(self, mock_post): def test_incoming_confirmed(self, mock_post):
mock_post.return_value.status_code = 200 mock_post.return_value.status_code = 200
@ -1271,3 +1281,15 @@ class JSONRPCWalletTestCase(JSONTestCase):
with self.assertRaises(ValueError): with self.assertRaises(ValueError):
wallet3 = Wallet(backend=JSONRPCWallet(), port=18089) wallet3 = Wallet(backend=JSONRPCWallet(), port=18089)
def test_close_wallet(self):
self.wallet = Wallet(JSONRPCWallet())
accounts_result = []
self.wallet.close_wallet()
accounts = self.wallet.accounts
self.assertEqual(len(accounts), 0)

Loading…
Cancel
Save