From f0c9b259ccf58296927d92f1968cfd8999c3b459 Mon Sep 17 00:00:00 2001 From: cybnon Date: Fri, 9 Dec 2022 09:49:37 +0100 Subject: [PATCH] Fix subcondition serialization Signed-off-by: cybnon --- planetmint/backend/models/output.py | 31 +++++++++++++++++++++++++---- planetmint/lib.py | 2 +- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/planetmint/backend/models/output.py b/planetmint/backend/models/output.py index cde2eb9..9977452 100644 --- a/planetmint/backend/models/output.py +++ b/planetmint/backend/models/output.py @@ -16,10 +16,20 @@ class SubCondition: def to_tuple(self) -> tuple: return self.type, self.public_key + def to_dict(self) -> dict: + return { + "type": self.type, + "public_key": self.public_key + } + @staticmethod def from_dict(subcondition_dict: dict) -> SubCondition: return SubCondition(subcondition_dict["type"], subcondition_dict["public_key"]) + @staticmethod + def list_to_dict(subconditions: List[SubCondition]) -> List[dict]: + return [subcondition.to_dict() for subcondition in subconditions] + @dataclass class ConditionDetails: type: str = "" @@ -27,11 +37,24 @@ class ConditionDetails: threshold: int = None sub_conditions: list[SubCondition] = None + def to_dict(self) -> dict: + if self.sub_conditions is None: + return { + "type": self.type, + "public_key": self.public_key, + } + else: + return { + "type": self.type, + "threshold": self.threshold, + "subconditions": [subcondition.to_dict() for subcondition in self.sub_conditions], + } + @staticmethod def from_dict(data: dict) -> ConditionDetails: sub_conditions = None - if data["sub_conditions"] is not None: - sub_conditions = [SubCondition.from_dict(sub_condition) for sub_condition in data["sub_conditions"]] + if data["subconditions"] is not None: + sub_conditions = [SubCondition.from_dict(sub_condition) for sub_condition in data["subconditions"]] return ConditionDetails( type=data.get("type"), public_key=data.get("public_key"), @@ -55,7 +78,7 @@ class Condition: def to_dict(self) -> dict: return { "uri": self.uri, - "details": self.details.__dict__, + "details": self.details.to_dict(), } @staticmethod @@ -105,7 +128,7 @@ class Output: "type": self.condition.details.type, "public_key": self.condition.details.public_key, "threshold": self.condition.details.threshold, - "subconditions": self.condition.details.sub_conditions, + "subconditions": SubCondition.list_to_dict(self.condition.details.sub_conditions), }, "uri": self.condition.uri, }, diff --git a/planetmint/lib.py b/planetmint/lib.py index fd7ec1e..187a3f7 100644 --- a/planetmint/lib.py +++ b/planetmint/lib.py @@ -281,7 +281,7 @@ class Planetmint(object): if len(transactions) + len(current_spent_transactions) > 1: raise DoubleSpend('tx "{}" spends inputs twice'.format(txid)) elif transactions: - tx_id = transactions[0]["transactions"].id + tx_id = transactions[0].id tx = backend.query.get_transaction_single(self.connection, tx_id) tx.assets = backend.query.get_assets_by_tx_id(self.connection, tx_id) transaction = tx.to_dict()