Untitled
unknown
plain_text
2 months ago
2.5 kB
7
Indexable
Never
import abc from typing import Any, Dict, Optional class BaseStorage(abc.ABC): """Абстрактное хранилище состояния. Позволяет сохранять и получать состояние. Способ хранения состояния может варьироваться в зависимости от итоговой реализации. Например, можно хранить информацию в базе данных или в распределённом файловом хранилище. """ @abc.abstractmethod def save_state(self, state: Dict[str, Any]) -> None: """Сохранить состояние в хранилище.""" @abc.abstractmethod def retrieve_state(self) -> Dict[str, Any]: """Получить состояние из хранилища.""" class JsonFileStorage(BaseStorage): """Реализация хранилища, использующего локальный файл. Формат хранения: JSON """ def __init__(self, file_path: Optional[str] = None) -> None: self.file_path = file_path def save_state(self, state: Dict[str, Any]) -> None: """Сохранить состояние в хранилище.""" if self.file_path is None: return with open(self.file_path, 'w') as f: json.dump(state, f) # TODO: реализовать def retrieve_state(self) -> Dict[str, Any]: """Получить состояние из хранилища.""" # TODO: реализовать if self.file_path is None: return {} try: with open(self.file_path, 'r') as f: data = json.load(f) return data except FileNotFoundError: self.save_state({}) class State: """Класс для работы с состояниями.""" def __init__(self, storage: BaseStorage): self.storage = storage def set_state(self, key: str, value: Any) -> None: """Установить состояние для определённого ключа""" self.storage.save_state({key: value}) def get_state(self, key: str) -> Any: """Получить состояние по определённому ключу""" return self.storage.retrieve_state().get(key)