Upload Limits¶
maxapi.utils.upload_limits
¶
Ограничения MAX API на загрузку медиафайлов.
Значения взяты из документации метода POST /uploads:
https://dev.max.ru/docs-api/methods/POST/uploads
| Тип | Форматы | Лимиты |
|---|---|---|
image |
JPG/JPEG/PNG/GIF/TIFF/BMP/HEIC | до 50 МБ, ≤7680×7680 px |
video |
MP4, MOV, MKV, WEBM | до 250 МБ |
audio |
MP3, WAV, M4A и др. | до 256 МБ, ≤60 мин |
file |
TXT, DOC, PDF и др. | до 4 ГБ |
Для image и audio оба условия должны выполняться одновременно.
Списки форматов не исчерпывающие: MAX принимает и другие
распространённые форматы, здесь перечислены только явно указанные
в документации.
Единицы измерения — явное допущение библиотеки. Документация MAX не уточняет, двоичные единицы имеются в виду или десятичные; здесь принимаются двоичные (МБ = 1024 ** 2, ГБ = 1024 ** 3). Если сервер трактует их как десятичные, файлы в диапазоне ~47.7–50 MiB предупреждения не получат, хотя сервер может их отклонить.
Заявленный лимит для file — 4 ГБ — это лимит сервера, а не
библиотеки. BaseConnection.upload_file читает файл целиком в память
перед отправкой, поэтому практический потолок ограничен доступной
процессу оперативной памятью и обычно заметно ниже.
Проверка размера (check_upload_size) не бросает исключений: это
осознанное решение. Ограничения на стороне API могут меняться, и
библиотека не должна блокировать загрузку валидных файлов. При
превышении лимита пишется предупреждение в логгер bot, а решение
остаётся за сервером MAX. Проверка вызывается автоматически из
BaseConnection.upload_file и BaseConnection.upload_file_buffer,
то есть на любом пути загрузки.
Разрешение изображений и длительность аудио не проверяются: для этого потребовались бы внешние зависимости (декодеры медиа).
UploadLimits(formats, max_size, max_dimensions=None, max_duration=None)
dataclass
¶
Ограничения на загрузку файла одного типа.
Attributes:
| Name | Type | Description |
|---|---|---|
formats |
tuple[str, ...]
|
Форматы файлов, явно указанные в документации MAX. Список не исчерпывающий. |
max_size |
int
|
Максимальный размер файла в байтах (МБ = 1024 * 1024, ГБ = 1024 ** 3). |
max_dimensions |
tuple[int, int] | None
|
Максимальные размеры изображения (ширина, высота) в пикселях, если ограничение есть. |
max_duration |
int | None
|
Максимальная длительность в секундах, если ограничение есть. |
check_upload_size(size, type, *, name=None)
¶
Проверяет размер файла против лимитов MAX API.
Исключений не бросает: лимиты на стороне API могут меняться, и
библиотека не должна блокировать загрузку валидных файлов. При
превышении лимита пишется предупреждение в логгер bot.
Неизвестный тип загрузки считается допустимым — решение
остаётся за сервером MAX.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
size
|
int
|
Размер файла в байтах. |
required |
type
|
UploadType | str
|
Тип загружаемого файла или его строковое значение. |
required |
name
|
str | None
|
Имя файла для сообщения в логе. |
None
|
Returns:
| Type | Description |
|---|---|
bool
|
True, если размер в пределах лимита, иначе False. |
Source code in maxapi/utils/upload_limits.py
Пример¶
from maxapi.enums.upload_type import UploadType
from maxapi.utils.upload_limits import (
UPLOAD_LIMITS,
check_upload_size,
)
limits = UPLOAD_LIMITS[UploadType.IMAGE]
print(limits.max_size, limits.max_dimensions)
# Мягкая проверка: пишет предупреждение в логгер `bot`
# и возвращает False, исключение не бросается.
ok = check_upload_size(
100 * 1024 * 1024,
UploadType.IMAGE,
name="photo.png",
)
Проверка вызывается автоматически в BaseConnection.upload_file и
BaseConnection.upload_file_buffer, то есть на любом пути загрузки:
bot.upload_media, InputMedia/InputMediaBuffer в attachments,
а также ручной bot.upload_file. Предупреждение появится в логах и
без явного вызова check_upload_size.