X Tutup
Skip to content

Commit 61530ae

Browse files
committed
Adding logging decorator
1 parent 859f04e commit 61530ae

File tree

17 files changed

+91
-50
lines changed

17 files changed

+91
-50
lines changed

telegram/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
__author__ = 'leandrotoledodesouza@gmail.com'
66
__version__ = '1.9'
77

8+
from .base import TelegramObject
89
from .user import User
910
from .message import Message
1011
from .update import Update
@@ -25,7 +26,6 @@
2526
from .inputfile import InputFile
2627
from .error import TelegramError
2728
from .emoji import Emoji
28-
from .base import TelegramObject
2929
from .bot import Bot
3030

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

telegram/audio.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env python
22

33

4-
from .base import TelegramObject
4+
from telegram import TelegramObject
55

66

77
class Audio(TelegramObject):

telegram/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class TelegramObject(object):
1111
__metaclass__ = ABCMeta
1212

1313
def __str__(self):
14-
return self.to_data()
14+
return str(self.to_data())
1515

1616
def __getitem__(self, item):
1717
return self.__dict__[item]

telegram/bot.py

Lines changed: 74 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,25 @@
1313
from urllib2 import urlopen, Request
1414
from urllib2 import HTTPError, URLError
1515
import functools
16+
import logging
1617

1718
from telegram import (User, Message, Update, UserProfilePhotos, TelegramError,
18-
ReplyMarkup, InputFile)
19+
ReplyMarkup, InputFile, TelegramObject)
1920

21+
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
2022

21-
class Bot(object):
23+
24+
class Bot(TelegramObject):
2225

2326
def __init__(self,
2427
token,
25-
base_url=None):
28+
base_url=None,
29+
debug=True):
30+
self.log = logging.getLogger(__name__)
31+
if debug:
32+
self.log.setLevel(logging.DEBUG)
33+
else:
34+
self.log.setLevel(logging.INFO)
2635

2736
self.token = token
2837

