Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Full Support for Bot API 8.0 #4566

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Dec 1, 2024
Merged

Full Support for Bot API 8.0 #4566

merged 10 commits into from
Dec 1, 2024

Conversation

Bibo-Joshi
Copy link
Member

@Bibo-Joshi Bibo-Joshi commented Nov 17, 2024

Master PR for all API 8.0 changes.
Closes #4567 when ready

If the PR contains API changes (otherwise, you can ignore this passage)

  • Checked the Bot API specific sections of the Stability Policy

  • Created a PR to remove functionality deprecated in the previous Bot API release (see here)

  • New classes:

    • Added self._id_attrs and corresponding documentation
    • __init__ accepts api_kwargs as kw-only
  • Added new shortcuts:

    • In telegram.Chat & telegram.User for all methods that accept chat/user_id
    • In telegram.Message for all methods that accept chat_id and message_id
    • For new telegram.Message shortcuts: Added quote argument if methods accepts reply_to_message_id
    • In telegram.CallbackQuery for all methods that accept either chat_id and message_id or inline_message_id
  • If relevant:

    • Added new constants at telegram.constants and shortcuts to them as class variables

    • Link new and existing constants in docstrings instead of hard-coded numbers and strings

    • Add new message types to telegram.Message.effective_attachment

    • Added new handlers for new update types

      • Add the handlers to the warning loop in the telegram.ext.ConversationHandler
    • Added new filters for new message (sub)types

    • Added or updated documentation for the changed class(es) and/or method(s)

    • Added the new method(s) to _extbot.py

    • Added or updated bot_methods.rst

    • Updated the Bot API version number in all places: README.rst (including the badge) and telegram.constants.BOT_API_VERSION_INFO

    • Added logic for arbitrary callback data in telegram.ext.ExtBot for new methods that either accept a reply_markup in some form or have a return type that is/contains telegram.Message

@Bibo-Joshi Bibo-Joshi added ⚙️ bot-api affected functionality: bot-api 🔌 enhancement pr description: enhancement labels Nov 17, 2024
Copy link

codecov bot commented Nov 28, 2024

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
6135 1 6134 224
View the top 1 failed tests by shortest run time
tests.ext.test_application.TestApplication::test_stop_running[polling]
Stack Traces | 0.522s run time
self = <tests.ext.test_application.TestApplication object at 0x7fd8a93a18b0>
one_time_bot = PytestExtBot[token=696188732:AAGVwEKfHHlNjscxEDNKAwkhGstZ_ko1mC0]
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd8a4d57310>
method = 'polling'

    @pytest.mark.parametrize("method", ["polling", "webhook"])
    def test_stop_running(self, one_time_bot, monkeypatch, method):
        # asyncio.Event() seems to be hard to use across different threads (awaiting in main
        # thread, setting in another thread), so we use threading.Event() instead.
        # This requires the use of run_in_executor, but that's fine.
        put_update_event = threading.Event()
        callback_done_event = threading.Event()
        called_stop_running = threading.Event()
        assertions = {}
    
        async def post_init(app):
            # Simply calling app.update_queue.put_nowait(method) in the thread_target doesn't work
            # for some reason (probably threading magic), so we use an event from the thread_target
            # to put the update into the queue in the main thread.
            async def task(app):
                await asyncio.get_running_loop().run_in_executor(None, put_update_event.wait)
                await app.update_queue.put(method)
    
            app.create_task(task(app))
    
        app = (
            ApplicationBuilder()
            .application_class(PytestApplication)
            .updater(PytestUpdater(one_time_bot, asyncio.Queue()))
            .post_init(post_init)
            .build()
        )
        monkeypatch.setattr(app.bot, "get_updates", empty_get_updates)
    
        events = []
        monkeypatch.setattr(
            app.updater,
            "stop",
            call_after(app.updater.stop, lambda _: events.append("updater.stop")),
        )
        monkeypatch.setattr(
            app,
            "stop",
            call_after(app.stop, lambda _: events.append("app.stop")),
        )
        monkeypatch.setattr(
            app,
            "shutdown",
            call_after(app.shutdown, lambda _: events.append("app.shutdown")),
        )
        monkeypatch.setattr(app.bot, "set_webhook", return_true)
        monkeypatch.setattr(app.bot, "delete_webhook", return_true)
    
        def thread_target():
            waited = 0
            while not app.running:
                time.sleep(0.05)
                waited += 0.05
                if waited > 5:
                    pytest.fail("App apparently won't start")
    
            time.sleep(0.1)
            assertions["called_stop_running_not_set"] = not called_stop_running.is_set()
    
            put_update_event.set()
            time.sleep(0.1)
    
            assertions["called_stop_running_set"] = called_stop_running.is_set()
    
            # App should have entered `stop` now but not finished it yet because the callback
            # is still running
            assertions["updater.stop_event"] = events == ["updater.stop"]
            assertions["app.running_False"] = not app.running
    
            callback_done_event.set()
            time.sleep(0.1)
    
            # Now that the update is fully handled, we expect the full shutdown
            assertions["events"] = events == ["updater.stop", "app.stop", "app.shutdown"]
    
        async def callback(update, context):
            context.application.stop_running()
            called_stop_running.set()
            await asyncio.get_running_loop().run_in_executor(None, callback_done_event.wait)
    
        app.add_handler(TypeHandler(object, callback))
    
        thread = Thread(target=thread_target)
        thread.start()
    
        if method == "polling":
            app.run_polling(close_loop=False, drop_pending_updates=True)
        else:
            ip = "127.0.0.1"
            port = randrange(1024, 49152)
    
            app.run_webhook(
                ip_address=ip,
                port=port,
                url_path="TOKEN",
                drop_pending_updates=False,
                close_loop=False,
            )
    
        thread.join()
    
        assert len(assertions) == 5
        for key, value in assertions.items():
