from pathlib import Path class WebexMedia: MIME_MAP = { ".pdf": "application/pdf", ".doc": "application/msword", ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", ".xls": "application/vnd.ms-excel", ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ".ppt": "application/vnd.ms-powerpoint", ".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation", ".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".gif": "image/gif", ".bmp": "image/bmp", } def __init__(self, api): self._api = api async def send_local_file( self, room_id: str, file_path: str | Path, *, description: str = "", parent_id: str | None = None, ) -> str: file_path = Path(file_path) import aiofiles async with aiofiles.open(file_path, "rb") as f: file_content = await f.read() kwargs = {"roomId": room_id, "files": [file_content]} if description: kwargs["text"] = description if parent_id: kwargs["parentId"] = parent_id msg = self._api.messages.create(**kwargs) return msg.id async def send_remote_file( self, room_id: str, file_url: str, *, description: str = "", parent_id: str | None = None, ) -> str: kwargs = {"roomId": room_id, "files": [file_url]} if description: kwargs["text"] = description if parent_id: kwargs["parentId"] = parent_id msg = self._api.messages.create(**kwargs) return msg.id @classmethod def _guess_mime(cls, suffix: str) -> str: return cls.MIME_MAP.get(suffix.lower(), "application/octet-stream")