diff --git a/telethon/client/telegrambaseclient.py b/telethon/client/telegrambaseclient.py index 7f154a97..c234f357 100644 --- a/telethon/client/telegrambaseclient.py +++ b/telethon/client/telegrambaseclient.py @@ -523,6 +523,12 @@ class TelegramBaseClient(abc.ABC): except OSError: print('Failed to connect') """ + # Workaround specific to SQLiteSession, which sometimes need to persist info after init. + # Since .save() is now async we can't do that in init. Instead we do it in the first connect. + if isinstance(self.session, SQLiteSession) and not self.session._init_saved: + await self.session.save() + self.session._init_saved = True + if not await self._sender.connect(self._connection( self.session.server_address, self.session.port, diff --git a/telethon/sessions/sqlite.py b/telethon/sessions/sqlite.py index 963dbc0e..35e8a5c9 100644 --- a/telethon/sessions/sqlite.py +++ b/telethon/sessions/sqlite.py @@ -37,6 +37,7 @@ class SQLiteSession(MemorySession): super().__init__() self.filename = ':memory:' self.save_entities = True + self._init_saved = True if session_id: self.filename = session_id @@ -55,7 +56,7 @@ class SQLiteSession(MemorySession): self._upgrade_database(old=version) c.execute("delete from version") c.execute("insert into version values (?)", (CURRENT_VERSION,)) - self.save() + self._init_saved = False # These values will be saved c.execute('select * from sessions') @@ -109,7 +110,7 @@ class SQLiteSession(MemorySession): c.execute("insert into version values (?)", (CURRENT_VERSION,)) self._update_session_table() c.close() - self.save() + self._init_saved = False def clone(self, to_instance=None): cloned = super().clone(to_instance)