X Tutup
Skip to content

Commit da01601

Browse files
jsmnbomtsnoam
authored andcommitted
Add equality rich comparision operators to telegram objects (python-telegram-bot#604)
fixes python-telegram-bot#587
1 parent 752b647 commit da01601

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+913
-45
lines changed

telegram/animation.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ def __init__(self,
4848
self.mime_type = mime_type
4949
self.file_size = file_size
5050

51+
self._id_attrs = (self.file_id,)
52+
5153
@staticmethod
5254
def de_json(data, bot):
5355
"""

telegram/audio.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ def __init__(self,
6060
self.mime_type = mime_type
6161
self.file_size = file_size
6262

63+
self._id_attrs = (self.file_id,)
64+
6365
@staticmethod
6466
def de_json(data, bot):
6567
"""

telegram/base.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828

2929
class TelegramObject(object):
3030
"""Base class for most telegram objects."""
31-
3231
__metaclass__ = ABCMeta
32+
_id_attrs = ()
3333

3434
def __str__(self):
3535
return str(self.to_dict())
@@ -69,7 +69,7 @@ def to_dict(self):
6969
data = dict()
7070

7171
for key in iter(self.__dict__):
72-
if key == 'bot':
72+
if key in ('bot', '_id_attrs'):
7373
continue
7474

7575
value = self.__dict__[key]
@@ -80,3 +80,13 @@ def to_dict(self):
8080
data[key] = value
8181

8282
return data
83+
84+
def __eq__(self, other):
85+
if isinstance(other, self.__class__):
86+
return self._id_attrs == other._id_attrs
87+
return super(TelegramObject, self).__eq__(other)
88+
89+
def __hash__(self):
90+
if self._id_attrs:
91+
return hash((self.__class__, self._id_attrs))
92+
return super(TelegramObject, self).__hash__()

telegram/chat.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def __init__(self,
7171
self.all_members_are_administrators = all_members_are_administrators
7272

7373
self.bot = bot
74+
self._id_attrs = (self.id,)
7475

7576
@staticmethod
7677
def de_json(data, bot):

telegram/chatmember.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ def __init__(self, user, status, **kwargs):
4646
self.user = user
4747
self.status = status
4848

49+
self._id_attrs = (self.user, self.status)
50+
4951
@staticmethod
5052
def de_json(data, bot):
5153
"""

telegram/choseninlineresult.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ def __init__(self,
6161
self.location = location
6262
self.inline_message_id = inline_message_id
6363

64+
self._id_attrs = (self.result_id,)
65+
6466
@staticmethod
6567
def de_json(data, bot):
6668
"""

telegram/contact.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ def __init__(self, phone_number, first_name, last_name=None, user_id=None, **kwa
4747
self.last_name = last_name
4848
self.user_id = user_id
4949

50+
self._id_attrs = (self.phone_number,)
51+
5052
@staticmethod
5153
def de_json(data, bot):
5254
"""

telegram/document.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ class Document(TelegramObject):
4141
4242
"""
4343

44+
_id_keys = ('file_id',)
45+
4446
def __init__(self,
4547
file_id,
4648
thumb=None,
@@ -56,6 +58,8 @@ def __init__(self,
5658
self.mime_type = mime_type
5759
self.file_size = file_size
5860

61+
self._id_attrs = (self.file_id,)
62+
5963
@staticmethod
6064
def de_json(data, bot):
6165
"""

telegram/file.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ def __init__(self, file_id, bot, file_size=None, file_path=None, **kwargs):
5151

5252
self.bot = bot
5353

54+
self._id_attrs = (self.file_id,)
55+
5456
@staticmethod
5557
def de_json(data, bot):
5658
"""

telegram/inlinequery.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ def __init__(self, id, from_user, query, offset, location=None, bot=None, **kwar
5555
self.location = location
5656

5757
self.bot = bot
58+
self._id_attrs = (self.id,)
5859

5960
@staticmethod
6061
def de_json(data, bot):

0 commit comments

Comments
 (0)
X Tutup