From 81df1a2f671eb0eb87f41516c47a00ed4acaee29 Mon Sep 17 00:00:00 2001
From: Moul <moul@moul.re>
Date: Wed, 8 May 2019 21:53:51 +0200
Subject: [PATCH] [enh] Transaction Unlock parameters: add __eq__() and
 __hash__() methods

---
 duniterpy/documents/transaction.py | 44 ++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/duniterpy/documents/transaction.py b/duniterpy/documents/transaction.py
index 565470e3..7377312c 100644
--- a/duniterpy/documents/transaction.py
+++ b/duniterpy/documents/transaction.py
@@ -230,6 +230,19 @@ class SIGParameter:
         """
         self.index = index
 
+
+    def __eq__(self, other: Any) -> bool:
+        """
+        Check SIGParameter instances equality
+        """
+        if not isinstance(other, SIGParameter):
+            return NotImplemented
+        return self.index == other.index
+
+    def __hash__(self) -> int:
+        return hash((self.index))
+
+
     @classmethod
     def from_parameter(cls: Type[SIGParameterType], parameter: str) -> Optional[SIGParameterType]:
         """
@@ -272,6 +285,19 @@ class XHXParameter:
         """
         self.integer = integer
 
+
+    def __eq__(self, other: Any) -> bool:
+        """
+        Check XHXParameter instances equality
+        """
+        if not isinstance(other, XHXParameter):
+            return NotImplemented
+        return self.integer == other.integer
+
+    def __hash__(self) -> int:
+        return hash((self.integer))
+
+
     @classmethod
     def from_parameter(cls: Type[XHXParameterType], parameter: str) -> Optional[XHXParameterType]:
         """
@@ -348,6 +374,24 @@ class Unlock:
         self.index = index
         self.parameters = parameters
 
+
+    def __eq__(self, other: Any) -> bool:
+        """
+        Check Unlock instances equality
+        """
+        if not isinstance(other, Unlock):
+            return NotImplemented
+
+        params_equals = True
+        for spar, opar in zip(self.parameters, other.parameters):
+            if spar != opar:
+                params_equals = False
+        return self.index == other.index and params_equals
+
+    def __hash__(self) -> int:
+        return hash((self.index, self.parameters))
+
+
     @classmethod
     def from_inline(cls: Type[UnlockType], inline: str) -> UnlockType:
         """
-- 
GitLab