diff --git a/bigchaindb/core.py b/bigchaindb/core.py index fae16e9d..4fb84722 100644 --- a/bigchaindb/core.py +++ b/bigchaindb/core.py @@ -77,7 +77,7 @@ class Bigchain(object): federation = property(lambda self: set(self.nodes_except_me + [self.me])) """ Set of federation member public keys """ - def write_transaction(self, signed_transaction, **kwargs): + def write_transaction(self, signed_transaction): """Write the transaction to bigchain. When first writing a transaction to the bigchain the transaction will be kept in a backlog until diff --git a/bigchaindb/tendermint/lib.py b/bigchaindb/tendermint/lib.py index 66b568e2..61d1834b 100644 --- a/bigchaindb/tendermint/lib.py +++ b/bigchaindb/tendermint/lib.py @@ -19,21 +19,21 @@ logger = logging.getLogger(__name__) TENDERMINT_HOST = getenv('TENDERMINT_HOST', 'localhost') TENDERMINT_PORT = getenv('TENDERMINT_PORT', '46657') ENDPOINT = 'http://{}:{}/'.format(TENDERMINT_HOST, TENDERMINT_PORT) +MODE_LIST = ('broadcast_tx_async', + 'broadcast_tx_sync', + 'broadcast_tx_commit') class BigchainDB(Bigchain): def post_transaction(self, transaction, mode): """Submit a valid transaction to the mempool.""" - mode_list = ('broadcast_tx_async', - 'broadcast_tx_sync', - 'broadcast_tx_commit') - if not mode or mode['mode'] not in mode_list: + if not mode or mode not in MODE_LIST: raise ValidationError(('Mode must be one of the following {}.') - .format(', '.join(mode_list))) + .format(', '.join(MODE_LIST))) payload = { - 'method': mode['mode'], + 'method': mode, 'jsonrpc': '2.0', 'params': [encode_transaction(transaction.to_dict())], 'id': str(uuid4()) @@ -41,7 +41,7 @@ class BigchainDB(Bigchain): # TODO: handle connection errors! requests.post(ENDPOINT, json=payload) - def write_transaction(self, transaction, **mode): + def write_transaction(self, transaction, mode): # This method offers backward compatibility with the Web API. """Submit a valid transaction to the mempool.""" self.post_transaction(transaction, mode) diff --git a/bigchaindb/web/views/transactions.py b/bigchaindb/web/views/transactions.py index e53058b4..c746f2ad 100644 --- a/bigchaindb/web/views/transactions.py +++ b/bigchaindb/web/views/transactions.py @@ -59,6 +59,7 @@ class TransactionListApi(Resource): parser.add_argument('mode', type=parameters.valid_mode, default='broadcast_tx_async') args = parser.parse_args() + mode = str(args['mode']) pool = current_app.config['bigchain_pool'] @@ -90,7 +91,7 @@ class TransactionListApi(Resource): 'Invalid transaction ({}): {}'.format(type(e).__name__, e) ) else: - bigchain.write_transaction(tx_obj, **args) + bigchain.write_transaction(tx_obj, mode) response = jsonify(tx) response.status_code = 202 diff --git a/tests/tendermint/test_lib.py b/tests/tendermint/test_lib.py index 76c7c744..3355683c 100644 --- a/tests/tendermint/test_lib.py +++ b/tests/tendermint/test_lib.py @@ -76,7 +76,7 @@ def test_write_and_post_transaction(mock_post, b): .sign([alice.private_key]).to_dict() tx = b.validate_transaction(tx) - b.write_transaction(tx, **{'mode': 'broadcast_tx_async'}) + b.write_transaction(tx, 'broadcast_tx_async') assert mock_post.called args, kwargs = mock_post.call_args @@ -87,9 +87,9 @@ def test_write_and_post_transaction(mock_post, b): @patch('requests.post') @pytest.mark.parametrize('mode', [ - {'mode': 'broadcast_tx_async'}, - {'mode': 'broadcast_tx_sync'}, - {'mode': 'broadcast_tx_commit'} + 'broadcast_tx_async', + 'broadcast_tx_sync', + 'broadcast_tx_commit' ]) def test_post_transaction_valid_modes(mock_post, b, mode): from bigchaindb.models import Transaction @@ -100,10 +100,10 @@ def test_post_transaction_valid_modes(mock_post, b, mode): asset=None) \ .sign([alice.private_key]).to_dict() tx = b.validate_transaction(tx) - b.write_transaction(tx, **mode) + b.write_transaction(tx, mode) args, kwargs = mock_post.call_args - assert mode['mode'] == kwargs['json']['method'] + assert mode == kwargs['json']['method'] def test_post_transaction_invalid_mode(b): @@ -117,4 +117,4 @@ def test_post_transaction_invalid_mode(b): .sign([alice.private_key]).to_dict() tx = b.validate_transaction(tx) with pytest.raises(ValidationError): - b.write_transaction(tx, **{'mode': 'nope'}) + b.write_transaction(tx, 'nope')