aboutsummaryrefslogtreecommitdiff
path: root/utils/python-rpc/console.py
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2019-04-06 11:34:59 +0000
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2019-04-11 11:08:33 +0000
commit047af5c3430c90f93b7d00bcd86b189115b7f685 (patch)
tree76d896a804170dd23bb9fa3548c20d87e711276e /utils/python-rpc/console.py
parentcmake: always detect python, it's neeed for some tests (diff)
downloadmonero-047af5c3430c90f93b7d00bcd86b189115b7f685.tar.xz
console.py: can now connect to several daemons/wallets
Also throw exceptions instead of print+exit, since that makes the error print last, below the python stack trace, where it's much less easy to miss it.
Diffstat (limited to 'utils/python-rpc/console.py')
-rwxr-xr-xutils/python-rpc/console.py118
1 files changed, 65 insertions, 53 deletions
diff --git a/utils/python-rpc/console.py b/utils/python-rpc/console.py
index 1d831c711..57a04528b 100755
--- a/utils/python-rpc/console.py
+++ b/utils/python-rpc/console.py
@@ -5,63 +5,62 @@ import sys
import subprocess
import socket
import urlparse
-from framework import rpc
-from framework import wallet
-from framework import daemon
+import framework.rpc
+import framework.daemon
+import framework.wallet
-scheme='http'
-host='127.0.0.1'
-port=None
-
-USAGE = 'usage: python -i console.py [[scheme]<host>:]<port>'
-try:
+USAGE = 'usage: python -i console.py [[[scheme]<host>:]<port> [[[scheme]<host>:]<port>...]]'
+daemons = []
+wallets = []
+rpcs = []
+for n in range(1, len(sys.argv)):
+ scheme='http'
+ host='127.0.0.1'
+ port=None
try:
- port = int(sys.argv[1])
- except:
- t = urlparse.urlparse(sys.argv[1], allow_fragments = False)
- scheme = t.scheme or scheme
- host = t.hostname or host
- port = t.port or port
- if scheme != 'http' and scheme != 'https':
- print(USAGE)
- sys.exit(1)
- if port <= 0 or port > 65535:
- print(USAGE)
- sys.exit(1)
-except Exception, e:
- print('Error: ' + str(e))
- print(USAGE)
- sys.exit(1)
+ try:
+ port = int(sys.argv[n])
+ except:
+ t = urlparse.urlparse(sys.argv[n], allow_fragments = False)
+ scheme = t.scheme or scheme
+ host = t.hostname or host
+ port = t.port or port
+ if scheme != 'http' and scheme != 'https':
+ raise Exception(USAGE)
+ if port <= 0 or port > 65535:
+ raise Exception(USAGE)
+ except Exception, e:
+ print('Error: ' + str(e))
+ raise Exception(USAGE)
-# check for open port
-s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-s.settimeout(1)
-if s.connect_ex((host, port)) != 0:
- print('No wallet or daemon RPC on port ' + str(port))
- sys.exit(1)
-s.close()
+ # check for open port
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ s.settimeout(1)
+ if s.connect_ex((host, port)) != 0:
+ raise Exception('No wallet or daemon RPC on port ' + str(port))
+ s.close()
-# both wallet and daemon have a get_version JSON RPC
-rpc = rpc.JSONRPC('{protocol}://{host}:{port}'.format(protocol=scheme, host=host, port=port))
-get_version = {
- 'method': 'get_version',
- 'jsonrpc': '2.0',
- 'id': '0'
-}
-try:
- res = rpc.send_json_rpc_request(get_version)
-except Exception, e:
- print('Failed to call version RPC: ' + str(e))
- sys.exit(1)
+ # both wallet and daemon have a get_version JSON RPC
+ rpc = framework.rpc.JSONRPC('{protocol}://{host}:{port}'.format(protocol=scheme, host=host, port=port))
+ get_version = {
+ 'method': 'get_version',
+ 'jsonrpc': '2.0',
+ 'id': '0'
+ }
+ try:
+ res = rpc.send_json_rpc_request(get_version)
+ except Exception, e:
+ raise Exception('Failed to call version RPC: ' + str(e))
-if 'version' not in res:
- print('Server is not a monero process')
- sys.exit(1)
+ if 'version' not in res:
+ raise Exception('Server is not a Monero process')
-if 'status' in res:
- rpc = daemon.Daemon(port=port)
-else:
- rpc = wallet.Wallet(port=port)
+ if 'status' in res:
+ daemons.append(framework.daemon.Daemon(port=port))
+ rpcs.append(daemons[-1])
+ else:
+ wallets.append(framework.wallet.Wallet(port=port))
+ rpcs.append(wallets[-1])
# add tab completion if we can: https://stackoverflow.com/questions/246725
try:
@@ -72,5 +71,18 @@ else:
import rlcompleter
readline.parse_and_bind('tab: complete')
-print('Connected to %s RPC on port %u' % ('daemon' if 'status' in res else 'wallet', port))
-print('The \'rpc\' object may now be used to use the API')
+if len(daemons) == 1:
+ daemon = daemons[0]
+if len(wallets) == 1:
+ wallet = wallets[0]
+
+didx = 0
+widx = 0
+for rpc in rpcs:
+ if type(rpc) == framework.daemon.Daemon:
+ var = "daemon" if len(daemons) == 1 else "daemons[" + str(didx) + "]"
+ didx += 1
+ else:
+ var = "wallet" if len(wallets) == 1 else "wallets[" + str(widx) + "]"
+ widx += 1
+ print('Variable \'%s\' connected to %s RPC on %s:%u' % (var, 'daemon' if type(rpc) == framework.daemon.Daemon else 'wallet', rpc.host ,rpc.port))