add pass_job_queue parameter to all handler classes

This commit is contained in:
Jannes Höke 2016-05-26 14:39:11 +02:00
parent 20067ff178
commit bb165b6acf
13 changed files with 139 additions and 53 deletions

View file

@ -34,10 +34,15 @@ class CallbackQueryHandler(Handler):
pass_update_queue (optional[bool]): If the handler should be passed the
update queue as a keyword argument called ``update_queue``. It can
be used to insert updates. Default is ``False``
pass_job_queue (optional[bool]): If the callback should be passed the job queue as a
keyword argument called ``job_queue``. It can be used to schedule new jobs.
Default is ``False``
"""
def __init__(self, callback, pass_update_queue=False):
super(CallbackQueryHandler, self).__init__(callback, pass_update_queue)
def __init__(self, callback, pass_update_queue=False, pass_job_queue=False):
super(CallbackQueryHandler, self).__init__(callback,
pass_update_queue=pass_update_queue,
pass_job_queue=pass_job_queue)
def check_update(self, update):
return isinstance(update, Update) and update.callback_query

View file

@ -35,10 +35,15 @@ class ChosenInlineResultHandler(Handler):
pass_update_queue (optional[bool]): If the handler should be passed the
update queue as a keyword argument called ``update_queue``. It can
be used to insert updates. Default is ``False``
pass_job_queue (optional[bool]): If the callback should be passed the job queue as a
keyword argument called ``job_queue``. It can be used to schedule new jobs.
Default is ``False``
"""
def __init__(self, callback, pass_update_queue=False):
super(ChosenInlineResultHandler, self).__init__(callback, pass_update_queue)
def __init__(self, callback, pass_update_queue=False, pass_job_queue=False):
super(ChosenInlineResultHandler, self).__init__(callback,
pass_update_queue=pass_update_queue,
pass_job_queue=pass_job_queue)
def check_update(self, update):
return isinstance(update, Update) and update.chosen_inline_result

View file

@ -41,10 +41,20 @@ class CommandHandler(Handler):
pass_update_queue (optional[bool]): If the handler should be passed the
update queue as a keyword argument called ``update_queue``. It can
be used to insert updates. Default is ``False``
pass_job_queue (optional[bool]): If the callback should be passed the job queue as a
keyword argument called ``job_queue``. It can be used to schedule new jobs.
Default is ``False``
"""
def __init__(self, command, callback, pass_args=False, pass_update_queue=False):
super(CommandHandler, self).__init__(callback, pass_update_queue)
def __init__(self,
command,
callback,
pass_args=False,
pass_update_queue=False,
pass_job_queue=False):
super(CommandHandler, self).__init__(callback,
pass_update_queue=pass_update_queue,
pass_job_queue=pass_job_queue)
self.command = command
self.pass_args = pass_args

View file

@ -90,11 +90,16 @@ class Dispatcher(object):
handlers
update_queue (Queue): The synchronized queue that will contain the
updates.
job_queue (Optional[telegram.ext.JobQueue]): The ``JobQueue`` instance to pass onto handler
callbacks
workers (Optional[int]): Number of maximum concurrent worker threads for the ``@run_async``
decorator
"""
def __init__(self, bot, update_queue, workers=4, exception_event=None):
def __init__(self, bot, update_queue, job_queue=None, workers=4, exception_event=None):
self.bot = bot
self.update_queue = update_queue
self.job_queue = job_queue
self.handlers = {}
""":type: dict[int, list[Handler]"""

View file

@ -34,11 +34,15 @@ class Handler(object):
pass_update_queue (optional[bool]): If the callback should be passed
the update queue as a keyword argument called ``update_queue``. It
can be used to insert updates. Default is ``False``
pass_job_queue (optional[bool]): If the callback should be passed the job queue as a
keyword argument called ``job_queue``. It can be used to schedule new jobs.
Default is ``False``
"""
def __init__(self, callback, pass_update_queue=False):
def __init__(self, callback, pass_update_queue=False, pass_job_queue=False):
self.callback = callback
self.pass_update_queue = pass_update_queue
self.pass_job_queue = pass_job_queue
def check_update(self, update):
"""
@ -77,6 +81,8 @@ class Handler(object):
optional_args = dict()
if self.pass_update_queue:
optional_args['update_queue'] = dispatcher.update_queue
if self.pass_job_queue:
optional_args['job_queue'] = dispatcher.job_queue
return optional_args

