diff options
| author | Riccardo Spagni <ric@spagni.net> | 2019-04-11 13:14:44 +0200 |
|---|---|---|
| committer | Riccardo Spagni <ric@spagni.net> | 2019-04-11 13:14:44 +0200 |
| commit | 083271375ae14bf8b3495c9c3f4490ae29cb9905 (patch) | |
| tree | f384a6e92c3dbb40c8644275fa121b699b2ce7a6 /utils/python-rpc/console.py | |
| parent | e03b9bcdfdb1961e9928b31daa3d548ee5d7291f (diff) | |
| parent | 0575794f53b3481a08a8d680e80765c1f1b13729 (diff) | |
| download | monzero-core-083271375ae14bf8b3495c9c3f4490ae29cb9905.tar.gz monzero-core-083271375ae14bf8b3495c9c3f4490ae29cb9905.tar.xz monzero-core-083271375ae14bf8b3495c9c3f4490ae29cb9905.zip | |
Merge pull request #5383
0575794f console: simple shell over console.py (moneromooo-monero)
047af5c3 console.py: can now connect to several daemons/wallets (moneromooo-monero)
9f9571aa cmake: always detect python, it's neeed for some tests (moneromooo-monero)
8646bd00 functional_tests: exit with 1 if any test fails (moneromooo-monero)
6fd8834d console.py: add tab completion (moneromooo-monero)
04a20cb2 functional_tests: cold signing key images/outputs import/export (moneromooo-monero)
798e3cad functional_tests: add double spend detection tests (moneromooo-monero)
7c657bb2 functional_tests: add alt chains tests (moneromooo-monero)
f8be31d2 functional_tests: add wallet creation language tests (moneromooo-monero)
2d68b31f functional_tests: add more wallet tests (moneromooo-monero)
23f86dad python-rpc: add set_log_level and set_log_categories (moneromooo-monero)
b3a32d55 functional_tests: add describe_transfer tests (moneromooo-monero)
108f4375 console.py: support connecting to any host, not just 127.0.0.1 (moneromooo-monero)
064ab123 functional_tests: add more blockchain related tests (moneromooo-monero)
21b1ac1d functional_tests: add bans tests (moneromooo-monero)
Diffstat (limited to 'utils/python-rpc/console.py')
| -rwxr-xr-x | utils/python-rpc/console.py | 111 |
1 files changed, 75 insertions, 36 deletions
diff --git a/utils/python-rpc/console.py b/utils/python-rpc/console.py index ab0d9f27f..57a04528b 100755 --- a/utils/python-rpc/console.py +++ b/utils/python-rpc/console.py @@ -4,46 +4,85 @@ from __future__ import print_function import sys import subprocess import socket -from framework import rpc -from framework import wallet -from framework import daemon +import urlparse +import framework.rpc +import framework.daemon +import framework.wallet -USAGE = 'usage: python -i console.py <port>' -try: - port = int(sys.argv[1]) -except: - print(USAGE) - sys.exit(1) +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: + 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(('127.0.0.1', 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='http', host='127.0.0.1', 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: + raise Exception('Server is not a Monero process') -if 'version' not in res: - print('Server is not a monero process') - sys.exit(1) + 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]) -if 'status' in res: - rpc = daemon.Daemon(port=port) +# add tab completion if we can: https://stackoverflow.com/questions/246725 +try: + import readline +except: + pass else: - rpc = wallet.Wallet(port=port) + import rlcompleter + readline.parse_and_bind('tab: complete') + +if len(daemons) == 1: + daemon = daemons[0] +if len(wallets) == 1: + wallet = wallets[0] -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') +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)) |
