f925ae094c
- Abstract SourceAdapter with FileInfo dataclass - LocalAdapter for filesystem backups - Adapter factory for extensibility
40 lines
1.0 KiB
Python
40 lines
1.0 KiB
Python
from abc import ABC, abstractmethod
|
|
from typing import List, Dict, Any, AsyncIterator
|
|
from dataclasses import dataclass
|
|
|
|
@dataclass
|
|
class FileInfo:
|
|
path: str
|
|
size: int
|
|
modified_time: float
|
|
is_directory: bool
|
|
|
|
class SourceAdapter(ABC):
|
|
def __init__(self, config: Dict[str, Any]):
|
|
self.config = config
|
|
|
|
@abstractmethod
|
|
async def connect(self) -> None:
|
|
"""Establish connection to source."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def disconnect(self) -> None:
|
|
"""Close connection to source."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def list_files(self, path: str = "") -> List[FileInfo]:
|
|
"""List files at given path."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def read_file(self, path: str) -> AsyncIterator[bytes]:
|
|
"""Read file in chunks."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def get_database_dump(self, config: Dict[str, Any]) -> AsyncIterator[bytes]:
|
|
"""Get database dump. Only implemented for database adapters."""
|
|
pass
|