View file

@ -34,10 +34,15 @@ class InlineQueryHandler(Handler):
pass_update_queue (optional[bool]): If the handler should be passed the
update queue as a keyword argument called ``update_queue``. It can
be used to insert updates. Default is ``False``
pass_job_queue (optional[bool]): If the callback should be passed the job queue as a
keyword argument called ``job_queue``. It can be used to schedule new jobs.
Default is ``False``
"""
def __init__(self, callback, pass_update_queue=False):
super(InlineQueryHandler, self).__init__(callback, pass_update_queue)
def __init__(self, callback, pass_update_queue=False, pass_job_queue=False):
super(InlineQueryHandler, self).__init__(callback,
pass_update_queue=pass_update_queue,
pass_job_queue=pass_job_queue)
def check_update(self, update):
return isinstance(update, Update) and update.inline_query

View file

@ -102,10 +102,15 @@ class MessageHandler(Handler):
pass_update_queue (optional[bool]): If the handler should be passed the
update queue as a keyword argument called ``update_queue``. It can
be used to insert updates. Default is ``False``
pass_job_queue (optional[bool]): If the callback should be passed the job queue as a
keyword argument called ``job_queue``. It can be used to schedule new jobs.
Default is ``False``
"""
def __init__(self, filters, callback, pass_update_queue=False):
super(MessageHandler, self).__init__(callback, pass_update_queue)
def __init__(self, filters, callback, pass_update_queue=False, pass_job_queue=False):
super(MessageHandler, self).__init__(callback,
pass_update_queue=pass_update_queue,
pass_job_queue=pass_job_queue)
self.filters = filters
def check_update(self, update):

View file

@ -48,6 +48,9 @@ class RegexHandler(Handler):
pass_update_queue (optional[bool]): If the handler should be passed the
update queue as a keyword argument called ``update_queue``. It can
be used to insert updates. Default is ``False``
pass_job_queue (optional[bool]): If the callback should be passed the job queue as a
keyword argument called ``job_queue``. It can be used to schedule new jobs.
Default is ``False``
"""
def __init__(self,
@ -55,8 +58,11 @@ class RegexHandler(Handler):
callback,
pass_groups=False,
pass_groupdict=False,
pass_update_queue=False):
super(RegexHandler, self).__init__(callback, pass_update_queue)
pass_update_queue=False,
pass_job_queue=False):
super(RegexHandler, self).__init__(callback,
pass_update_queue=pass_update_queue,
pass_job_queue=pass_job_queue)
if isinstance(pattern, string_types):
pattern = re.compile(pattern)

View file

@ -39,10 +39,20 @@ class StringCommandHandler(Handler):
pass_update_queue (optional[bool]): If the handler should be passed the
update queue as a keyword argument called ``update_queue``. It can
be used to insert updates. Default is ``False``
pass_job_queue (optional[bool]): If the callback should be passed the job queue as a
keyword argument called ``job_queue``. It can be used to schedule new jobs.
Default is ``False``
"""
def __init__(self, command, callback, pass_args=False, pass_update_queue=False):
super(StringCommandHandler, self).__init__(callback, pass_update_queue)
def __init__(self,
command,
callback,
pass_args=False,
pass_update_queue=False,
pass_job_queue=False):
super(StringCommandHandler, self).__init__(callback,
pass_update_queue=pass_update_queue,
pass_job_queue=pass_job_queue)
self.command = command
self.pass_args = pass_args

View file