>           assert value, f"assertion '{key}' failed!"
E           AssertionError: assertion 'updater.stop_event' failed!
E           assert False

tests/ext/test_application.py:2547: AssertionError

To view more test analytics, go to the Test Analytics Dashboard
📢 Thoughts on this report? Let us know!

Copy link
Member Author

@Bibo-Joshi Bibo-Joshi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've now merged everything in the "master" api-8.0 PR, given it another once-over and compared with the html diff from the channel. LGTM now.
Additional reviews are very welcome! the individual prs should be fine for that, I've only changed a handful of things directly in this PR here

@Bibo-Joshi Bibo-Joshi merged commit ef1685c into master Dec 1, 2024
24 checks passed
@Bibo-Joshi Bibo-Joshi deleted the api-8.0 branch December 1, 2024 09:26
@s750Bot

This comment was marked as spam.

@s750Bot

This comment was marked as spam.

cuevasrja added a commit to USB-CI3715/python-telegram-bot that referenced this pull request Dec 13, 2024
…cia entre módulos (#1)

* Refactor datetime imports to use alias for consistency

* Refactor datetime imports to use alias for consistency across modules

* Refactor datetime imports to use alias for consistency in ChatMemberUpdated, Giveaway, Message, MessageOrigin modules

* Refactor datetime imports to use alias for consistency in ChatJoinRequest and ChatMember modules

* Full Support for Bot API 8.0 (python-telegram-bot#4566, python-telegram-bot#4568, python-telegram-bot#4570, python-telegram-bot#4571, python-telegram-bot#4574, python-telegram-bot#4576, python-telegram-bot#4572)

* Documentation Improvements (python-telegram-bot#4573, python-telegram-bot#4565)

Co-authored-by: Snehashish Biswas <[email protected]>
Co-authored-by: poolitzer <[email protected]>

* Bump Version to v21.8 (python-telegram-bot#4583)

* Bump `srvaroa/labeler` from 1.11.1 to 1.12.0 (python-telegram-bot#4586)

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump `pylint` to v3.3.2 to Improve Python 3.13 Support (python-telegram-bot#4590)

* Bump `codecov/codecov-action` from 4 to 5 (python-telegram-bot#4585)

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Allow `Sequence` Input for `allowed_updates` in `Application` and `Updater` Methods (python-telegram-bot#4589)

* Full Support for Bot API 8.1 (python-telegram-bot#4594)

* Use `MessageLimit.DEEP_LINK_LENGTH` in `helpers.create_deep_linked_url` (python-telegram-bot#4597)

* Bump `pytest` from 8.3.3 to 8.3.4 (python-telegram-bot#4596)

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bibo-Joshi <[email protected]>

* Update `aiolimiter` requirement from ~=1.1.0 to >=1.1,<1.3 (python-telegram-bot#4595)

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bibo-Joshi <[email protected]>

* Bump Version to v21.9 (python-telegram-bot#4601)

* Reorder imports to unify `datetime`  usage across modules

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: Bibo-Joshi <[email protected]>
Co-authored-by: Snehashish Biswas <[email protected]>
Co-authored-by: poolitzer <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Luis Pérez <[email protected]>
Co-authored-by: dependabot[bot] <dependabot[bot]@users.noreply.github.com>
Co-authored-by: Juan Andrés Cuevas <[email protected]>
@github-actions github-actions bot locked and limited conversation to collaborators Dec 15, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
⚙️ bot-api affected functionality: bot-api 🔌 enhancement pr description: enhancement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Bot API 8.0
2 participants