Adaptions due to schema change

Signed-off-by: cybnon <stefan.weber93@googlemail.com>
This commit is contained in:
cybnon 2022-12-07 15:50:45 +01:00
parent aeb2bba61b
commit 67d0d9b642
11 changed files with 31 additions and 110 deletions

View File

@ -9,6 +9,5 @@ from .input import Input
from .metadata import MetaData from .metadata import MetaData
from .script import Script from .script import Script
from .output import Output from .output import Output
from .keys import Keys
from .dbtransaction import DbTransaction from .dbtransaction import DbTransaction
from .block import Block from .block import Block

View File

@ -22,8 +22,8 @@ class Asset:
} }
@staticmethod @staticmethod
def from_list_dict(asset_tuple_list: list[tuple]) -> list[Asset]: def from_list_dict(asset_dict_list: list[dict]) -> list[Asset]:
return [Asset.from_dict(asset_tuple) for asset_tuple in asset_tuple_list] return [Asset.from_dict(asset_dict) for asset_dict in asset_dict_list]
@staticmethod @staticmethod
def list_to_dict(asset_list: list[Asset]) -> list[dict]: def list_to_dict(asset_list: list[Asset]) -> list[dict]:

View File

@ -6,8 +6,7 @@
from __future__ import annotations from __future__ import annotations
from dataclasses import dataclass from dataclasses import dataclass
from planetmint.backend.models import Asset, MetaData, Input, Output, Script from planetmint.backend.models import Asset, MetaData, Input, Script
from planetmint.backend.models.keys import Keys
@dataclass @dataclass

View File

@ -47,7 +47,7 @@ class Input:
else None else None
) )
return {"fulfills": fulfills, "fulfillment": self.fulfillment, "owners_before": self.owners_before} return {"owners_before": self.owners_before, "fulfills": fulfills, "fulfillment": self.fulfillment}
@staticmethod @staticmethod
def from_list_dict(input_tuple_list: list[dict]) -> list[Input]: def from_list_dict(input_tuple_list: list[dict]) -> list[Input]:

View File

@ -1,37 +0,0 @@
# Copyright © 2020 Interplanetary Database Association e.V.,
# Planetmint and IPDB software contributors.
# SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0)
# Code is Apache-2.0 and docs are CC-BY-4.0
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class Keys:
tx_id: str = ""
output_id: str = ""
public_keys: [str] = ""
@staticmethod
def from_dict(output: dict, tx_id: str = "") -> Keys:
return Keys(
tx_id=tx_id,
public_keys=output["public_keys"],
)
@staticmethod
def from_tuple(output: tuple) -> Keys:
return Keys(
tx_id=output[1],
output_id=output[2],
public_keys=output[3],
)
def to_dict(self) -> dict:
return {
"tx_id": self.tx_id,
"output_id": self.output_id,
"public_keys": self.public_keys,
}

View File

@ -14,9 +14,9 @@ class MetaData:
metadata: Optional[str] = None metadata: Optional[str] = None
@staticmethod @staticmethod
def from_dict(meta_data_tuple: dict) -> MetaData: def from_dict(meta_data_tuple: dict) -> MetaData | None:
if meta_data_tuple is None: if meta_data_tuple is None:
return MetaData() return None
return MetaData(meta_data_tuple["meta_data"]) return MetaData(meta_data_tuple["meta_data"])
def to_dict(self) -> dict: def to_dict(self) -> dict:

View File

@ -7,8 +7,6 @@ from __future__ import annotations
from dataclasses import dataclass, field from dataclasses import dataclass, field
from typing import List from typing import List
from planetmint.backend.models.keys import Keys
@dataclass @dataclass
class SubCondition: class SubCondition:
@ -26,7 +24,7 @@ class SubCondition:
class ConditionDetails: class ConditionDetails:
type: str = "" type: str = ""
public_key: str = "" public_key: str = ""
threshold: int = 0 threshold: int = None
sub_conditions: list[SubCondition] = None sub_conditions: list[SubCondition] = None
@staticmethod @staticmethod
@ -100,18 +98,18 @@ class Output:
def to_dict(self) -> dict: def to_dict(self) -> dict:
return { return {
"id": self.transaction_id, "id": self.id,
"amount": self.amount,
"public_keys": self.public_keys, "public_keys": self.public_keys,
"condition": { "condition": {
"uri": self.condition.uri,
"details": { "details": {
"type": self.condition.details.type, "type": self.condition.details.type,
"public_key": self.condition.details.public_key, "public_key": self.condition.details.public_key,
"threshold": self.condition.details.threshold, "threshold": self.condition.details.threshold,
"subconditions": self.condition.details.sub_conditions, "subconditions": self.condition.details.sub_conditions,
}, },
"uri": self.condition.uri,
}, },
"amount": str(self.amount),
} }

View File

@ -13,9 +13,9 @@ class Script:
script: dict = None script: dict = None
@staticmethod @staticmethod
def from_dict(script_dict: dict) -> Script: def from_dict(script_dict: dict) -> Script | None:
if script_dict is None: if script_dict is None:
return Script() return None
return Script(script_dict["script"]) return Script(script_dict["script"])
def to_dict(self) -> dict: def to_dict(self) -> dict:

View File