@ -47,6 +47,9 @@ class StringRegexHandler(Handler):
pass_update_queue (optional[bool]): If the handler should be passed the
update queue as a keyword argument called ``update_queue``. It can
be used to insert updates. Default is ``False``
pass_job_queue (optional[bool]): If the callback should be passed the job queue as a
keyword argument called ``job_queue``. It can be used to schedule new jobs.
Default is ``False``
"""
def __init__(self,
@ -54,8 +57,11 @@ class StringRegexHandler(Handler):
callback,
pass_groups=False,
pass_groupdict=False,
pass_update_queue=False):
super(StringRegexHandler, self).__init__(callback, pass_update_queue)
pass_update_queue=False,
pass_job_queue=False):
super(StringRegexHandler, self).__init__(callback,
pass_update_queue=pass_update_queue,
pass_job_queue=pass_job_queue)
if isinstance(pattern, string_types):
pattern = re.compile(pattern)

View file

@ -37,10 +37,20 @@ class TypeHandler(Handler):
pass_update_queue (optional[bool]): If the handler should be passed the
update queue as a keyword argument called ``update_queue``. It can
be used to insert updates. Default is ``False``
pass_job_queue (optional[bool]): If the callback should be passed the job queue as a
keyword argument called ``job_queue``. It can be used to schedule new jobs.
Default is ``False``
"""
def __init__(self, type, callback, strict=False, pass_update_queue=False):
super(TypeHandler, self).__init__(callback, pass_update_queue)
def __init__(self,
type,
callback,
strict=False,
pass_update_queue=False,
pass_job_queue=False):
super(TypeHandler, self).__init__(callback,
pass_update_queue=pass_update_queue,
pass_job_queue=pass_job_queue)
self.type = type
self.strict = strict

View file

@ -78,7 +78,11 @@ class Updater(object):
self.update_queue = Queue()
self.job_queue = JobQueue(self.bot)
self.__exception_event = Event()
self.dispatcher = Dispatcher(self.bot, self.update_queue, workers, self.__exception_event)
self.dispatcher = Dispatcher(self.bot,
self.update_queue,
job_queue=self.job_queue,
workers=workers,
exception_event=self.__exception_event)
self.last_update_id = 0
self.logger = logging.getLogger(__name__)
self.running = False

View file

@ -71,6 +71,11 @@ class UpdaterTest(BaseTest, unittest.TestCase):
WebhookHandler
"""
updater = None
received_message = None
message_count = None
lock = None
def setUp(self):
self.updater = None
self.received_message = None
@ -116,9 +121,12 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self.received_message = (groups, groupdict)
self.message_count += 1
def additionalArgsTest(self, bot, update, update_queue, args):
def additionalArgsTest(self, bot, update, update_queue, job_queue, args):
job_queue.put(Job(lambda bot, job: job.schedule_removal(), 0.1))
self.received_message = update
self.message_count += 1
if args[0] == 'resend':
update_queue.put('/test5 noresend')
elif args[0] == 'noresend':
@ -144,13 +152,13 @@ class UpdaterTest(BaseTest, unittest.TestCase):
d = self.updater.dispatcher
from telegram.ext import Filters
handler = MessageHandler([Filters.text], self.telegramHandlerTest)
d.addHandler(handler)
d.add_handler(handler)
self.updater.start_polling(0.01)
sleep(.1)
self.assertEqual(self.received_message, 'Test')
# Remove handler
d.removeHandler(handler)
d.remove_handler(handler)
self.reset()
self.updater.bot.send_messages = 1
@ -159,7 +167,7 @@ class UpdaterTest(BaseTest, unittest.TestCase):
def test_addTelegramMessageHandlerMultipleMessages(self):
self._setup_updater('Multiple', 100)
self.updater.dispatcher.addHandler(MessageHandler([], self.telegramHandlerTest))
self.updater.dispatcher.add_handler(MessageHandler([], self.telegramHandlerTest))
self.updater.start_polling(0.0)
sleep(2)
self.assertEqual(self.received_message, 'Multiple')
@ -170,13 +178,13 @@ class UpdaterTest(BaseTest, unittest.TestCase):
d = self.updater.dispatcher
regobj = re.compile('Te.*')
handler = RegexHandler(regobj, self.telegramHandlerTest)
self.updater.dispatcher.addHandler(handler)
self.updater.dispatcher.add_handler(handler)
self.updater.start_polling(0.01)
sleep(.1)
self.assertEqual(self.received_message, 'Test2')
# Remove handler
d.removeHandler(handler)
d.remove_handler(handler)
self.reset()
self.updater.bot.send_messages = 1
@ -187,13 +195,13 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self._setup_updater('/test')
d = self.updater.dispatcher
handler = CommandHandler('test', self.telegramHandlerTest)
self.updater.dispatcher.addHandler(handler)
self.updater.dispatcher.add_handler(handler)
self.updater.start_polling(0.01)
sleep(.1)
self.assertEqual(self.received_message, '/test')
# Remove handler
d.removeHandler(handler)
d.remove_handler(handler)
self.reset()
self.updater.bot.send_messages = 1
@ -204,14 +212,14 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self._setup_updater('', messages=0)
d = self.updater.dispatcher
handler = StringRegexHandler('Te.*', self.stringHandlerTest)
d.addHandler(handler)
d.add_handler(handler)
queue = self.updater.start_polling(0.01)
queue.put('Test3')
sleep(.1)
self.assertEqual(self.received_message, 'Test3')
# Remove handler
d.removeHandler(handler)
d.remove_handler(handler)
self.reset()
queue.put('Test3')
@ -222,7 +230,7 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self._setup_updater('', messages=0)
d = self.updater.dispatcher
handler = StringCommandHandler('test3', self.stringHandlerTest)
d.addHandler(handler)
d.add_handler(handler)
queue = self.updater.start_polling(0.01)
queue.put('/test3')
@ -230,7 +238,7 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self.assertEqual(self.received_message, '/test3')
# Remove handler
d.removeHandler(handler)
d.remove_handler(handler)
self.reset()
queue.put('/test3')
@ -240,7 +248,7 @@ class UpdaterTest(BaseTest, unittest.TestCase):
def test_addRemoveErrorHandler(self):
self._setup_updater('', messages=0)
d = self.updater.dispatcher
d.addErrorHandler(self.errorHandlerTest)
d.add_error_handler(self.errorHandlerTest)
queue = self.updater.start_polling(0.01)
error = TelegramError("Unauthorized.")
queue.put(error)
@ -248,7 +256,7 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self.assertEqual(self.received_message, "Unauthorized.")
# Remove handler
d.removeErrorHandler(self.errorHandlerTest)
d.remove_error_handler(self.errorHandlerTest)
self.reset()
queue.put(error)
@ -259,8 +267,8 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self._setup_updater('', messages=0)
d = self.updater.dispatcher
handler = StringRegexHandler('.*', self.errorRaisingHandlerTest)
d.addHandler(handler)
self.updater.dispatcher.addErrorHandler(self.errorHandlerTest)
d.add_handler(handler)
self.updater.dispatcher.add_error_handler(self.errorHandlerTest)
queue = self.updater.start_polling(0.01)
queue.put('Test Error 1')
@ -271,7 +279,7 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self._setup_updater('')
d = self.updater.dispatcher
handler = MessageHandler([], self.telegramHandlerTest)
d.addHandler(handler)
d.add_handler(handler)
self.updater.start_polling(0.01, clean=True)
sleep(.1)
self.assertEqual(self.message_count, 0)
@ -280,7 +288,7 @@ class UpdaterTest(BaseTest, unittest.TestCase):
def test_errorOnGetUpdates(self):
self._setup_updater('', raise_error=True)
d = self.updater.dispatcher
d.addErrorHandler(self.errorHandlerTest)
d.add_error_handler(self.errorHandlerTest)
self.updater.start_polling(0.01)
sleep(.1)
self.assertEqual(self.received_message, "Test Error 2")
@ -289,7 +297,7 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self._setup_updater('', messages=0)
d = self.updater.dispatcher
handler = TypeHandler(dict, self.stringHandlerTest)
d.addHandler(handler)
d.add_handler(handler)
queue = self.updater.start_polling(0.01)
payload = {"Test": 42}
queue.put(payload)
@ -297,7 +305,7 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self.assertEqual(self.received_message, payload)
# Remove handler
d.removeHandler(handler)
d.remove_handler(handler)
self.reset()
queue.put(payload)
@ -309,8 +317,8 @@ class UpdaterTest(BaseTest, unittest.TestCase):
d = self.updater.dispatcher
handler = InlineQueryHandler(self.telegramInlineHandlerTest)
handler2 = ChosenInlineResultHandler(self.telegramInlineHandlerTest)
d.addHandler(handler)
d.addHandler(handler2)
d.add_handler(handler)
d.add_handler(handler2)
queue = self.updater.start_polling(0.01)
update = Update(update_id=0, inline_query="testquery")
update2 = Update(update_id=0, chosen_inline_result="testresult")
@ -323,8 +331,8 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self.assertEqual(self.received_message[1], "testresult")
# Remove handler
d.removeHandler(handler)
d.removeHandler(handler2)
d.remove_handler(handler)
d.remove_handler(handler2)
self.reset()
queue.put(update)
@ -335,7 +343,7 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self._setup_updater('', messages=0)
d = self.updater.dispatcher
handler = CallbackQueryHandler(self.telegramCallbackHandlerTest)
d.addHandler(handler)
d.add_handler(handler)
queue = self.updater.start_polling(0.01)
update = Update(update_id=0, callback_query="testcallback")
queue.put(update)
@ -343,7 +351,7 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self.assertEqual(self.received_message, "testcallback")
# Remove handler
d.removeHandler(handler)
d.remove_handler(handler)
self.reset()
queue.put(update)
@ -354,7 +362,7 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self._setup_updater('Test5', messages=2)
d = self.updater.dispatcher
handler = MessageHandler([], self.asyncHandlerTest)
d.addHandler(handler)
d.add_handler(handler)
self.updater.start_polling(0.01)
sleep(1.2)
self.assertEqual(self.received_message, 'Test5')
@ -365,8 +373,9 @@ class UpdaterTest(BaseTest, unittest.TestCase):
handler = StringCommandHandler('test5',
self.additionalArgsTest,
pass_update_queue=True,
pass_job_queue=True,
pass_args=True)
self.updater.dispatcher.addHandler(handler)
self.updater.dispatcher.add_handler(handler)
queue = self.updater.start_polling(0.01)
queue.put('/test5 resend')
@ -381,7 +390,7 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self.regexGroupHandlerTest,
pass_groupdict=True,
pass_groups=True)
d.addHandler(handler)
d.add_handler(handler)
queue = self.updater.start_polling(0.01)
queue.put('This is a test message for regex group matching.')
sleep(.1)
@ -392,7 +401,7 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self._setup_updater('Test6', messages=2)
d = self.updater.dispatcher
handler = MessageHandler([], self.asyncAdditionalHandlerTest, pass_update_queue=True)
d.addHandler(handler)
d.add_handler(handler)
self.updater.start_polling(0.01)
sleep(1.2)
self.assertEqual(self.received_message, 'Test6')
@ -402,7 +411,7 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self._setup_updater('', messages=0)
d = self.updater.dispatcher
handler = MessageHandler([], self.telegramHandlerTest)
d.addHandler(handler)
d.add_handler(handler)
ip = '127.0.0.1'
port = randrange(1024, 49152) # Select random port for travis
@ -452,7 +461,7 @@ class UpdaterTest(BaseTest, unittest.TestCase):
self._setup_updater('', messages=0)
d = self.updater.dispatcher
handler = MessageHandler([], self.telegramHandlerTest)
d.addHandler(handler)
d.add_handler(handler)
ip = '127.0.0.1'
port = randrange(1024, 49152) # Select random port for travis