from abc import ABC, abstractmethod class ChunkUploadBackend(ABC): @abstractmethod def start(self, filename: str) -> None: """Начало загрузки нового файла""" @abstractmethod def upload_chunk(self, chunk: bytes) -> None: """Загрузка очередного чанка""" @abstractmethod def finish(self) -> None: """Завершение загрузки""" @abstractmethod def abort(self) -> None: """Прерывания загрузки""" class DiskChunkUploadBackend(ChunkUploadBackend): def __init__(self, base_path: str): import os self.os = os self.base_path = base_path self.os.makedirs(self.base_path, exist_ok=True) self._file = None def start(self, filename): self._file = open(self.os.path.join(self.base_path, filename), "wb") def upload_chunk(self, chunk: bytes): self._file.write(chunk) def finish(self): self._file.close() def abort(self): if self._file: self._file.close() self._file = None