mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-11 04:12:36 -03:00
d8b12a75db
It's nice to be able to use named options and positional arguments together. Most shell tools accept both, and python functions combine options and arguments allowing them to be passed with even more flexibility. This change adds support for python's approach so as a motivating example: bitcoin-cli -named createwallet wallet_name=mywallet load_on_startup=1 Can be shortened to: bitcoin-cli -named createwallet mywallet load_on_startup=1 JSON-RPC standard doesn't have a convention for passing named and positional parameters together, so this implementation makes one up and interprets any unused "args" named parameter as a positional parameter array.
38 lines
1.6 KiB
Python
Executable file
38 lines
1.6 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
# Copyright (c) 2016-2019 The Bitcoin Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
"""Test using named arguments for RPCs."""
|
|
|
|
from test_framework.test_framework import BitcoinTestFramework
|
|
from test_framework.util import (
|
|
assert_equal,
|
|
assert_raises_rpc_error,
|
|
)
|
|
|
|
class NamedArgumentTest(BitcoinTestFramework):
|
|
def set_test_params(self):
|
|
self.num_nodes = 1
|
|
self.supports_cli = False
|
|
|
|
def run_test(self):
|
|
node = self.nodes[0]
|
|
h = node.help(command='getblockchaininfo')
|
|
assert h.startswith('getblockchaininfo\n')
|
|
|
|
assert_raises_rpc_error(-8, 'Unknown named parameter', node.help, random='getblockchaininfo')
|
|
|
|
h = node.getblockhash(height=0)
|
|
node.getblock(blockhash=h)
|
|
|
|
assert_equal(node.echo(), [])
|
|
assert_equal(node.echo(arg0=0,arg9=9), [0] + [None]*8 + [9])
|
|
assert_equal(node.echo(arg1=1), [None, 1])
|
|
assert_equal(node.echo(arg9=None), [None]*10)
|
|
assert_equal(node.echo(arg0=0,arg3=3,arg9=9), [0] + [None]*2 + [3] + [None]*5 + [9])
|
|
assert_equal(node.echo(0, 1, arg3=3, arg5=5), [0, 1, None, 3, None, 5])
|
|
assert_raises_rpc_error(-8, "Parameter arg1 specified twice both as positional and named argument", node.echo, 0, 1, arg1=1)
|
|
assert_raises_rpc_error(-8, "Parameter arg1 specified twice both as positional and named argument", node.echo, 0, None, 2, arg1=1)
|
|
|
|
if __name__ == '__main__':
|
|
NamedArgumentTest().main()
|