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')
```
pull/81/head
Jeffrey Ryan 3 years ago committed by Michał Sałaban
parent 047c26686b
commit e929312e1a

@ -1,14 +1,20 @@
import six import six
from .backends.jsonrpc import JSONRPCDaemon
class Daemon(object): class Daemon(object):
"""Monero daemon. """Monero daemon.
Provides interface do a daemon instance. Provides interface to a daemon instance.
:param backend: a daemon backend :param backend: a daemon backend
:param \\**kwargs: arguments to initialize a JSONRPCDaemon instance if no backend is given
""" """
def __init__(self, backend): def __init__(self, backend=None, **kwargs):
self._backend = backend 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): def info(self):
""" """

@ -3,13 +3,13 @@ from sha3 import keccak_256
import struct import struct
from . import address from . import address
from .backends.jsonrpc import JSONRPCWallet
from . import base58 from . import base58
from . import const from . import const
from . import ed25519 from . import ed25519
from . import numbers from . import numbers
from .transaction import Payment, PaymentManager from .transaction import Payment, PaymentManager
class Wallet(object): class Wallet(object):
""" """
Monero wallet. 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). 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 \\**kwargs: arguments to initialize a JSONRPCWallet instance if no backend is given
""" """
accounts = None accounts = None
def __init__(self, backend): def __init__(self, backend=None, **kwargs):
self._backend = backend 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.incoming = PaymentManager(0, backend, 'in')
self.outgoing = PaymentManager(0, backend, 'out') self.outgoing = PaymentManager(0, backend, 'out')
self.refresh() self.refresh()

@ -147,3 +147,10 @@ class JSONRPCDaemonTestCase(JSONTestCase):
blk = self.daemon.block(height=693324) blk = self.daemon.block(height=693324)
self.assertEqual(len(blk.transactions), 105) self.assertEqual(len(blk.transactions), 105)
self.assertEqual(len(set(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)

@ -1241,3 +1241,15 @@ class JSONRPCWalletTestCase(JSONTestCase):
self.wallet = Wallet(JSONRPCWallet()) self.wallet = Wallet(JSONRPCWallet())
pmts = self.wallet.incoming(tx_id='1a75f3aa57f7912313e90ab1188b7a102dbb619a324c3db51bb856a2f40503f1') pmts = self.wallet.incoming(tx_id='1a75f3aa57f7912313e90ab1188b7a102dbb619a324c3db51bb856a2f40503f1')
self.assertEqual(len(pmts), 1) 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)

Loading…
Cancel
Save