diff --git a/aiogram/client/session/aiohttp.py b/aiogram/client/session/aiohttp.py index 9e1d9e1b..69f36bf1 100644 --- a/aiogram/client/session/aiohttp.py +++ b/aiogram/client/session/aiohttp.py @@ -23,10 +23,11 @@ from aiohttp.http import SERVER_SOFTWARE from aiogram.__meta__ import __version__ from aiogram.methods import TelegramMethod -from .base import BaseSession + from ...exceptions import TelegramNetworkError from ...methods.base import TelegramType from ...types import InputFile +from .base import BaseSession if TYPE_CHECKING: from ..bot import Bot diff --git a/aiogram/types/custom.py b/aiogram/types/custom.py index 70a62ded..094fd68c 100644 --- a/aiogram/types/custom.py +++ b/aiogram/types/custom.py @@ -1,13 +1,27 @@ +import sys from datetime import datetime from pydantic import PlainSerializer from typing_extensions import Annotated +if sys.platform == "win32": # pragma: no cover + + def _datetime_serializer(value: datetime) -> int: + # https://github.com/aiogram/aiogram/issues/349 + # https://github.com/aiogram/aiogram/pull/880 + return round((value - datetime(1970, 1, 1)).total_seconds()) + +else: # pragma: no cover + + def _datetime_serializer(value: datetime) -> int: + return round(value.timestamp()) + + # Make datetime compatible with Telegram Bot API (unixtime) DateTime = Annotated[ datetime, PlainSerializer( - func=lambda dt: int(dt.timestamp()), + func=_datetime_serializer, return_type=int, when_used="unless-none", ),