More refactoring and docstrings #232

This commit is contained in:
Leandro Toledo 2016-04-21 09:21:12 -03:00
parent ba7e1cada7
commit bb36c725af
7 changed files with 97 additions and 46 deletions

View file

@ -20,11 +20,11 @@
"""This module contains a object that represents a Telegram Bot."""
import functools
import logging
import functools
from telegram import (User, Message, Update, UserProfilePhotos, File,
ReplyMarkup, TelegramObject, NullHandler)
from telegram import User, Message, Update, UserProfilePhotos, File, \
ReplyMarkup, TelegramObject, NullHandler
from telegram.utils import request
from telegram.utils.validate import validate_token
@ -57,14 +57,14 @@ class Bot(TelegramObject):
self.token = validate_token(token)
if not base_url:
self.base_url = 'https://api.telegram.org/bot%s' % \
self.token
self.base_url = 'https://api.telegram.org/bot{}'.format(
self.token)
else:
self.base_url = base_url + self.token
if not base_file_url:
self.base_file_url = 'https://api.telegram.org/file/bot%s' % \
self.token
self.base_file_url = 'https://api.telegram.org/file/bot{}'.format(
self.token)
else:
self.base_file_url = base_file_url + self.token
@ -105,7 +105,7 @@ class Bot(TelegramObject):
@property
def name(self):
return '@%s' % self.username
return '@{}'.format(self.username)
def log(func):
logger = logging.getLogger(func.__module__)
@ -165,7 +165,7 @@ class Bot(TelegramObject):
"""
url = '%s/getMe' % self.base_url
url = '{}/getMe'.format(self.base_url)
result = request.get(url)
@ -222,7 +222,7 @@ class Bot(TelegramObject):
"""
url = '%s/sendMessage' % self.base_url
url = '{}/sendMessage'.format(self.base_url)
data = {'chat_id': chat_id,
'text': text}
@ -272,7 +272,7 @@ class Bot(TelegramObject):
"""
url = '%s/forwardMessage' % self.base_url
url = '{}/forwardMessage'.format(self.base_url)
data = {}
@ -331,7 +331,7 @@ class Bot(TelegramObject):
"""
url = '%s/sendPhoto' % self.base_url
url = '{}/sendPhoto'.format(self.base_url)
data = {'chat_id': chat_id,
'photo': photo}
@ -401,7 +401,7 @@ class Bot(TelegramObject):
"""
url = '%s/sendAudio' % self.base_url
url = '{}/sendAudio'.format(self.base_url)
data = {'chat_id': chat_id,
'audio': audio}
@ -461,7 +461,7 @@ class Bot(TelegramObject):
"""
url = '%s/sendDocument' % self.base_url
url = '{}/sendDocument'.format(self.base_url)
data = {'chat_id': chat_id,
'document': document}
@ -513,7 +513,7 @@ class Bot(TelegramObject):
"""
url = '%s/sendSticker' % self.base_url
url = '{}/sendSticker'.format(self.base_url)
data = {'chat_id': chat_id,
'sticker': sticker}
@ -570,7 +570,7 @@ class Bot(TelegramObject):
"""
url = '%s/sendVideo' % self.base_url
url = '{}/sendVideo'.format(self.base_url)
data = {'chat_id': chat_id,
'video': video}
@ -632,7 +632,7 @@ class Bot(TelegramObject):
"""
url = '%s/sendVoice' % self.base_url
url = '{}/sendVoice'.format(self.base_url)
data = {'chat_id': chat_id,
'voice': voice}
@ -685,7 +685,7 @@ class Bot(TelegramObject):
"""
url = '%s/sendLocation' % self.base_url
url = '{}/sendLocation'.format(self.base_url)
data = {'chat_id': chat_id,
'latitude': latitude,
@ -747,7 +747,7 @@ class Bot(TelegramObject):
"""
url = '%s/sendVenue' % self.base_url
url = '{}/sendVenue'.format(self.base_url)
data = {'chat_id': chat_id,
'latitude': latitude,
@ -808,7 +808,7 @@ class Bot(TelegramObject):
"""
url = '%s/sendContact' % self.base_url
url = '{}/sendContact'.format(self.base_url)
data = {'chat_id': chat_id,
'phone_number': phone_number,
@ -843,7 +843,7 @@ class Bot(TelegramObject):
- ChatAction.FIND_LOCATION for location data.
"""
url = '%s/sendChatAction' % self.base_url
url = '{}/sendChatAction'.format(self.base_url)
data = {'chat_id': chat_id,
'action': action}
@ -892,7 +892,7 @@ class Bot(TelegramObject):
"""
url = '%s/answerInlineQuery' % self.base_url
url = '{}/answerInlineQuery'.format(self.base_url)
results = [res.to_dict() for res in results]
@ -940,7 +940,7 @@ class Bot(TelegramObject):
"""
url = '%s/getUserProfilePhotos' % self.base_url
url = '{}/getUserProfilePhotos'.format(self.base_url)
data = {'user_id': user_id}
@ -973,7 +973,7 @@ class Bot(TelegramObject):
"""
url = '%s/getFile' % self.base_url
url = '{}/getFile'.format(self.base_url)
data = {'file_id': file_id}
@ -1009,7 +1009,7 @@ class Bot(TelegramObject):
"""
url = '%s/kickChatMember' % self.base_url
url = '{}/kickChatMember'.format(self.base_url)
data = {'chat_id': chat_id,
'user_id': user_id}
@ -1042,7 +1042,7 @@ class Bot(TelegramObject):
"""
url = '%s/unbanChatMember' % self.base_url
url = '{}/unbanChatMember'.format(self.base_url)
data = {'chat_id': chat_id,
'user_id': user_id}
@ -1077,7 +1077,7 @@ class Bot(TelegramObject):
"""
url = '%s/answerCallbackQuery' % self.base_url
url = '{}/answerCallbackQuery'.format(self.base_url)
data = {'callback_query_id': callback_query_id}
@ -1133,7 +1133,7 @@ class Bot(TelegramObject):
"""
url = '%s/editMessageText' % self.base_url
url = '{}/editMessageText'.format(self.base_url)
data = {'text': text}
@ -1199,7 +1199,7 @@ class Bot(TelegramObject):
"""
url = '%s/editMessageCaption' % self.base_url
url = '{}/editMessageCaption'.format(self.base_url)
data = {}
@ -1254,7 +1254,7 @@ class Bot(TelegramObject):
"""
url = '%s/editMessageReplyMarkup' % self.base_url
url = '{}/editMessageReplyMarkup'.format(self.base_url)
data = {}
@ -1303,7 +1303,7 @@ class Bot(TelegramObject):
"""
url = '%s/getUpdates' % self.base_url
url = '{}/getUpdates'.format(self.base_url)
data = {}
@ -1347,7 +1347,7 @@ class Bot(TelegramObject):
"""
url = '%s/setWebhook' % self.base_url
url = '{}/setWebhook'.format(self.base_url)
data = {}
@ -1378,4 +1378,5 @@ class Bot(TelegramObject):
def __reduce__(self):
return (self.__class__, (self.token,
self.base_url.replace(self.token, '')))
self.base_url.replace(self.token, ''),
self.base_file_url.replace(self.token, '')))

