From e929312e1a5f09ac5953f00c9377a8ce1d2594d4 Mon Sep 17 00:00:00 2001 From: Jeffrey Ryan Date: Sun, 17 Jan 2021 14:56:13 -0600 Subject: [PATCH] Default backends for Daemon and Wallet If no backend is specified, then the backend defaults to JSONRPCDaemon and JSONRPCWallet for Daemon and Wallet, respectively. Also if no backend is specified, then any kwargs passed to Daemon and Wallet initializers will be used to construct a backend with the default JSONRPC- backends. This will make using Daemon and Wallet much more seamless for the user. The following code snippets are functionally identical: Old: ``` from monero.daemon import Daemon from monero.backends.jsonrpc import JSONRPCDaemon daemon1 = Daemon(JSONRPCDaemon()) daemon2 = Daemon(JSONRPCDaemon(host='node.xmr.to')) ``` New: ``` from monero.daemon import Daemon daemon1 = Daemon() daemon2 = Daemon(host='node.xmr.to') ``` --- monero/daemon.py | 12 +++++++++--- monero/wallet.py | 10 +++++++--- tests/test_jsonrpcdaemon.py | 7 +++++++ tests/test_jsonrpcwallet.py | 12 ++++++++++++ 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/monero/daemon.py b/monero/daemon.py index f900caa..7f7e73e 100644 --- a/monero/daemon.py +++ b/monero/daemon.py @@ -1,14 +1,20 @@ import six +from .backends.jsonrpc import JSONRPCDaemon + class Daemon(object): """Monero daemon. - Provides interface do a daemon instance. + Provides interface to a daemon instance. :param backend: a daemon backend + :param \\**kwargs: arguments to initialize a JSONRPCDaemon instance if no backend is given """ - def __init__(self, backend): - self._backend = backend + def __init__(self, backend=None, **kwargs): + if backend and len(kwargs): + raise ValueError('backend already given, other arguments are extraneous') + + self._backend = backend if backend else JSONRPCDaemon(**kwargs) def info(self): """ diff --git a/monero/wallet.py b/monero/wallet.py index be6a8f3..1759094 100644 --- a/monero/wallet.py +++ b/monero/wallet.py @@ -3,13 +3,13 @@ from sha3 import keccak_256 import struct from . import address +from .backends.jsonrpc import JSONRPCWallet from . import base58 from . import const from . import ed25519 from . import numbers from .transaction import Payment, PaymentManager - class Wallet(object): """ Monero wallet. @@ -26,11 +26,15 @@ class Wallet(object): The wallet exposes a number of methods that operate on the default account (of index 0). :param backend: a wallet backend + :param \\**kwargs: arguments to initialize a JSONRPCWallet instance if no backend is given """ accounts = None - def __init__(self, backend): - self._backend = backend + def __init__(self, backend=None, **kwargs): + if backend and len(kwargs): + raise ValueError('backend already given, other arguments are extraneous') + + self._backend = backend if backend else JSONRPCWallet(**kwargs) self.incoming = PaymentManager(0, backend, 'in') self.outgoing = PaymentManager(0, backend, 'out') self.refresh() diff --git a/tests/test_jsonrpcdaemon.py b/tests/test_jsonrpcdaemon.py index 34aa9af..cfdf149 100644 --- a/tests/test_jsonrpcdaemon.py +++ b/tests/test_jsonrpcdaemon.py @@ -147,3 +147,10 @@ class JSONRPCDaemonTestCase(JSONTestCase): blk = self.daemon.block(height=693324) self.assertEqual(len(blk.transactions), 105) self.assertEqual(len(set(blk.transactions)), 105) + + def test_init(self): + daemon1 = Daemon(host='localhost') + daemon2 = Daemon() + + with self.assertRaises(ValueError): + daemon3 = Daemon(backend=JSONRPCDaemon(), port=18089) diff --git a/tests/test_jsonrpcwallet.py b/tests/test_jsonrpcwallet.py index 5223bca..1e30118 100644 --- a/tests/test_jsonrpcwallet.py +++ b/tests/test_jsonrpcwallet.py @@ -1241,3 +1241,15 @@ class JSONRPCWalletTestCase(JSONTestCase): self.wallet = Wallet(JSONRPCWallet()) pmts = self.wallet.incoming(tx_id='1a75f3aa57f7912313e90ab1188b7a102dbb619a324c3db51bb856a2f40503f1') self.assertEqual(len(pmts), 1) + + @responses.activate + def test_init(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_incoming_from_self__issue_71-00-get_accounts.json'), + status=200) + + wallet1 = Wallet(host='127.0.0.1') + wallet2 = Wallet() + + with self.assertRaises(ValueError): + wallet3 = Wallet(backend=JSONRPCWallet(), port=18089)