Adapt Output class

Signed-off-by: cybnon <stefan.weber93@googlemail.com>
This commit is contained in:
cybnon 2022-11-21 16:33:18 +01:00
parent afe740bf81
commit cb5b5b8509
3 changed files with 85 additions and 21 deletions

View File

@ -0,0 +1,35 @@
# 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 = ""
public_key: str = ""
@staticmethod
def from_dict(output: dict, tx_id: str = "") -> Keys:
if output["condition"]["details"].get("subconditions") is None:
return Keys(
tx_id=tx_id,
public_key=output["condition"]["details"]["public_key"],
)
@staticmethod
def from_tuple(output: tuple) -> Keys:
return Keys(
tx_id=output[0],
public_key=output[1],
)
def to_output_dict(self) -> dict:
return {
"tx_id": self.tx_id,
"public_keys": self.public_key,
}

View File

@ -5,7 +5,6 @@
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Optional
@dataclass
@ -17,9 +16,9 @@ class SubCondition:
@dataclass
class ConditionDetails:
type: str
public_key: str
threshold: int
sub_conditions: field(default_factory=list)
public_key: str = ""
threshold: int = 0
sub_conditions: list[SubCondition] = field(default_factory=list)
@dataclass
@ -31,24 +30,16 @@ class Condition:
@dataclass
class Output:
id: str
public_keys: str
condition: Optional[Condition]
amount: int
condition: field(default_factory=Condition)
public_keys: str = ""
@staticmethod
def from_dict(output: dict) -> Output:
return Output(
id=output["id"],
public_keys=output["public_keys"],
condition=Condition(
uri=output["condition"]["uri"],
details=ConditionDetails(
type=output["condition"]["details"]["type"],
public_key=output["condition"]["details"]["public_key"],
threshold=output["condition"]["details"]["threshold"],
sub_conditions=output["condition"]["details"]["subconditions"],
),
),
)
def from_dict(output: dict, tx_id: str = "") -> Output:
if output["condition"]["details"].get("subconditions") is None:
return output_with_public_key(output, tx_id)
else:
return output_with_sub_conditions(output, tx_id)
@staticmethod
def from_tuple(output: tuple) -> Output:
@ -80,3 +71,40 @@ class Output:
},
},
}
def output_with_sub_conditions(output, tx_id) -> Output:
return Output(
id=tx_id,
amount=output["amount"],
condition=Condition(
uri=output["condition"]["uri"],
details=ConditionDetails(
type=output["condition"]["details"]["type"],
threshold=output["condition"]["details"]["threshold"],
sub_conditions=[
SubCondition(
type=sub_condition["type"],
body=sub_condition["body"],
)
for sub_condition in output["condition"]["details"][
"subconditions"
]
],
),
),
)
def output_with_public_key(output, tx_id) -> Output:
return Output(
id=tx_id,
amount=output["amount"],
condition=Condition(
uri=output["condition"]["uri"],
details=ConditionDetails(
type=output["condition"]["details"]["type"],
public_key=output["condition"]["details"]["public_key"],
),
),
)

View File

@ -81,6 +81,7 @@ def store_transaction_outputs(connection, output: Output, index: int):
output.public_keys,
output.condition,
output.condition,
uuid4().hex,
index
)))
@ -96,7 +97,7 @@ def store_transactions(connection, signed_transactions: list):
[store_transaction_inputs(connection, Input.from_dict(input, transaction["id"]), index) for
index, input in enumerate(transaction[TARANT_TABLE_INPUT])]
[store_transaction_outputs(connection, Output.from_dict(output)) for index, output in
[store_transaction_outputs(connection, Output.from_dict(output, transaction["id"])) for index, output in
enumerate(transaction[TARANT_TABLE_OUTPUT])]
for _key in txtuples[TARANT_TABLE_KEYS]: