From 10cd61d2f926561df01f1c0ce268a96e82dba804 Mon Sep 17 00:00:00 2001 From: Lonami Exo Date: Thu, 24 Jan 2019 11:16:40 +0100 Subject: [PATCH] Add missing timezone info in important places Things like SQLAlchemy work correctly only for timezone-aware datetimes. The returned TLObjects all have them, but those that are manually created were missing them, so serializing the state into SQLAlchemy sessions failed. --- telethon/client/auth.py | 6 ++++-- telethon/client/telegrambaseclient.py | 8 +++++--- telethon/tl/custom/draft.py | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/telethon/client/auth.py b/telethon/client/auth.py index a8743e20..7f4e3dd8 100644 --- a/telethon/client/auth.py +++ b/telethon/client/auth.py @@ -359,7 +359,7 @@ class AuthMethods(MessageParseMethods, UserMethods): # `catch_up` on all updates (and obtain necessary access hashes) # if they desire. The date parameter is ignored when pts = 1. self._state.pts = 1 - self._state.date = datetime.datetime.now() + self._state.date = datetime.datetime.now(tz=datetime.timezone.utc) return user @@ -417,7 +417,9 @@ class AuthMethods(MessageParseMethods, UserMethods): self._bot = None self._self_input_peer = None self._authorized = False - self._state = types.updates.State(0, 0, datetime.datetime.now(), 0, 0) + self._state = types.updates.State( + 0, 0, datetime.datetime.now(tz=datetime.timezone.utc), 0, 0) + self.disconnect() self.session.delete() return True diff --git a/telethon/client/telegrambaseclient.py b/telethon/client/telegrambaseclient.py index 91ebe2f1..805f5ab5 100644 --- a/telethon/client/telegrambaseclient.py +++ b/telethon/client/telegrambaseclient.py @@ -4,7 +4,7 @@ import logging import platform import sys import time -from datetime import datetime +from datetime import datetime, timezone from .. import version, __name__ as __base_name__ from ..crypto import rsa @@ -296,8 +296,10 @@ class TelegramBaseClient(abc.ABC): self._dispatching_updates_queue = None self._authorized = None # None = unknown, False = no, True = yes - self._state = (self.session.get_update_state(0) - or types.updates.State(0, 0, datetime.now(), 0, 0)) + self._state = self.session.get_update_state(0) + if not self._state: + self._state = types.updates.State( + 0, 0, datetime.now(tz=timezone.utc), 0, 0) # Some further state for subclasses self._event_builders = [] diff --git a/telethon/tl/custom/draft.py b/telethon/tl/custom/draft.py index 05efefc7..de5e5991 100644 --- a/telethon/tl/custom/draft.py +++ b/telethon/tl/custom/draft.py @@ -159,7 +159,7 @@ class Draft: self._raw_text = raw_text self.link_preview = link_preview self.reply_to_msg_id = reply_to - self.date = datetime.datetime.now() + self.date = datetime.datetime.now(tz=datetime.timezone.utc) return result