X Tutup
Skip to content

Commit fdb5f23

Browse files
committed
Improving the design of existing Telegram classes and adding docstrings
1 parent d03a394 commit fdb5f23

21 files changed

+881
-287
lines changed

telegram/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
from .base import TelegramObject
2424
from .user import User
25-
from .update import Update
2625
from .groupchat import GroupChat
2726
from .photosize import PhotoSize
2827
from .audio import Audio
@@ -38,11 +37,12 @@
3837
from .replykeyboardmarkup import ReplyKeyboardMarkup
3938
from .replykeyboardhide import ReplyKeyboardHide
4039
from .forcereply import ForceReply
41-
from .inputfile import InputFile
4240
from .error import TelegramError
41+
from .inputfile import InputFile
4342
from .nullhandler import NullHandler
4443
from .emoji import Emoji
4544
from .message import Message
45+
from .update import Update
4646
from .bot import Bot
4747

4848
__all__ = ['Bot', 'Emoji', 'TelegramError', 'InputFile', 'ReplyMarkup',

telegram/audio.py

Lines changed: 64 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,37 +16,83 @@
1616
# You should have received a copy of the GNU Lesser Public License
1717
# along with this program. If not, see [http://www.gnu.org/licenses/].
1818

19+
"""This module contains a object that represents a Telegram Audio"""
1920

2021
from telegram import TelegramObject
2122

2223

2324
class Audio(TelegramObject):
25+
"""This object represents a Telegram Audio.
26+
27+
Attributes:
28+
file_id (str):
29+
duration (int):
30+
performer (str):
31+
title (str):
32+
mime_type (str):
33+
file_size (int):
34+
35+
Args:
36+
file_id (str):
37+
duration (int):
38+
**kwargs: Arbitrary keyword arguments.
39+
40+
Keyword Args:
41+
performer (Optional[str]):
42+
title (Optional[str]):
43+
mime_type (Optional[str]):
44+
file_size (Optional[int]):
45+
"""
46+
2447
def __init__(self,
2548
file_id,
2649
duration,
27-
performer=None,
28-
title=None,
29-
mime_type=None,
30-
file_size=None):
50+
**kwargs):
51+
# Required
3152
self.file_id = file_id
32-
self.duration = duration
33-
self.performer = performer
34-
self.title = title
35-
self.mime_type = mime_type
36-
self.file_size = file_size
53+
self.duration = int(duration)
54+
# Optionals
55+
self.performer = kwargs.get('performer', '')
56+
self.title = kwargs.get('title', '')
57+
self.mime_type = kwargs.get('mime_type', '')
58+
self.file_size = int(kwargs.get('file_size', 0))
3759

3860
@staticmethod
3961
def de_json(data):
40-
return Audio(file_id=data.get('file_id', None),
41-
duration=data.get('duration', None),
42-
performer=data.get('performer', None),
43-
title=data.get('title', None),
44-
mime_type=data.get('mime_type', None),
45-
file_size=data.get('file_size', None))
62+
"""
63+
Args:
64+
data (str):
65+
66+
Returns:
67+
telegram.Audio:
68+
"""
69+
if not data:
70+
return None
71+
72+
audio = dict()
73+
74+
# Required
75+
audio['file_id'] = data['file_id']
76+
audio['duration'] = data['duration']
77+
# Optionals
78+
audio['performer'] = data.get('performer')
79+
audio['title'] = data.get('title')
80+
audio['mime_type'] = data.get('mime_type')
81+
audio['file_size'] = data.get('file_size', 0)
82+
83+
return Audio(**audio)
4684

4785
def to_dict(self):
48-
data = {'file_id': self.file_id,
49-
'duration': self.duration}
86+
"""
87+
Returns:
88+
dict:
89+
"""
90+
data = dict()
91+
92+
# Required
93+
data['file_id'] = self.file_id
94+
data['duration'] = self.duration
95+
# Optionals
5096
if self.performer:
5197
data['performer'] = self.performer
5298
if self.title:
@@ -55,4 +101,5 @@ def to_dict(self):
55101
data['mime_type'] = self.mime_type
56102
if self.file_size:
57103
data['file_size'] = self.file_size
104+
58105
return data

telegram/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,4 @@ def to_json(self):
4141

4242
@abstractmethod
4343
def to_dict(self):
44-
return
44+
return None

telegram/chataction.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#!/usr/bin/env python
2+
# pylint: disable=R0903
23
#
34
# A library that provides a Python interface to the Telegram Bot API
45
# Copyright (C) 2015 Leandro Toledo de Souza <leandrotoeldodesouza@gmail.com>
@@ -16,8 +17,12 @@
1617
# You should have received a copy of the GNU Lesser Public License
1718
# along with this program. If not, see [http://www.gnu.org/licenses/].
1819

20+
"""This module contains a object that represents a Telegram ChatAction"""
21+
1922

2023
class ChatAction(object):
24+
"""This object represents a Telegram ChatAction."""
25+
2126
TYPING = 'typing'
2227
UPLOAD_PHOTO = 'upload_photo'
2328
RECORD_VIDEO = 'upload_video'

telegram/contact.py

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,33 +16,78 @@
1616
# You should have received a copy of the GNU Lesser Public License
1717
# along with this program. If not, see [http://www.gnu.org/licenses/].
1818

19+
"""This module contains a object that represents a Telegram Contact"""
1920

2021
from telegram import TelegramObject
2122

2223

