Skip to content

Commit

Permalink
Call Application.post_stop Only if Application.stop was called (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
Bibo-Joshi committed May 20, 2024
1 parent 637b8e2 commit b496fab
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 5 deletions.
5 changes: 3 additions & 2 deletions telegram/ext/_application.py
Original file line number Diff line number Diff line change
Expand Up @@ -1086,8 +1086,9 @@ def __run(
loop.run_until_complete(self.updater.stop()) # type: ignore[union-attr]
if self.running:
loop.run_until_complete(self.stop())
if self.post_stop:
loop.run_until_complete(self.post_stop(self))
# post_stop should be called only if stop was called!
if self.post_stop:
loop.run_until_complete(self.post_stop(self))
loop.run_until_complete(self.shutdown())
if self.post_shutdown:
loop.run_until_complete(self.post_shutdown(self))
Expand Down
8 changes: 7 additions & 1 deletion telegram/ext/_applicationbuilder.py
Original file line number Diff line number Diff line change
Expand Up @@ -1334,7 +1334,13 @@ def post_stop(
Tip:
This can be used for custom stop logic that requires to await coroutines, e.g.
sending message to a chat before shutting down the bot
sending message to a chat before shutting down the bot.
Hint:
The callback will be called only, if :meth:`Application.stop` was indeed called
successfully. For example, if the application is stopped early by calling
:meth:`Application.stop_running` within :meth:`post_init`, then the set callback will
*not* be called.
Example:
.. code::
Expand Down
4 changes: 2 additions & 2 deletions tests/ext/test_application.py
Original file line number Diff line number Diff line change
Expand Up @@ -2134,7 +2134,6 @@ def after(_, name):
"app_initialize",
"updater_initialize",
"app_shutdown",
"post_stop",
"post_shutdown",
"updater_shutdown",
}
Expand Down Expand Up @@ -2441,7 +2440,8 @@ async def callback(*args, **kwargs):
app.run_polling(close_loop=False)

# The important part here is that start(_polling) are *not* called!
assert called_callbacks == ["post_stop", "post_shutdown"]
# post_stop must not be called either, since we never called stop()
assert called_callbacks == ["post_shutdown"]

assert len(caplog.records) == 1
assert caplog.records[-1].name == "telegram.ext.Application"
Expand Down

0 comments on commit b496fab

Please sign in to comment.