""" Base uploader class for all social media platforms """ from abc import ABC, abstractmethod from pathlib import Path from typing import List, Optional, Dict, Any, Union from datetime import datetime class BaseUploader(ABC): """Base class for all platform uploaders""" def __init__( self, title: str, file_path: str, tags: List[str], publish_date: Optional[datetime] = None, account_file: Optional[str] = None, description: str = "" ): """ Initialize base uploader Args: title: Video title file_path: Path to video file tags: List of tags/hashtags publish_date: Scheduled publish time (None = publish immediately) account_file: Path to account cookie/credentials file description: Video description """ self.title = title self.file_path = Path(file_path) self.tags = tags self.publish_date = publish_date if publish_date else 0 # 0 = immediate self.account_file = account_file self.description = description @abstractmethod async def main(self) -> Dict[str, Any]: """ Main upload method - must be implemented by subclasses Returns: dict: Upload result with keys: - success (bool): Whether upload succeeded - message (str): Result message - url (str, optional): URL of published video """ pass def _get_timestamp(self, dt: Union[datetime, int]) -> int: """ Convert datetime to Unix timestamp Args: dt: datetime object or 0 for immediate publish Returns: int: Unix timestamp or 0 """ if dt == 0: return 0 return int(dt.timestamp())