Исходный код EJIO.utils.serialization.storable

## /utils/serialization/storable.py

from ..interface import Dictable
from .serializer import Serializer
from .err import SerializationError
from typing import Protocol, Self, Any

__all__ = [
    'Storable',
]


[документация] class Storable(Dictable, Protocol): """ Интерфейс сохраняемых объектов, поддерживающий сохранение в файл и загрузку из файла любым сериализатором. Объекты должны уметь преобразовываться в/из словаря (Dictable), а также работать с внешним сериализатором. """ __slots__ = ()
[документация] def save(self, filename: str, serializer: type[Serializer], /, **kwargs: Any) -> None: """ Сохранить объект в файл. :param filename: Имя файла. :param serializer: Класс сериализатора. :param kwargs: Ключевые параметры для сереализатора. :raises SerializationError: Если не удалось сериализовать данные. """ try: serializer.save(self.to_dict(), filename, **kwargs) except SerializationError as e: raise SerializationError( f"Serialization of {self.__class__.__name__} to file {filename} using {serializer.__name__} failed") from e
[документация] @classmethod def load(cls, filename: str, serializer: type[Serializer], /, **kwargs: Any) -> Self: """ Загрузить объект из файла. :param filename: Имя файла. :param serializer: Класс сериализатора. :param kwargs: Ключевые параметры для сереализатора. :return: Восстановленный объект. :raises SerializationError: Если не удалось десериализовать данные. """ try: return cls.from_dict(serializer.load(filename, **kwargs)) except SerializationError as e: raise SerializationError( f"Deserialization of {cls.__class__.__name__} from file {filename} using {serializer.__name__} failed") from e