Поле last_message в файле trueconf/types/responses/get_chat_by_id_response.py объявлено как обязательное LastMessage, но TrueConf API может возвращать null для этого поля, когда в чате ещё нет сообщений. Это вызывает ошибку десериализации mashumaro:
mashumaro.exceptions.InvalidFieldValue: Field "last_message" of type LastMessage
in GetChatByIdResponse has invalid value None
Ожидаемое исправление:
Изменить объявление поля с:
last_message: LastMessage = field(metadata={"alias": "lastMessage"})
На:
last_message: Optional[LastMessage] = field(default=None, metadata={"alias": "lastMessage"})
Примечание:
То же самое поле корректно объявлено как опциональное в типах запросов (created_group_chat.py, created_channel.py и др.), поэтому это выглядит как несогласованность в типах ответов.
Environment:
- python-trueconf-bot==1.1.6
- Python 3.12
- TrueConf Server v5.5.2.11031
Решил таким патчем:
from __future__ import annotations
from typing import Optional
from dataclasses import dataclass, field
from mashumaro import DataClassDictMixin
from trueconf.types.last_message import LastMessage
@dataclass
class GetChatByIdResponse(DataClassDictMixin):
chat_id: str = field(metadata={"alias": "chatId"})
title: str
chat_type: int = field(metadata={"alias": "chatType"})
unread_messages: int = field(metadata={"alias": "unreadMessages"})
last_message: Optional[LastMessage] = field(default=None, metadata={"alias": "lastMessage"})
Поле
last_messageв файлеtrueconf/types/responses/get_chat_by_id_response.pyобъявлено как обязательноеLastMessage, но TrueConf API может возвращатьnullдля этого поля, когда в чате ещё нет сообщений. Это вызывает ошибку десериализации mashumaro:Ожидаемое исправление:
Изменить объявление поля с:
last_message: LastMessage = field(metadata={"alias": "lastMessage"})На:
last_message: Optional[LastMessage] = field(default=None, metadata={"alias": "lastMessage"})Примечание:
То же самое поле корректно объявлено как опциональное в типах запросов (created_group_chat.py, created_channel.py и др.), поэтому это выглядит как несогласованность в типах ответов.
Environment:
Решил таким патчем: