mirror of
https://github.com/planetmint/planetmint.git
synced 2025-11-24 22:45:44 +00:00
Adapt Output class
Signed-off-by: cybnon <stefan.weber93@googlemail.com>
This commit is contained in:
parent
afe740bf81
commit
cb5b5b8509
35
planetmint/backend/models/key.py
Normal file
35
planetmint/backend/models/key.py
Normal 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,
|
||||||
|
}
|
||||||
@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@ -17,9 +16,9 @@ class SubCondition:
|
|||||||
@dataclass
|
@dataclass
|
||||||
class ConditionDetails:
|
class ConditionDetails:
|
||||||
type: str
|
type: str
|
||||||
public_key: str
|
public_key: str = ""
|
||||||
threshold: int
|
threshold: int = 0
|
||||||
sub_conditions: field(default_factory=list)
|
sub_conditions: list[SubCondition] = field(default_factory=list)
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@ -31,24 +30,16 @@ class Condition:
|
|||||||
@dataclass
|
@dataclass
|
||||||
class Output:
|
class Output:
|
||||||
id: str
|
id: str
|
||||||
public_keys: str
|
amount: int
|
||||||
condition: Optional[Condition]
|
condition: field(default_factory=Condition)
|
||||||
|
public_keys: str = ""
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_dict(output: dict) -> Output:
|
def from_dict(output: dict, tx_id: str = "") -> Output:
|
||||||
return Output(
|
if output["condition"]["details"].get("subconditions") is None:
|
||||||
id=output["id"],
|
return output_with_public_key(output, tx_id)
|
||||||
public_keys=output["public_keys"],
|
else:
|
||||||
condition=Condition(
|
return output_with_sub_conditions(output, tx_id)
|
||||||
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"],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_tuple(output: tuple) -> Output:
|
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"],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
@ -81,6 +81,7 @@ def store_transaction_outputs(connection, output: Output, index: int):
|
|||||||
output.public_keys,
|
output.public_keys,
|
||||||
output.condition,
|
output.condition,
|
||||||
output.condition,
|
output.condition,
|
||||||
|
uuid4().hex,
|
||||||
index
|
index
|
||||||
)))
|
)))
|
||||||
|
|
||||||
@ -96,7 +97,7 @@ def store_transactions(connection, signed_transactions: list):
|
|||||||
[store_transaction_inputs(connection, Input.from_dict(input, transaction["id"]), index) for
|
[store_transaction_inputs(connection, Input.from_dict(input, transaction["id"]), index) for
|
||||||
index, input in enumerate(transaction[TARANT_TABLE_INPUT])]
|
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])]
|
enumerate(transaction[TARANT_TABLE_OUTPUT])]
|
||||||
|
|
||||||
for _key in txtuples[TARANT_TABLE_KEYS]:
|
for _key in txtuples[TARANT_TABLE_KEYS]:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user