2324
class Contact(TelegramObject):
25+
"""This object represents a Telegram Contact.
26+
27+
Attributes:
28+
phone_number (str):
29+
first_name (str):
30+
last_name (str):
31+
user_id (int):
32+
33+
Args:
34+
phone_number (str):
35+
first_name (str):
36+
**kwargs: Arbitrary keyword arguments.
37+
38+
Keyword Args:
39+
last_name (Optional[str]):
40+
user_id (Optional[int]):
41+
"""
42+
2443
def __init__(self,
2544
phone_number,
2645
first_name,
27-
last_name=None,
28-
user_id=None):
46+
**kwargs):
47+
# Required
2948
self.phone_number = phone_number
3049
self.first_name = first_name
31-
self.last_name = last_name
32-
self.user_id = user_id
50+
# Optionals
51+
self.last_name = kwargs.get('last_name', '')
52+
self.user_id = int(kwargs.get('user_id', 0))
3353

3454
@staticmethod
3555
def de_json(data):
36-
return Contact(phone_number=data.get('phone_number', None),
37-
first_name=data.get('first_name', None),
38-
last_name=data.get('last_name', None),
39-
user_id=data.get('user_id', None))
56+
"""
57+
Args:
58+
data (str):
59+
60+
Returns:
61+
telegram.Contact:
62+
"""
63+
if not data:
64+
return None
65+
66+
contact = dict()
67+
68+
# Required
69+
contact['phone_number'] = data['phone_number']
70+
contact['first_name'] = data['first_name']
71+
# Optionals
72+
contact['last_name'] = data.get('last_name')
73+
contact['user_id'] = data.get('user_id', 0)
74+
75+
return Contact(**contact)
4076

4177
def to_dict(self):
42-
data = {'phone_number': self.phone_number,
43-
'first_name': self.first_name}
78+
"""
79+
Returns:
80+
dict:
81+
"""
82+
data = dict()
83+
84+
# Required
85+
data['phone_number'] = self.phone_number
86+
data['first_name'] = self.first_name
87+
# Optionals
4488
if self.last_name:
4589
data['last_name'] = self.last_name
4690
if self.user_id:
4791
data['user_id'] = self.user_id
92+
4893
return data

telegram/document.py

Lines changed: 60 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,39 +16,77 @@
1616
# You should have received a copy of the GNU Lesser Public License
1717
# along with this program. If not, see [http://www.gnu.org/licenses/].
1818

19+
"""This module contains a object that represents a Telegram Document"""
1920

20-
from telegram import TelegramObject
21+
from telegram import PhotoSize, TelegramObject
2122

2223

2324
class Document(TelegramObject):
25+
"""This object represents a Telegram Document.
26+
27+
Attributes:
28+
file_id (str):
29+
thumb (:class:`telegram.PhotoSize`):
30+
file_name (str):
31+
mime_type (str):
32+
file_size (int):
33+
34+
Args:
35+
file_id (str):
36+
**kwargs: Arbitrary keyword arguments.
37+
38+
Keyword Args:
39+
thumb (Optional[:class:`telegram.PhotoSize`]):
40+
file_name (Optional[str]):
41+
mime_type (Optional[str]):
42+
file_size (Optional[int]):
43+
"""
44+
2445
def __init__(self,
2546
file_id,
26-
thumb=None,
27-
file_name=None,
28-
mime_type=None,
29-
file_size=None):
47+
**kwargs):
48+
# Required
3049
self.file_id = file_id
31-
self.thumb = thumb
32-
self.file_name = file_name
33-
self.mime_type = mime_type
34-
self.file_size = file_size
50+
# Optionals
51+
self.thumb = kwargs.get('thumb')
52+
self.file_name = kwargs.get('file_name', '')
53+
self.mime_type = kwargs.get('mime_type', '')
54+
self.file_size = int(kwargs.get('file_size', 0))
3555

3656
@staticmethod
3757
def de_json(data):
38-
if 'thumb' in data:
39-
from telegram import PhotoSize
40-
thumb = PhotoSize.de_json(data['thumb'])
41-
else:
42-
thumb = None
43-
44-
return Document(file_id=data.get('file_id', None),
45-
thumb=thumb,
46-
file_name=data.get('file_name', None),
47-
mime_type=data.get('mime_type', None),
48-
file_size=data.get('file_size', None))
58+
"""
59+
Args:
60+
data (str):
61+
62+
Returns:
63+
telegram.Document:
64+
"""
65+
if not data:
66+
return None
67+
68+
document = dict()
69+
70+
# Required
71+
document['file_id'] = data['file_id']
72+
# Optionals
73+
document['thumb'] = PhotoSize.de_json(data.get('thumb'))
74+
document['file_name'] = data.get('file_name')
75+
document['mime_type'] = data.get('mime_type')
76+
document['file_size'] = data.get('file_size', 0)
77+
78+
return Document(**document)
4979

5080
def to_dict(self):
51-
data = {'file_id': self.file_id}
81+
"""
82+
Returns:
83+
dict:
84+
"""
85+
data = dict()
86+
87+
# Required
88+
data['file_id'] = self.file_id
89+
# Optionals
5290
if self.thumb:
5391
data['thumb'] = self.thumb.to_dict()
5492
if self.file_name:
@@ -57,4 +95,5 @@ def to_dict(self):
5795
data['mime_type'] = self.mime_type
5896
if self.file_size:
5997
data['file_size'] = self.file_size
98+
6099
return data

0 commit comments

Comments
 (0)
X Tutup