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
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):
"""

@ -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()

@ -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)

@ -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)

Loading…
Cancel
Save