Skip to content

Сделать поля PhotoAttachmentPayload опциональными согласно официальному API#178

Open
max92110 wants to merge 17 commits into
love-apples:mainfrom
max92110:main
Open

Сделать поля PhotoAttachmentPayload опциональными согласно официальному API#178
max92110 wants to merge 17 commits into
love-apples:mainfrom
max92110:main

Conversation

@max92110

Copy link
Copy Markdown

Что изменено

В модели PhotoAttachmentPayload обновлены типы полей: значения, которые в официальной документации MAX API могут отсутствовать, теперь помечены как опциональные.

Это приводит типизацию библиотеки в соответствие с актуальным контрактом API и позволяет корректно обрабатывать payload фото-вложений, где часть данных не возвращается сервером.

Почему это нужно

Согласно официальной документации MAX API, поля в payload фото-вложений не гарантируются как обязательные. Ранее модель ожидала их наличие всегда, из-за чего могли возникать ошибки валидации при обработке корректных ответов API, если некоторые поля отсутствовали.

Что это исправляет

  • Устраняет некорректную строгую типизацию PhotoAttachmentPayload.
  • Предотвращает ошибки при парсинге сообщений с фото-вложениями.
  • Повышает совместимость с официальным API MAX.
  • Делает модель данных более устойчивой к неполному payload от сервера.

Совместимость

Изменение обратно совместимо: существующий код, который работает с заполненными полями PhotoAttachmentPayload, продолжит работать как раньше. При этом пользователям теперь нужно учитывать, что эти поля могут быть None.

Ссылка на документацию

Официальная документация API:
https://dev.max.ru/docs-api/objects/NewMessageBody

…одели проверяется наличие хотя бы одного из полей photo_id, token или url
…например только URL) поэтому предлагаю сделать
@K1rL3s

K1rL3s commented Jul 13, 2026

Copy link
Copy Markdown

Не стоит путать PhotoAttachmentPayload и PhotoAttachmentRequestPayload. В первом обязательно всё, во втором - одно

https://dev.max.ru/docs-api/objects/Message

class PhotoAttachmentPayload(BaseModel):
"""
Данные для фото-вложения.
Attributes:
photo_id: Идентификатор фотографии.
token: Токен для доступа к фото.
url: URL фотографии.
"""
photo_id: int
token: str
url: str

image

class PhotoAttachmentRequestPayload(BaseModel):
"""
Полезная нагрузка для запроса фото-вложения.
Attributes:
url: URL изображения.
token: Токен существующего вложения.
photos: Токены, полученные после загрузки изображений.
"""
url: str | None = None
token: str | None = None
photos: dict[str, PhotoToken] | str | None = None

image

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

PR приводит модель PhotoAttachmentPayload в соответствие с контрактом MAX API, позволяя корректно валидировать payload фото-вложений при отсутствии части полей. Однако в PR также попали изменения поведения Dispatcher.handle() и .python-version, которые не относятся к заявленной цели и меняют контракт/окружение разработки.

Changes:

  • Сделаны опциональными поля photo_id/token/url в PhotoAttachmentPayload.
  • В Dispatcher.handle() добавлено повторное пробрасывание исключений после логирования (меняет контракт обработки ошибок).
  • Обновлён .python-version с 3.10 на 3.12.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 6 comments.

File Description
maxapi/types/attachments/attachment.py Делает поля payload фото-вложений опциональными, чтобы не падать на неполных ответах API.
maxapi/dispatcher.py Меняет поведение обработки ошибок: исключения начинают всплывать из handle().
.python-version Меняет локально рекомендуемую версию Python на 3.12 (вне заявленного скоупа PR).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +33 to +35
photo_id (int): Идентификатор фотографии.
token (str): Токен для доступа к фото.
url (str): URL фотографии.
Comment thread maxapi/dispatcher.py
e,
exc_info=e.cause,
)
raise e
Comment thread maxapi/dispatcher.py
process_info,
e,
)
raise e
Comment thread maxapi/dispatcher.py
process_info,
e,
)
raise e
Comment thread .python-version
@@ -1 +1 @@
3.10
3.12
Comment on lines +38 to +40
photo_id: int | None = None
token: str | None = None
url: str | None = None
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants