Исправляемый объект разрушается просто путем установки точки останова внутри метода исправляемого объекта

#python #python-unittest #pdb

#python #python-unittest #pdb

Вопрос:

(код: pastebin)

Почему исправление telegram.Bot объекта экземпляра с ptbtest.Mockbot помощью объекта экземпляра разрушается, просто установив точку останова внутри обработчика ( start_reg ) или внутри метода исправленного объекта (a telegram,Bot ) ?

context.bot и bot одинаковы без отладки и отличаются внутри. Из-за неудачного исправления мои тесты тоже не выполняются.

Вы можете видеть в выводе, что pdb.set_trace() строка комментария также изменяет print вывод.

Пожалуйста, не стесняйтесь задавать любую дополнительную информацию в комментарии.

MWE:

 # # # BEGIN FILE 1 # # #
import unittest
from unittest.mock import patch
import warnings
from telegram.utils.deprecate import TelegramDeprecationWarning
from telegram.ext import Updater
from ptbtest import (ChatGenerator,
                     Mockbot,
                     UserGenerator,
                     CallbackQueryGenerator)
 
 
warnings.filterwarnings("ignore", category=TelegramDeprecationWarning)
bot = Mockbot()
 
 
@patch("file_2.bot", bot)
class TestConversation(unittest.TestCase):  # IsolatedAsyncioTestCase - for async
    def setUp(self):  # name method should be exactly "setUp"
        warnings.filterwarnings("ignore", category=TelegramDeprecationWarning)
        self.bot = bot
        self.mg = self.bot.mg
        self.updater = Updater(bot=self.bot)
        self.dispatcher = self.updater.dispatcher
        self.dispatcher.add_handler(handler=file_2.registration)
        self.chat_generator = ChatGenerator()
        self.user_generator = UserGenerator()
        self.cqg = CallbackQueryGenerator()
        self.addCleanup(self.updater.stop)
 
    def test_run(self):
        self.updater.start_polling()  # returns update_queue obj
        generated_user = self.user_generator.get_user(id=177381168)
        generated_chat = self.chat_generator.get_chat(type="group")
        update = self.mg.get_message(user=generated_user, chat=generated_chat, text="/reg", parse_mode="HTML", id=None)
        self.bot.insertUpdate(update=update)
 
 
if __name__ == '__main__':
    unittest.main()
# # # END FILE 1 # # #
 
# # # BEGIN FILE 2 # # #
from telegram.ext import MessageHandler
from telegram.ext import ConversationHandler
from telegram.ext import Filters
from telegram.ext import Updater
from telegram import Bot
from telegram.utils.request import Request
import pdb
 
 
bot = Bot(token='',
          request=Request(connect_timeout=3, read_timeout=3, con_pool_size=16))
 
 
def start_reg(update, context):
    # Line breaks a code
    pdb.set_trace()  # Press c to continue 
    print(bot)
    # `context.bot` and `bot` are the same without debugging and differrent within.
    context.bot.send_message(chat_id=update.effective_user.id, text='123')
    return -1
 
 
registration = ConversationHandler(
    entry_points=[MessageHandler(filters=Filters.regex('/reg'), callback=start_reg)],
    states={},
    fallbacks=[],
)
 
 
if __name__ == '__main__':
    updater = Updater(bot=bot)
    dispatcher = updater.dispatcher
    dispatcher.add_handler(handler=registration)
    updater.start_polling()
    updater.idle()
 
# # # END FILE 2 # # #
 

вывод: (pastebin)

 (venv) david@david-ThinkPad-E480:~/PycharmProjects$ python3 /home/david/.config/JetBrains/PyCharmCE2021.3/scratches/scratch_1.py # With ptb.set_trace
Connection pool of Request object is smaller than optimal value (8)
> /home/david/.config/JetBrains/PyCharmCE2021.3/scratches/scratch_2.py(16)start_reg()
-> print(bot)
(Pdb) c
{'id': 838004799, 'username': 'Test_0101_bot', 'first_name': 'Test-0101-bot'}
.
----------------------------------------------------------------------
Ran 1 test in 3.552s
 
OK
sys:1: ResourceWarning: unclosed <ssl.SSLSocket fd=3, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=6, laddr=('192.168.0.100', 57416), raddr=('149.154.167.220', 443)>
(venv) david@david-ThinkPad-E480:~/PycharmProjects$ python3 /home/david/.config/JetBrains/PyCharmCE2021.3/scratches/scratch_1.py # Without ptb.set_trace
Connection pool of Request object is smaller than optimal value (8)
{'id': 0, 'username': 'MockBot', 'first_name': 'MockBot', 'last_name': 'Bot'}
.
----------------------------------------------------------------------
Ran 1 test in 2.122s
 
OK
(venv) david@david-ThinkPad-E480:~/PycharmProjects$