@@ -45,39 +54,27 @@ def __init__(self,
4554

4655
@property
4756
def name(self):
48-
if self.username:
49-
return '@%s' % self.username
50-
if self.last_name:
51-
return '%s %s' % (self.first_name, self.last_name)
52-
return self.first_name
57+
return '@%s' % self.username
5358

54-
def clearCredentials(self):
55-
"""Clear any credentials for this instance.
56-
"""
57-
self.__auth = False
59+
def log(func):
60+
logger = logging.getLogger(func.__module__)
5861

59-
def getMe(self):
60-
"""A simple method for testing your bot's auth token.
61-
62-
Returns:
63-
A telegram.User instance representing that bot if the
64-
credentials are valid, None otherwise.
65-
"""
66-
url = '%s/getMe' % self.base_url
67-
68-
json_data = self._requestUrl(url, 'GET')
69-
data = self._parseAndCheckTelegram(json_data)
70-
71-
return User.de_json(data)
62+
@functools.wraps(func)
63+
def decorator(self, *args, **kwargs):
64+
logger.debug('Entering %s' % func.__name__)
65+
result = func(self, *args, **kwargs)
66+
logger.debug(result)
67+
logger.debug('Exiting %s' % func.__name__)
68+
return result
69+
return decorator
7270

7371
def message(func):
7472
"""
7573
Returns:
7674
A telegram.Message instance representing the message posted.
7775
"""
78-
functools.wraps(func)
79-
80-
def wrap(self, *args, **kwargs):
76+
@functools.wraps(func)
77+
def decorator(self, *args, **kwargs):
8178
url, data = func(self, *args, **kwargs)
8279

8380
if kwargs.get('reply_to_message_id'):
@@ -98,18 +95,41 @@ def wrap(self, *args, **kwargs):
9895
return data
9996

10097
return Message.de_json(data)
101-
return wrap
98+
return decorator
10299

103100
def require_authentication(func):
104-
functools.wraps(func)
105-
106-
def wrap(self, *args, **kwargs):
101+
@functools.wraps(func)
102+
def decorator(self, *args, **kwargs):
107103
if not self.__auth:
108104
raise TelegramError({'message': "API must be authenticated."})
109105

110106
return func(self, *args, **kwargs)
111-
return wrap
107+
return decorator
108+
112109

110+
@log
111+
@require_authentication
112+
def clearCredentials(self):
113+
"""Clear any credentials for this instance.
114+
"""
115+
self.__auth = False
116+
117+
@log
118+
def getMe(self):
119+
"""A simple method for testing your bot's auth token.
120+
121+
Returns:
122+
A telegram.User instance representing that bot if the
123+
credentials are valid, None otherwise.
124+
"""
125+
url = '%s/getMe' % self.base_url
126+
127+
json_data = self._requestUrl(url, 'GET')
128+
data = self._parseAndCheckTelegram(json_data)
129+
130+
return User.de_json(data)
131+
132+
@log
113133
@message
114134
@require_authentication
115135
def sendMessage(self,
@@ -149,6 +169,7 @@ def sendMessage(self,
149169

150170
return url, data
151171

172+
@log
152173
@message
153174
@require_authentication
154175
def forwardMessage(self,
@@ -182,6 +203,7 @@ def forwardMessage(self,
182203

183204
return url, data
184205

206+
@log
185207
@message
186208
@require_authentication
187209
def sendPhoto(self,
@@ -223,6 +245,7 @@ def sendPhoto(self,
223245

224246
return url, data
225247

248+
@log
226249
@message
227250
@require_authentication
228251
def sendAudio(self,
@@ -260,6 +283,7 @@ def sendAudio(self,
260283

261284
return url, data
262285

286+
@log
263287
@message
264288
@require_authentication
265289
def sendDocument(self,
@@ -294,6 +318,7 @@ def sendDocument(self,
294318

295319
return url, data
296320

321+
@log
297322
@message
298323
@require_authentication
299324
def sendSticker(self,
@@ -328,6 +353,7 @@ def sendSticker(self,
328353

329354
return url, data
330355

356+
@log
331357
@message
332358
@require_authentication
333359
def sendVideo(self,
@@ -363,6 +389,7 @@ def sendVideo(self,
363389

364390
return url, data
365391

392+
@log
366393
@message
367394
@require_authentication
368395
def sendLocation(self,
@@ -399,6 +426,7 @@ def sendLocation(self,
399426

400427
return url, data
401428

429+
@log
402430
@message
403431
@require_authentication
404432
def sendChatAction(self,
@@ -430,6 +458,7 @@ def sendChatAction(self,
430458

431459
return url, data
432460

461+
@log
433462
@require_authentication
434463
def getUserProfilePhotos(self,
435464
user_id,
@@ -465,6 +494,7 @@ def getUserProfilePhotos(self,
465494

466495
return UserProfilePhotos.de_json(data)
467496

497+
@log
468498
@require_authentication
469499
def getUpdates(self,
470500
offset=None,
@@ -505,6 +535,7 @@ def getUpdates(self,
505535

506536
return [Update.de_json(x) for x in data]
507537

538+
@log
508539
@require_authentication
509540
def setWebhook(self,
510541
webhook_url):
@@ -531,6 +562,7 @@ def setWebhook(self,
531562

532563
return True
533564

565+
@log
534566
def _requestUrl(self,
535567
url,
536568
method,
@@ -581,6 +613,7 @@ def _requestUrl(self,
581613

582614
return 0 # if not a POST or GET request
583615

616+
@log
584617
def _parseAndCheckTelegram(self,
585618
json_data):
586619
"""Try and parse the JSON returned from Telegram and return an empty
@@ -604,3 +637,11 @@ def _parseAndCheckTelegram(self,
604637
raise TelegramError({'message': 'JSON decoding'})
605638

606639
return data['result']
640+
641+
def to_data(self):
642+
data = {'id': self.id,
643+
'username': self.username,
644+
'first_name': self.username}
645+
if self.last_name:
646+
data['last_name'] = self.last_name
647+
return data

telegram/contact.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env python
22

33

4-
from .base import TelegramObject
4+
from telegram import TelegramObject
55

66

77
class Contact(TelegramObject):

telegram/document.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env python
22

33

4-
from .base import TelegramObject
4+
from telegram import TelegramObject
55

66

77
class Document(TelegramObject):

telegram/forcereply.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env python
22

33

4-
from .base import TelegramObject
4+
from telegram import TelegramObject
55

66

77
class ForceReply(TelegramObject):

telegram/groupchat.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env python
22

33

4-
from .base import TelegramObject
4+
from telegram import TelegramObject
55

66

77
class GroupChat(TelegramObject):

telegram/location.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env python
22

33

4-
from .base import TelegramObject
4+
from telegram import TelegramObject
55

66

77
class Location(TelegramObject):

telegram/message.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env python
22

33

4-
from .base import TelegramObject
4+
from telegram import TelegramObject
55

66

77
class Message(TelegramObject):
@@ -181,7 +181,7 @@ def to_data(self):
181181
if self.document:
182182
data['document'] = self.document.to_data()
183183
if self.photo:
184-
data['photo'] = self.photo.to_data()
184+
data['photo'] = [p.to_data() for p in self.photo]
185185
if self.sticker:
186186
data['sticker'] = self.sticker.to_data()
187187
if self.video:

0 commit comments

Comments
 (0)
X Tutup