Skip to content

get_chats() падает, когда в чате нет last_message (GetChatByIdResponse.last_message должен быть Optional) #4

@scoperf1ld

Description

@scoperf1ld

Поле 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"})

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions