Написан класс записи последнего успешного записанного значения

This commit is contained in:
Григорич 2023-06-05 14:31:12 +03:00
parent c74e708ff0
commit 5068bb47b3

65
state.py Normal file
View File

@ -0,0 +1,65 @@
import abc
from typing import Any, Dict
import json
import os
class BaseStorage(abc.ABC):
"""Абстрактное хранилище состояния.
Позволяет сохранять и получать состояние.
"""
@abc.abstractmethod
def save_state(self, state: Dict[str, Any]) -> None:
"""Сохранить состояние в хранилище."""
raise NotImplementedError
@abc.abstractmethod
def retrieve_state(self) -> Dict[str, Any]:
"""Получить состояние из хранилища."""
raise NotImplementedError
class JsonFileStorage(BaseStorage):
"""Реализация хранилища, использующего локальный файл.
Формат хранения: JSON
"""
def __init__(self, file_path: str = 'state.json') -> None:
self.file_path = file_path
try:
with open(file_path, 'r', encoding='UTF-8') as f:
self.local_storage = json.load(f)
except FileNotFoundError:
self.local_storage = {}
def save_state(self, state: Dict[str, Any]) -> None:
"""Сохранить состояние в хранилище."""
with open(self.file_path, 'w+', encoding='UTF-8') as f:
json.dump(state, f, ensure_ascii=False)
def retrieve_state(self) -> Dict[str, Any]:
"""Получить состояние из хранилища."""
if not os.path.exists(self.file_path):
return {}
with open(self.file_path, 'r') as file:
return json.load(file)
class State:
"""Класс для работы с состояниями."""
def __init__(self, storage: BaseStorage) -> None:
self.storage = storage
self.local_state = storage.retrieve_state()
def set_state(self, key: str, value: Any) -> None:
"""Установить состояние для определённого ключа."""
self.local_state[key] = value
def get_state(self, key: str) -> Any:
"""Получить состояние по определённому ключу."""
return self.local_state.get(key)