Files
rehearshalhub/api/src/rehearsalhub/storage/protocol.py
2026-04-08 15:10:52 +02:00

40 lines
1.2 KiB
Python
Executable File

"""Storage abstraction. Default impl is Nextcloud/WebDAV; swap for S3, local FS, etc."""
from __future__ import annotations
from typing import Protocol
class FileMetadata:
def __init__(self, path: str, etag: str, size: int, content_type: str) -> None:
self.path = path
self.etag = etag
self.size = size
self.content_type = content_type
class StorageClient(Protocol):
async def create_folder(self, path: str) -> None:
"""Create a folder (and parents) at the given path."""
...
async def get_file_metadata(self, path: str) -> FileMetadata:
"""Return metadata for the file at path."""
...
async def list_folder(self, path: str) -> list[FileMetadata]:
"""List immediate children of the folder at path."""
...
async def download(self, path: str) -> bytes:
"""Download and return the raw bytes of the file at path."""
...
async def get_direct_url(self, path: str) -> str:
"""Return a URL for direct access to the file (used for HLS streaming)."""
...
async def delete(self, path: str) -> None:
"""Delete a file or folder at path."""
...