"""
Module for base save pattern definition
Starts by serializing to temp folder and formatting
"""
[docs]__author__ = "Elisha Yadgaran"
import logging
from typing import Any, Dict, Tuple, Type
[docs]LOGGER = logging.getLogger(__name__)
[docs]class BaseSavePattern(object):
"""
Base class for save patterns (registered wrappers for the collection of
serializers and deserializers)
"""
[docs] serializers: Tuple[Type["BaseSerializer"]] = tuple()
[docs] deserializers: Tuple[Type["BaseSerializer"]] = tuple()
@classmethod
[docs] def save(cls, **kwargs) -> Dict[str, str]:
"""
Routine to iterate through serializers returning the final metadata
"""
if not cls.serializers:
raise ValueError("Need to specify at least one serialization class")
for serializer in cls.serializers:
LOGGER.debug(f"Serializing with {serializer}")
params = serializer.serialize(**kwargs)
LOGGER.debug(f"Serialization params: {params}")
kwargs.update(params)
return params
@classmethod
[docs] def load(cls, **kwargs) -> Any:
"""
The load method invoked
"""
if not cls.deserializers:
raise ValueError("Need to specify at least one deserialization class")
for deserializer in cls.deserializers:
LOGGER.debug(f"Deserializing with {deserializer}")
params = deserializer.deserialize(**kwargs)
LOGGER.debug(f"Deserialization params: {params}")
kwargs.update(params)
return params["obj"]
[docs]class BaseSerializer(object):
@staticmethod
[docs] def serialize(**kwargs) -> Dict[str, str]:
raise NotImplementedError
@staticmethod
[docs] def deserialize(**kwargs) -> Dict[str, Any]:
raise NotImplementedError