@ -10,7 +10,6 @@ from functools import singledispatch
from planetmint.backend.models import Asset, MetaData, Output, Input, Script from planetmint.backend.models import Asset, MetaData, Output, Input, Script
from planetmint.backend.exceptions import OperationError from planetmint.backend.exceptions import OperationError
from planetmint.backend.models.keys import Keys
from planetmint.backend.interfaces import Block from planetmint.backend.interfaces import Block
from planetmint.backend.models.dbtransaction import DbTransaction from planetmint.backend.models.dbtransaction import DbTransaction
@ -208,31 +207,6 @@ def get_block_with_transaction(connection, txid):
raise NotImplementedError raise NotImplementedError
@singledispatch
def get_metadata_by_tx_id(connection, transaction_id: str) -> MetaData:
"""Get metadata from the metadata table containing `transaction_id`.
Args:
transaction_id (str): id for the metadata to be retrieved from
the database.
Returns:
metadata (MetaData): the list of returned metadata.
"""
raise NotImplementedError
@singledispatch
def store_transaction_outputs_and_keys(connection, output: Output, index: int):
"""Store the transaction outputs.
Args:
output (Output): the output to store.
index (int): the index of the output in the transaction.
"""
raise NotImplementedError
@singledispatch @singledispatch
def store_transaction_outputs(connection, output: Output, index: int): def store_transaction_outputs(connection, output: Output, index: int):
"""Store the transaction outputs. """Store the transaction outputs.
@ -244,31 +218,6 @@ def store_transaction_outputs(connection, output: Output, index: int):
raise NotImplementedError raise NotImplementedError
@singledispatch
def store_transaction_keys(connection, keys: [Keys], output_id: str, index: int):
"""Store the transaction keys.
Args:
input (Input): the input to store.
index (int): the index of the input in the transaction.
"""
raise NotImplementedError
@singledispatch
def get_metadata(connection, transaction_ids) -> list[MetaData]:
"""Get a list of metadata from the metadata table.
Args:
transaction_ids (list): a list of ids for the metadata to be retrieved from
the database.
Returns:
metadata (list): the list of returned metadata.
"""
raise NotImplementedError
@singledispatch @singledispatch
def get_assets(connection, asset_ids) -> list[Asset]: def get_assets(connection, asset_ids) -> list[Asset]:
"""Get a list of assets from the assets table. """Get a list of assets from the assets table.
@ -547,6 +496,6 @@ def get_outputs_by_tx_id(connection, tx_id: str) -> list[Output]:
@singledispatch @singledispatch
def get_keys_by_tx_id(connection, tx_id: str) -> list[Keys]: def get_metadata(conn, transaction_ids):
"""Retrieve keys for a transaction by its id""" """Retrieve metadata for a list of transactions by their ids"""
raise NotImplementedError raise NotImplementedError

View File

@ -70,7 +70,6 @@ def store_transaction_outputs(connection, output: Output, index: int) -> str:
def store_transactions(connection, signed_transactions: list): def store_transactions(connection, signed_transactions: list):
for transaction in signed_transactions: for transaction in signed_transactions:
store_transaction(connection, transaction) store_transaction(connection, transaction)
[ [
store_transaction_outputs(connection, Output.outputs_dict(output, transaction["id"]), index) store_transaction_outputs(connection, Output.outputs_dict(output, transaction["id"]), index)
for index, output in enumerate(transaction[TARANT_TABLE_OUTPUT]) for index, output in enumerate(transaction[TARANT_TABLE_OUTPUT])

View File

@ -38,6 +38,7 @@ from transactions.common.transaction_mode_types import BROADCAST_TX_COMMIT, BROA
from transactions.types.elections.election import Election from transactions.types.elections.election import Election
from transactions.types.elections.validator_utils import election_id_to_public_key from transactions.types.elections.validator_utils import election_id_to_public_key
from planetmint.backend.models import Output
from planetmint.config import Config from planetmint.config import Config
from planetmint import backend, config_utils, fastquery from planetmint import backend, config_utils, fastquery
from planetmint.tendermint_utils import ( from planetmint.tendermint_utils import (
@ -385,11 +386,11 @@ class Planetmint(object):
if spent: if spent:
raise DoubleSpend("input `{}` was already spent".format(input_txid)) raise DoubleSpend("input `{}` was already spent".format(input_txid))
output = _output[input_.fulfills.output] output = _output[input_.fulfills.output]
input_conditions.append(output) input_conditions.append(output)
tx_dict = input_tx.to_dict() tx_dict = input_tx.to_dict()
tx_dict["outputs"] = output.to_dict() tx_dict["outputs"] = Output.list_to_dict(_output)
tx_dict = remove_generated_fields(tx_dict)
pm_transaction = Transaction.from_dict(tx_dict, False) pm_transaction = Transaction.from_dict(tx_dict, False)
input_txs.append(pm_transaction) input_txs.append(pm_transaction)
@ -927,3 +928,16 @@ class Planetmint(object):
Block = namedtuple("Block", ("app_hash", "height", "transactions")) Block = namedtuple("Block", ("app_hash", "height", "transactions"))
def remove_generated_fields(tx_dict: dict):
tx_dict["outputs"] = [remove_generated_or_none_output_keys(output) for output in tx_dict["outputs"]]
if tx_dict["script"] is None:
tx_dict.pop("script")
return tx_dict
def remove_generated_or_none_output_keys(output):
output["condition"]["details"] = {k: v for k, v in output["condition"]["details"].items() if v is not None}
output.pop("id")
return output