Source code for whatsapp_sdk.models.media

"""Media models for WhatsApp SDK.

These models handle media upload, download, and management
for images, videos, documents, and audio files.
"""

from __future__ import annotations

from typing import Optional

from pydantic import BaseModel, Field


[docs] class MediaUploadResponse(BaseModel): """Response after uploading media. Contains the media ID to use in messages. """ id: str = Field(..., description="Media ID to use when sending messages")
[docs] class MediaURLResponse(BaseModel): """Response when retrieving media URL. Contains the URL and metadata for downloading media. """ url: str = Field(..., description="URL to download the media (expires after 5 minutes)") mime_type: str = Field(..., description="MIME type of the media file") sha256: str = Field(..., description="SHA256 hash of the media file") file_size: int = Field(..., description="Size of the media file in bytes") id: str = Field(..., description="Media ID")
[docs] class MediaDeleteResponse(BaseModel): """Response after deleting media. Confirms media deletion status. """ success: bool = Field(..., description="Whether the media was successfully deleted")
[docs] class MediaUploadRequest(BaseModel): """Request to upload media. Parameters for uploading media files. """ file_path: Optional[str] = Field(None, description="Local file path to upload") file_bytes: Optional[bytes] = Field(None, description="File content as bytes") mime_type: str = Field(..., description="MIME type of the file (e.g., image/jpeg, video/mp4)") filename: Optional[str] = Field( None, description="Filename to use (required when uploading bytes)" )
[docs] class SupportedMediaTypes(BaseModel): """Supported media types and their constraints. Reference for valid media types and size limits. """
[docs] class ImageTypes(BaseModel): """Supported image formats.""" jpeg: str = Field(default="image/jpeg", description="JPEG images") png: str = Field(default="image/png", description="PNG images") webp: str = Field(default="image/webp", description="WebP images") max_size: int = Field(default=5242880, description="Max size: 5MB")
[docs] class DocumentTypes(BaseModel): """Supported document formats.""" pdf: str = Field(default="application/pdf", description="PDF documents") doc: str = Field(default="application/msword", description="Word documents") docx: str = Field( default="application/vnd.openxmlformats-officedocument.wordprocessingml.document", description="Word documents", ) ppt: str = Field(default="application/vnd.ms-powerpoint", description="PowerPoint") pptx: str = Field( default="application/vnd.openxmlformats-officedocument.presentationml.presentation", description="PowerPoint", ) xls: str = Field(default="application/vnd.ms-excel", description="Excel") xlsx: str = Field( default="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", description="Excel", ) txt: str = Field(default="text/plain", description="Plain text") max_size: int = Field(default=104857600, description="Max size: 100MB")
[docs] class AudioTypes(BaseModel): """Supported audio formats.""" aac: str = Field(default="audio/aac", description="AAC audio") mp4: str = Field(default="audio/mp4", description="MP4 audio") mpeg: str = Field(default="audio/mpeg", description="MPEG audio") amr: str = Field(default="audio/amr", description="AMR audio") ogg: str = Field(default="audio/ogg", description="OGG audio") opus: str = Field(default="audio/opus", description="Opus audio") max_size: int = Field(default=16777216, description="Max size: 16MB")
[docs] class VideoTypes(BaseModel): """Supported video formats.""" mp4: str = Field(default="video/mp4", description="MP4 video") threegp: str = Field(default="video/3gpp", description="3GPP video") max_size: int = Field(default=16777216, description="Max size: 16MB")
[docs] class StickerTypes(BaseModel): """Supported sticker formats.""" webp: str = Field(default="image/webp", description="WebP stickers") max_size: int = Field(default=524288, description="Max size: 512KB") dimensions: str = Field(default="512x512", description="Required dimensions")
images: ImageTypes = Field(default_factory=ImageTypes) documents: DocumentTypes = Field(default_factory=DocumentTypes) audio: AudioTypes = Field(default_factory=AudioTypes) video: VideoTypes = Field(default_factory=VideoTypes) stickers: StickerTypes = Field(default_factory=StickerTypes)
[docs] class ResumableUploadSession(BaseModel): """Resumable upload session for large files. Used for uploading files larger than 5MB. """ id: str = Field(..., description="Upload session ID") upload_url: str = Field(..., description="URL for uploading file chunks") file_offset: int = Field(0, description="Current upload offset in bytes") file_size: int = Field(..., description="Total file size in bytes") expires_at: str = Field(..., description="Session expiration timestamp")