Commit c2e016a1 authored by Vincent Texier's avatar Vincent Texier

Merge branch 'sources_equality_methods' into 'dev'

Implement InputSource and OutputSource equality and hash methods

See merge request !55
parents dc87cc75 b418e8a7
Pipeline #5239 passed with stages
in 2 minutes and 56 seconds
......@@ -108,10 +108,9 @@ class UnknownEndpoint(Endpoint):
return "{0} {1}".format(self.api, ' '.join(["{0}".format(p) for p in self.properties]))
def __eq__(self, other: Any) -> bool:
if isinstance(other, UnknownEndpoint):
return self.api == other.api and self.properties == other.properties
else:
return False
if not isinstance(other, UnknownEndpoint):
return NotImplemented
return self.api == other.api and self.properties == other.properties
def __hash__(self) -> int:
return hash((self.api, self.properties))
......@@ -204,11 +203,10 @@ class BMAEndpoint(Endpoint):
return self.inline()
def __eq__(self, other: Any) -> bool:
if isinstance(other, BMAEndpoint):
return self.server == other.server and self.ipv4 == other.ipv4 \
and self.ipv6 == other.ipv6 and self.port == other.port
else:
return False
if not isinstance(other, BMAEndpoint):
return NotImplemented
return self.server == other.server and self.ipv4 == other.ipv4 \
and self.ipv6 == other.ipv6 and self.port == other.port
def __hash__(self) -> int:
return hash((self.server, self.ipv4, self.ipv6, self.port))
......@@ -347,11 +345,10 @@ class WS2PEndpoint(Endpoint):
return self.inline()
def __eq__(self, other: Any) -> bool:
if isinstance(other, WS2PEndpoint):
return self.server == other.server and self.ws2pid == other.ws2pid \
and self.port == other.port and self.path == other.path
else:
return False
if not isinstance(other, WS2PEndpoint):
return NotImplemented
return self.server == other.server and self.ws2pid == other.ws2pid \
and self.port == other.port and self.path == other.path
def __hash__(self) -> int:
return hash((self.ws2pid, self.server, self.port, self.path))
......@@ -409,10 +406,9 @@ class ESCoreEndpoint(Endpoint):
return self.inline()
def __eq__(self, other: Any) -> bool:
if isinstance(other, ESCoreEndpoint):
return self.server == other.server and self.port == other.port
else:
return False
if not isinstance(other, ESCoreEndpoint):
return NotImplemented
return self.server == other.server and self.port == other.port
def __hash__(self) -> int:
return hash((self.server, self.port))
......@@ -470,10 +466,9 @@ class ESUserEndpoint(Endpoint):
return self.inline()
def __eq__(self, other: Any) -> bool:
if isinstance(other, ESUserEndpoint):
return self.server == other.server and self.port == other.port
else:
return False
if not isinstance(other, ESUserEndpoint):
return NotImplemented
return self.server == other.server and self.port == other.port
def __hash__(self) -> int:
return hash((self.server, self.port))
......@@ -531,10 +526,9 @@ class ESSubscribtionEndpoint(Endpoint):
return self.inline()
def __eq__(self, other: Any) -> bool:
if isinstance(other, ESSubscribtionEndpoint):
return self.server == other.server and self.port == other.port
else:
return False
if not isinstance(other, ESSubscribtionEndpoint):
return NotImplemented
return self.server == other.server and self.port == other.port
def __hash__(self) -> int:
return hash((ESSubscribtionEndpoint.API, self.server, self.port))
......
......@@ -70,14 +70,14 @@ The class Block handles Block documents.
re_unitbase = re.compile("UnitBase: ([0-9]+)\n")
re_issuer = re.compile("Issuer: ({pubkey_regex})\n".format(pubkey_regex=PUBKEY_REGEX))
re_issuers_frame = re.compile("IssuersFrame: ([0-9]+)\n")
re_issuers_frame_var = re.compile("IssuersFrameVar: (0|-?[1-9]\d{0,18})\n")
re_issuers_frame_var = re.compile("IssuersFrameVar: (0|-?[1-9]\\d{0,18})\n")
re_different_issuers_count = re.compile("DifferentIssuersCount: ([0-9]+)\n")
re_previoushash = re.compile("PreviousHash: ({block_hash_regex})\n".format(block_hash_regex=BLOCK_HASH_REGEX))
re_previousissuer = re.compile("PreviousIssuer: ({pubkey_regex})\n".format(pubkey_regex=PUBKEY_REGEX))
re_parameters = re.compile("Parameters: ([0-9]+\.[0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):\
([0-9]+):([0-9]+):([0-9]+\.[0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+\.[0-9]+)\n")
re_parameters_v10 = re.compile("Parameters: ([0-9]+\.[0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):\
([0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+\.[0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+\.[0-9]+):\
re_parameters = re.compile("Parameters: ([0-9]+\\.[0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):\
([0-9]+):([0-9]+):([0-9]+\\.[0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+\\.[0-9]+)\n")
re_parameters_v10 = re.compile("Parameters: ([0-9]+\\.[0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):\
([0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+\\.[0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+):([0-9]+\\.[0-9]+):\
([0-9]+):([0-9]+):([0-9]+)\n")
re_memberscount = re.compile("MembersCount: ([0-9]+)\n")
re_identities = re.compile("Identities:\n")
......@@ -501,7 +501,7 @@ Nonce: {nonce}
def __eq__(self, other: object) -> bool:
if not isinstance(other, Block):
return False
return NotImplemented
return self.blockUID == other.blockUID
def __lt__(self, other: object) -> bool:
......
......@@ -51,7 +51,7 @@ class BlockUID:
def __eq__(self, other: object) -> bool:
if not isinstance(other, BlockUID):
return False
return NotImplemented
return self.number == other.number and self.sha_hash == other.sha_hash
def __lt__(self, other: object) -> bool:
......
import re
from typing import TypeVar, List, Type, Optional, Dict, Union
from typing import TypeVar, List, Any, Type, Optional, Dict, Union
import pypeg2
......@@ -78,6 +78,21 @@ class InputSource:
self.origin_id = origin_id
self.index = index
def __eq__(self, other: Any) -> bool:
"""
Check InputSource instances equality
"""
if not isinstance(other, InputSource):
return NotImplemented
return self.amount == other.amount and \
self.base == other.base and \
self.source == other.source and \
self.origin_id == other.origin_id and \
self.index == other.index
def __hash__(self) -> int:
return hash((self.amount, self.base, self.source, self.origin_id, self.index))
@classmethod
def from_inline(cls: Type[InputSourceType], tx_version: int, inline: str) -> InputSourceType:
"""
......@@ -153,6 +168,19 @@ class OutputSource:
self.base = base
self.condition = self.condition_from_text(condition)
def __eq__(self, other: Any) -> bool:
"""
Check OutputSource instances equality
"""
if not isinstance(other, OutputSource):
return NotImplemented
return self.amount == other.amount and \
self.base == other.base and \
self.condition == other.condition
def __hash__(self) -> int:
return hash((self.amount, self.base, self.condition))
@classmethod
def from_inline(cls: Type[OutputSourceType], inline: str) -> OutputSourceType:
"""
......@@ -204,7 +232,7 @@ class SIGParameter:
"""
A Transaction UNLOCK SIG parameter
"""
re_sig = re.compile("SIG\(([0-9]+)\)")
re_sig = re.compile("SIG\\(([0-9]+)\\)")
def __init__(self, index: int) -> None:
"""
......@@ -246,7 +274,7 @@ class XHXParameter:
"""
A Transaction UNLOCK XHX parameter
"""
re_xhx = re.compile("XHX\(([0-9]+)\)")
re_xhx = re.compile("XHX\\(([0-9]+)\\)")
def __init__(self, integer: int) -> None:
"""
......@@ -320,7 +348,7 @@ class Unlock:
"""
A Transaction UNLOCK
"""
re_inline = re.compile("([0-9]+):((?:SIG\([0-9]+\)|XHX\([0-9]+\)|\s)+)\n")
re_inline = re.compile("([0-9]+):((?:SIG\\([0-9]+\\)|XHX\\([0-9]+\\)|\\s)+)\n")
def __init__(self, index: int, parameters: List[Union[SIGParameter, XHXParameter]]) -> None:
"""
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment