from typing import Self
from maxo.enums.attachment_type import AttachmentType
from maxo.errors import AttributeIsEmptyError
from maxo.omit import Omittable, Omitted, is_defined, is_not_omitted
from maxo.types.attachment import Attachment
from maxo.types.media_attachment_payload import MediaAttachmentPayload
from maxo.types.video_attachment_request import VideoAttachmentRequest
from maxo.types.video_thumbnail import VideoThumbnail
[документация]
class VideoAttachment(Attachment):
"""
Args:
duration: Длина видео в секундах
height: Высота видео
payload:
thumbnail: Миниатюра видео
type:
width: Ширина видео
"""
type: AttachmentType = AttachmentType.VIDEO
payload: MediaAttachmentPayload
duration: Omittable[int | None] = Omitted()
"""Длина видео в секундах"""
height: Omittable[int | None] = Omitted()
"""Высота видео"""
thumbnail: Omittable[VideoThumbnail | None] = Omitted()
"""Миниатюра видео"""
width: Omittable[int | None] = Omitted()
"""Ширина видео"""
[документация]
@classmethod
def factory(
cls,
url: str,
token: str,
thumbnail_url: Omittable[str] = Omitted(),
width: Omittable[int | None] = Omitted(),
height: Omittable[int | None] = Omitted(),
duration: Omittable[int | None] = Omitted(),
) -> Self:
"""
Фабричный метод.
Args:
url: URL медиа-вложения. Для видео-вложения используйте метод GetVideoAttachmentDetails, чтобы получить прямые ссылки.
token: Используйте token, если вы пытаетесь повторно использовать одно и то же вложение в другом сообщении..
thumbnail_url: URL изображения
width: Ширина видео
height: Высота видео
duration: Длина видео в секундах
"""
thumbnail: Omittable[VideoThumbnail]
if is_not_omitted(thumbnail_url):
thumbnail = VideoThumbnail(url=thumbnail_url)
else:
thumbnail = Omitted()
return cls(
payload=MediaAttachmentPayload(
url=url,
token=token,
),
thumbnail=thumbnail,
width=width,
height=height,
duration=duration,
)
@property
def unsafe_duration(self) -> int:
if is_defined(self.duration):
return self.duration
raise AttributeIsEmptyError(
obj=self,
attr="duration",
)
@property
def unsafe_height(self) -> int:
if is_defined(self.height):
return self.height
raise AttributeIsEmptyError(
obj=self,
attr="height",
)
@property
def unsafe_thumbnail(self) -> VideoThumbnail:
if is_defined(self.thumbnail):
return self.thumbnail
raise AttributeIsEmptyError(
obj=self,
attr="thumbnail",
)
@property
def unsafe_width(self) -> int:
if is_defined(self.width):
return self.width
raise AttributeIsEmptyError(
obj=self,
attr="width",
)
[документация]
def to_request(self) -> VideoAttachmentRequest:
return VideoAttachmentRequest.factory(token=self.payload.token)