diff --git a/telegram/ext/basepersistence.py b/telegram/ext/basepersistence.py index 974b97f8f8c..3e03249240d 100644 --- a/telegram/ext/basepersistence.py +++ b/telegram/ext/basepersistence.py @@ -76,7 +76,7 @@ class BasePersistence(Generic[UD, CD, BD], ABC): store_bot_data (:obj:`bool`, optional): Whether bot_data should be saved by this persistence class. Default is :obj:`True`. store_callback_data (:obj:`bool`, optional): Whether callback_data should be saved by this - persistence class. Default is :obj:`False`. + persistence class. Default is :obj:`True`. .. versionadded:: 13.6 @@ -176,7 +176,7 @@ def __init__( store_user_data: bool = True, store_chat_data: bool = True, store_bot_data: bool = True, - store_callback_data: bool = False, + store_callback_data: bool = True, ): self.store_user_data = store_user_data self.store_chat_data = store_chat_data @@ -439,17 +439,20 @@ def get_bot_data(self) -> BD: :class:`telegram.ext.utils.types.BD`: The restored bot data. """ + @abstractmethod def get_callback_data(self) -> Optional[CDCData]: """Will be called by :class:`telegram.ext.Dispatcher` upon creation with a persistence object. If callback data was stored, it should be returned. .. versionadded:: 13.6 + .. versionchanged:: 14.0 + Changed this method into an ``@abstractmethod``. + Returns: Optional[:class:`telegram.ext.utils.types.CDCData`]: The restored meta data or :obj:`None`, if no data was stored. """ - raise NotImplementedError @abstractmethod def get_conversations(self, name: str) -> ConversationDict: @@ -510,6 +513,7 @@ def update_bot_data(self, data: BD) -> None: :attr:`telegram.ext.Dispatcher.bot_data`. """ + @abstractmethod def refresh_user_data(self, user_id: int, user_data: UD) -> None: """Will be called by the :class:`telegram.ext.Dispatcher` before passing the :attr:`user_data` to a callback. Can be used to update data stored in :attr:`user_data` @@ -517,11 +521,15 @@ def refresh_user_data(self, user_id: int, user_data: UD) -> None: .. versionadded:: 13.6 + .. versionchanged:: 14.0 + Changed this method into an ``@abstractmethod``. + Args: user_id (:obj:`int`): The user ID this :attr:`user_data` is associated with. user_data (:class:`telegram.ext.utils.types.UD`): The ``user_data`` of a single user. """ + @abstractmethod def refresh_chat_data(self, chat_id: int, chat_data: CD) -> None: """Will be called by the :class:`telegram.ext.Dispatcher` before passing the :attr:`chat_data` to a callback. Can be used to update data stored in :attr:`chat_data` @@ -529,11 +537,15 @@ def refresh_chat_data(self, chat_id: int, chat_data: CD) -> None: .. versionadded:: 13.6 + .. versionchanged:: 14.0 + Changed this method into an ``@abstractmethod``. + Args: chat_id (:obj:`int`): The chat ID this :attr:`chat_data` is associated with. chat_data (:class:`telegram.ext.utils.types.CD`): The ``chat_data`` of a single chat. """ + @abstractmethod def refresh_bot_data(self, bot_data: BD) -> None: """Will be called by the :class:`telegram.ext.Dispatcher` before passing the :attr:`bot_data` to a callback. Can be used to update data stored in :attr:`bot_data` @@ -541,25 +553,35 @@ def refresh_bot_data(self, bot_data: BD) -> None: .. versionadded:: 13.6 + .. versionchanged:: 14.0 + Changed this method into an ``@abstractmethod``. + Args: bot_data (:class:`telegram.ext.utils.types.BD`): The ``bot_data``. """ + @abstractmethod def update_callback_data(self, data: CDCData) -> None: """Will be called by the :class:`telegram.ext.Dispatcher` after a handler has handled an update. .. versionadded:: 13.6 + .. versionchanged:: 14.0 + Changed this method into an ``@abstractmethod``. + Args: data (:class:`telegram.ext.utils.types.CDCData`): The relevant data to restore :class:`telegram.ext.CallbackDataCache`. """ - raise NotImplementedError + @abstractmethod def flush(self) -> None: """Will be called by :class:`telegram.ext.Updater` upon receiving a stop signal. Gives the persistence a chance to finish up saving or close a database connection gracefully. + + .. versionchanged:: 14.0 + Changed this method into an ``@abstractmethod``. """ REPLACED_BOT: ClassVar[str] = 'bot_instance_replaced_by_ptb_persistence' diff --git a/telegram/ext/dictpersistence.py b/telegram/ext/dictpersistence.py index 72c767d74fa..0b9390a50a6 100644 --- a/telegram/ext/dictpersistence.py +++ b/telegram/ext/dictpersistence.py @@ -402,3 +402,10 @@ def refresh_bot_data(self, bot_data: Dict) -> None: .. versionadded:: 13.6 .. seealso:: :meth:`telegram.ext.BasePersistence.refresh_bot_data` """ + + def flush(self) -> None: + """Does nothing. + + .. versionadded:: 14.0 + .. seealso:: :meth:`telegram.ext.BasePersistence.flush` + """ diff --git a/tests/test_dispatcher.py b/tests/test_dispatcher.py index 4c25f8a3ab1..c69ae515cb8 100644 --- a/tests/test_dispatcher.py +++ b/tests/test_dispatcher.py @@ -632,6 +632,18 @@ def get_conversations(self, name): def update_conversation(self, name, key, new_state): pass + def refresh_user_data(self, user_id, user_data): + pass + + def refresh_chat_data(self, chat_id, chat_data): + pass + + def refresh_bot_data(self, bot_data): + pass + + def flush(self): + pass + def start1(b, u): pass @@ -776,6 +788,9 @@ def refresh_user_data(self, user_id, user_data): def refresh_chat_data(self, chat_id, chat_data): pass + def flush(self): + pass + def callback(update, context): pass @@ -845,6 +860,15 @@ def refresh_user_data(self, user_id, user_data): def refresh_chat_data(self, chat_id, chat_data): pass + def get_callback_data(self): + pass + + def update_callback_data(self, data): + pass + + def flush(self): + pass + def callback(update, context): pass diff --git a/tests/test_persistence.py b/tests/test_persistence.py index 56e797219df..d03bf835b98 100644 --- a/tests/test_persistence.py +++ b/tests/test_persistence.py @@ -98,6 +98,24 @@ def update_conversation(self, name, key, new_state): def update_user_data(self, user_id, data): raise NotImplementedError + def get_callback_data(self): + raise NotImplementedError + + def refresh_user_data(self, user_id, user_data): + raise NotImplementedError + + def refresh_chat_data(self, chat_id, chat_data): + raise NotImplementedError + + def refresh_bot_data(self, bot_data): + raise NotImplementedError + + def update_callback_data(self, data): + raise NotImplementedError + + def flush(self): + raise NotImplementedError + @pytest.fixture(scope="function") def base_persistence(): @@ -148,6 +166,18 @@ def update_callback_data(self, data): def update_conversation(self, name, key, new_state): raise NotImplementedError + def refresh_user_data(self, user_id, user_data): + pass + + def refresh_chat_data(self, chat_id, chat_data): + pass + + def refresh_bot_data(self, bot_data): + pass + + def flush(self): + pass + return BotPersistence() @@ -239,9 +269,11 @@ def test_abstract_methods(self, base_persistence): with pytest.raises( TypeError, match=( - 'get_bot_data, get_chat_data, get_conversations, ' - 'get_user_data, update_bot_data, update_chat_data, ' - 'update_conversation, update_user_data' + 'flush, get_bot_data, get_callback_data, ' + 'get_chat_data, get_conversations, ' + 'get_user_data, refresh_bot_data, refresh_chat_data, ' + 'refresh_user_data, update_bot_data, update_callback_data, ' + 'update_chat_data, update_conversation, update_user_data' ), ): BasePersistence()