Source code for masterpiece.format
"""
Abstract base class for formats.
Author: Juha Meskanen
Date: 2024-10-26
"""
from abc import ABC, abstractmethod
from io import IOBase
from typing import Type
from .masterpiece import MasterPiece, classproperty
[docs]
class Format(MasterPiece, ABC):
"""
Abstract base class for formats. Implements two sets of methods for
serializing both class attributes and instance attributes.
"""
[docs]
def __init__(self, stream: IOBase):
"""Initialize the format with a stream (file object).
Args:
stream (IOBase): The stream to write/read
"""
self.stream = stream
[docs]
@abstractmethod
def serialize(self, obj: MasterPiece) -> None:
"""Serialize the object to the given JSON stream.
Args:
obj (Any): The object to serialize.
"""
[docs]
@abstractmethod
def deserialize(self, obj: MasterPiece) -> None:
"""Load attributes from the given JSON stream into the object.
Args:
obj (Any): The object to deserialize into.
"""
[docs]
@abstractmethod
def save_configuration(self, clazz: Type[MasterPiece]) -> None:
"""Save class attributes to a stream.
Args:
clazz (Type[Piece]) class to be saved
"""
[docs]
@abstractmethod
def load_configuration(self, clazz: Type[MasterPiece]) -> None:
"""Load class attributes from a strea.
Args:
clazz (Type[Piece]) class to be configured
"""
@classproperty # type: ignore
def file_extension(cls) -> str:
"""Returns the file extension for the format."""
raise NotImplementedError("Subclasses must define the file_extension property")