View file

@ -24,20 +24,35 @@ from telegram import TelegramObject
class InlineKeyboardButton(TelegramObject):
"""This object represents a Telegram InlineKeyboardButton."""
"""This object represents a Telegram InlineKeyboardButton.
Attributes:
text (str):
url (str):
callback_data (str):
switch_inline_query (str):
Args:
text (str):
**kwargs: Arbitrary keyword arguments.
Keyword Args:
url (Optional[str]):
callback_data (Optional[str]):
switch_inline_query (Optional[str]):
"""
def __init__(self,
text,
url=None,
callback_data=None,
switch_inline_query=None):
**kwargs):
# Required
self.text = text
# Optionals
self.url = url
self.callback_data = callback_data
self.switch_inline_query = switch_inline_query
self.url = kwargs.get('url', '')
self.callback_data = kwargs.get('callback_data', '')
self.switch_inline_query = kwargs.get('switch_inline_query', '')
@staticmethod
def de_json(data):

View file

@ -24,7 +24,15 @@ from telegram import ReplyMarkup, InlineKeyboardButton
class InlineKeyboardMarkup(ReplyMarkup):
"""This object represents a Telegram InlineKeyboardMarkup."""
"""This object represents a Telegram InlineKeyboardMarkup.
Attributes:
inline_keyboard (List[List[:class:`telegram.InlineKeyboardMarkup`]]):
Args:
inline_keyboard (List[List[:class:`telegram.InlineKeyboardMarkup`]]):
"""
def __init__(self,
inline_keyboard):

View file

@ -30,8 +30,8 @@ class InlineQueryResultArticle(InlineQueryResult):
Attributes:
id (str):
title (str):
input_message_content (telegram.InputMessageContent):
reply_markup (telegram.ReplyMarkup):
input_message_content (:class:`telegram.InputMessageContent`):
reply_markup (:class:`telegram.ReplyMarkup`):
url (str):
hide_url (bool):
description (str):
@ -42,7 +42,7 @@ class InlineQueryResultArticle(InlineQueryResult):
Args:
id (str): Unique identifier for this result, 1-64 Bytes
title (str):
reply_markup (telegram.ReplyMarkup):
reply_markup (:class:`telegram.ReplyMarkup`):
Keyword Args:
url (Optional[str]):

View file

@ -25,6 +25,32 @@ from telegram import InlineQueryResult, InlineKeyboardMarkup, \
class InlineQueryResultAudio(InlineQueryResult):
"""Represents a link to an mp3 audio file. By default, this audio file will
be sent by the user. Alternatively, you can use input_message_content to
send a message with the specified content instead of the audio.
Attributes:
id (str):
audio_url (str):
title (str):
performer (Optional[str]):
audio_duration (Optional[str]):
reply_markup (Optional[:class:`telegram.InlineKeyboardMarkup`]):
input_message_content (Optional[
:class:`telegram.input_message_content`]):
Args:
audio_url (str):
title (str):
**kwargs: Arbitrary keyword arguments.
Keyword Args:
performer (Optional[str]):
audio_duration (Optional[str]):
reply_markup (Optional[:class:`telegram.InlineKeyboardMarkup`]):
input_message_content (Optional[
:class:`telegram.input_message_content`]):
"""
def __init__(self,
id,
audio_url,

View file

@ -186,8 +186,9 @@ class BotTest(BaseTest, unittest.TestCase):
def testInvalidSrvResp(self):
with self.assertRaisesRegexp(telegram.TelegramError, 'Invalid server response'):
# bypass the valid token check
bot_cls = type('bot_cls', (telegram.Bot, ), {'_valid_token': lambda self, token: token})
bot = bot_cls('12')
bot = telegram.Bot.__new__(telegram.Bot)
bot.base_url = 'https://api.telegram.org/bot{}'.format('12')
bot.getMe()