removed duplicate code

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
This commit is contained in:
Lorenz Herzberger 2023-01-12 15:47:28 +01:00
parent 23a8eda910
commit 0286ecc163
No known key found for this signature in database
GPG Key ID: FA5EE906EB55316A
4 changed files with 12 additions and 99 deletions

View File

@ -70,20 +70,6 @@ def store_transaction(connection, transaction):
raise NotImplementedError
@singledispatch
def store_governance_transactions(connection, transactions):
"""Store the list of governance transactions."""
raise NotImplementedError
@singledispatch
def store_governance_transaction(connection, transaction):
"""Store a single governance transaction."""
raise NotImplementedError
@singledispatch
def get_transaction_by_id(connection, transaction_id):
"""Get the transaction by transaction id."""

View File

@ -113,9 +113,9 @@ def store_transaction_outputs(connection, output: Output, index: int) -> str:
@register_query(TarantoolDBConnection)
def store_transactions(connection, signed_transactions: list):
def store_transactions(connection, signed_transactions: list, table = TARANT_TABLE_TRANSACTION):
for transaction in signed_transactions:
store_transaction(connection, transaction)
store_transaction(connection, transaction, table)
[
store_transaction_outputs(connection, Output.outputs_dict(output, transaction["id"]), index)
for index, output in enumerate(transaction[TARANT_TABLE_OUTPUT])
@ -123,7 +123,7 @@ def store_transactions(connection, signed_transactions: list):
@register_query(TarantoolDBConnection)
def store_transaction(connection, transaction):
def store_transaction(connection, transaction, table = TARANT_TABLE_TRANSACTION):
scripts = None
if TARANT_TABLE_SCRIPT in transaction:
scripts = transaction[TARANT_TABLE_SCRIPT]
@ -137,7 +137,7 @@ def store_transaction(connection, transaction):
scripts,
)
try:
connection.run(connection.space(TARANT_TABLE_TRANSACTION).insert(tx), only_data=False)
connection.run(connection.space(table).insert(tx), only_data=False)
except Exception as e:
logger.info(f"Could not insert transactions: {e}")
if e.args[0] == 3 and e.args[1].startswith('Duplicate key exists in'):
@ -146,39 +146,6 @@ def store_transaction(connection, transaction):
raise OperationDataInsertionError()
@register_query(TarantoolDBConnection)
def store_governance_transactions(connection, signed_transactions: list):
for transaction in signed_transactions:
store_governance_transaction(connection, transaction)
[
store_transaction_outputs(connection, Output.outputs_dict(output, transaction["id"]), index)
for index, output in enumerate(transaction[TARANT_TABLE_OUTPUT])
]
@register_query(TarantoolDBConnection)
def store_governance_transaction(connection, transaction):
scripts = None
if TARANT_TABLE_SCRIPT in transaction:
scripts = transaction[TARANT_TABLE_SCRIPT]
tx = (
transaction["id"],
transaction["operation"],
transaction["version"],
transaction["metadata"],
transaction["assets"],
transaction["inputs"],
scripts,
)
try:
connection.run(connection.space(TARANT_TABLE_GOVERNANCE).insert(tx), only_data=False)
except Exception as e:
if e.args[0] == 3 and e.args[1].startswith('Duplicate key exists in'):
raise CriticalDoubleSpend()
else:
raise OperationDataInsertionError()
@register_query(TarantoolDBConnection)
def get_transaction_by_id(connection, transaction_id, table=TARANT_TABLE_TRANSACTION):
txs = connection.run(connection.space(table).select(transaction_id, index=TARANT_ID_SEARCH))

View File

@ -163,8 +163,8 @@ class Planetmint(object):
else:
txns.append(transaction)
backend.query.store_transactions(self.connection, txns)
backend.query.store_governance_transactions(self.connection, gov_txns)
backend.query.store_transactions(self.connection, txns, TARANT_TABLE_TRANSACTION)
backend.query.store_transactions(self.connection, gov_txns, TARANT_TABLE_GOVERNANCE)
def delete_transactions(self, txs):
return backend.query.delete_transactions(self.connection, txs)

View File

@ -170,69 +170,29 @@ def test_update_utxoset(b, signed_create_tx, signed_transfer_tx, db_conn):
@pytest.mark.bdb
def test_store_transaction(mocker, b, signed_create_tx, signed_transfer_tx, db_context):
from planetmint.backend.tarantool.connection import TarantoolDBConnection
def test_store_transaction(mocker, b, signed_create_tx, signed_transfer_tx):
mocked_store_transaction = mocker.patch("planetmint.backend.query.store_transactions")
b.store_bulk_transactions([signed_create_tx])
if not isinstance(b.connection, TarantoolDBConnection):
mongo_client = MongoClient(host=db_context.host, port=db_context.port)
utxoset = mongo_client[db_context.name]["utxos"]
assert utxoset.count_documents({}) == 1
utxo = utxoset.find_one()
assert utxo["transaction_id"] == signed_create_tx.id
assert utxo["output_index"] == 0
mocked_store_transaction.assert_called_once_with(
mocked_store_transaction.assert_any_call(
b.connection,
[signed_create_tx.to_dict()],
"transactions"
)
mocked_store_transaction.reset_mock()
b.store_bulk_transactions([signed_transfer_tx])
if not isinstance(b.connection, TarantoolDBConnection):
assert utxoset.count_documents({}) == 1
utxo = utxoset.find_one()
assert utxo["transaction_id"] == signed_transfer_tx.id
assert utxo["output_index"] == 0
if not isinstance(b.connection, TarantoolDBConnection):
mocked_store_transaction.assert_called_once_with(
b.connection,
[signed_transfer_tx.to_dict()],
)
@pytest.mark.bdb
def test_store_bulk_transaction(mocker, b, signed_create_tx, signed_transfer_tx, db_context):
from planetmint.backend.tarantool.connection import TarantoolDBConnection
def test_store_bulk_transaction(mocker, b, signed_create_tx, signed_transfer_tx):
mocked_store_transactions = mocker.patch("planetmint.backend.query.store_transactions")
b.store_bulk_transactions((signed_create_tx,))
if not isinstance(b.connection, TarantoolDBConnection):
mongo_client = MongoClient(host=db_context.host, port=db_context.port)
utxoset = mongo_client[db_context.name]["utxos"]
assert utxoset.count_documents({}) == 1
utxo = utxoset.find_one()
assert utxo["transaction_id"] == signed_create_tx.id
assert utxo["output_index"] == 0
mocked_store_transactions.assert_called_once_with(
mocked_store_transactions.assert_any_call(
b.connection,
[signed_create_tx.to_dict()],
"transactions"
)
mocked_store_transactions.reset_mock()
b.store_bulk_transactions((signed_transfer_tx,))
if not isinstance(b.connection, TarantoolDBConnection):
assert utxoset.count_documents({}) == 1
utxo = utxoset.find_one()
assert utxo["transaction_id"] == signed_transfer_tx.id
assert utxo["output_index"] == 0
if not isinstance(b.connection, TarantoolDBConnection):
mocked_store_transactions.assert_called_once_with(
b.connection,
[signed_transfer_tx.to_dict()],
)
@pytest.mark.bdb