Skip to content
Snippets Groups Projects
Commit da92621e authored by Moul's avatar Moul
Browse files

[enh] #187: Implement __eq__ and __hash__ Identity’s methods

parent 0d756ae1
No related branches found
No related tags found
1 merge request!167#187: Implement __eq__ and __hash__ Documents methods
......@@ -14,7 +14,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import re
from typing import Type, TypeVar
from typing import Any, Type, TypeVar
from ..constants import (
BLOCK_ID_REGEX,
......@@ -96,6 +96,31 @@ class Identity(Document):
if signing_key is not None:
self.sign(signing_key)
def __eq__(self, other: Any) -> bool:
"""
Check Identity instances equality
"""
if not isinstance(other, Identity):
return NotImplemented
return (
super().__eq__(other)
and self.pubkey == other.pubkey
and self.uid == other.uid
and self.block_id == other.block_id
)
def __hash__(self) -> int:
return hash(
(
self.pubkey,
self.uid,
self.block_id,
self.version,
self.currency,
self.signature,
)
)
@classmethod
def from_inline(
cls: Type[IdentityType],
......
# Copyright 2014-2021 Vincent Texier <vit@free.fr>
#
# DuniterPy is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# DuniterPy is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import pytest
from duniterpy.constants import G1_TEST_CURRENCY_CODENAME
from duniterpy.documents import Identity
PUBKEY = "A"
UID = "test"
BLOCK_ID = "0-NRSATU"
IDENTITY_KWARGS = [PUBKEY, UID, BLOCK_ID]
def test_identity_equality():
idty1 = Identity(*IDENTITY_KWARGS)
idty2 = Identity(*IDENTITY_KWARGS)
assert idty1 == idty2
@pytest.mark.parametrize(
"pubkey, uid, block_id, currency",
[
("pubkey", UID, BLOCK_ID, None),
(PUBKEY, "uid", BLOCK_ID, None),
(PUBKEY, UID, "1-TEST", None),
IDENTITY_KWARGS + [G1_TEST_CURRENCY_CODENAME],
],
)
def test_identity_inequality(pubkey, uid, block_id, currency):
idty1 = Identity(*IDENTITY_KWARGS)
idty2 = Identity(pubkey, uid, block_id)
if currency:
idty2.currency = currency
assert not idty1 == idty2
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment