from abc import ABC, abstractmethod class StorageBackend(ABC): @abstractmethod async def put(self, key: str, data: bytes, content_type: str) -> None: """Store object at key with given content type.""" @abstractmethod async def get_presigned_url(self, key: str, expires_in_seconds: int = 3600) -> str: """Return a pre-signed URL valid for expires_in_seconds.""" @abstractmethod async def delete(self, key: str) -> None: """Delete object at key."""