Skip to content

Interfaces

blake2signer.interfaces

Interfaces: abstract classes to define serializers, encoders and compressors.

CompressorInterface (ABC)

Compressor interface.

Implement your own compressor inheriting from this class.

Source code in blake2signer/interfaces.py
class CompressorInterface(ABC):
    """Compressor interface.

    Implement your own compressor inheriting from this class.
    """

    @property
    @abstractmethod
    def default_compression_level(self) -> int:
        """Get the default compression level."""

    def scale_compression_level(self, level: int) -> int:
        """Scale the compression level to from 1 to 9 to a value for the compressor.

        Override this method if the compressor requires scaling the level.

        Args:
            level: Desired compression level from 1 to 9.

        Returns:
            Scaled compression level for the compressor.
        """
        return level

    def get_compression_level(self, level: typing.Optional[int]) -> int:
        """Return compression level for the compressor.

        It correctly converts the scale (if necessary), and the default value
        for None.

        Args:
            level: Desired compression level from 1 (least compressed) to 9 (most
                compressed) or None for the default.

        Returns:
            Correct compression level for the compressor.
        """
        if level is None:
            return self.default_compression_level

        if level < 1 or level > 9:
            raise CompressionError('compression level must be between 1 and 9')

        return self.scale_compression_level(level)

    @abstractmethod
    def compress(self, data: bytes, *, level: int) -> bytes:
        """Compress given data.

        Args:
            data: Data to compress.

        Keyword Args:
            level: Desired compression level.

        Returns:
            Raw compressed data.
        """

    @abstractmethod
    def decompress(self, data: bytes) -> bytes:
        """Decompress given compressed data.

        Args:
            data: Compressed data to decompress.

        Returns:
            Original data.
        """

default_compression_level: int property readonly

Get the default compression level.

compress(self, data, *, level)

Compress given data.

Parameters:

Name Type Description Default
data bytes

Data to compress.

required

Keyword arguments:

Name Type Description
level int

Desired compression level.

Returns:

Type Description
bytes

Raw compressed data.

Source code in blake2signer/interfaces.py
@abstractmethod
def compress(self, data: bytes, *, level: int) -> bytes:
    """Compress given data.

    Args:
        data: Data to compress.

    Keyword Args:
        level: Desired compression level.

    Returns:
        Raw compressed data.
    """

decompress(self, data)

Decompress given compressed data.

Parameters:

Name Type Description Default
data bytes

Compressed data to decompress.

required

Returns:

Type Description
bytes

Original data.

Source code in blake2signer/interfaces.py
@abstractmethod
def decompress(self, data: bytes) -> bytes:
    """Decompress given compressed data.

    Args:
        data: Compressed data to decompress.

    Returns:
        Original data.
    """

get_compression_level(self, level)

Return compression level for the compressor.

It correctly converts the scale (if necessary), and the default value for None.

Parameters:

Name Type Description Default
level Optional[int]

Desired compression level from 1 (least compressed) to 9 (most compressed) or None for the default.

required

Returns:

Type Description
int

Correct compression level for the compressor.

Source code in blake2signer/interfaces.py
def get_compression_level(self, level: typing.Optional[int]) -> int:
    """Return compression level for the compressor.

    It correctly converts the scale (if necessary), and the default value
    for None.

    Args:
        level: Desired compression level from 1 (least compressed) to 9 (most
            compressed) or None for the default.

    Returns:
        Correct compression level for the compressor.
    """
    if level is None:
        return self.default_compression_level

    if level < 1 or level > 9:
        raise CompressionError('compression level must be between 1 and 9')

    return self.scale_compression_level(level)

scale_compression_level(self, level)

Scale the compression level to from 1 to 9 to a value for the compressor.

Override this method if the compressor requires scaling the level.

Parameters:

Name Type Description Default
level int

Desired compression level from 1 to 9.

required

Returns:

Type Description
int

Scaled compression level for the compressor.

Source code in blake2signer/interfaces.py
def scale_compression_level(self, level: int) -> int:
    """Scale the compression level to from 1 to 9 to a value for the compressor.

    Override this method if the compressor requires scaling the level.

    Args:
        level: Desired compression level from 1 to 9.

    Returns:
        Scaled compression level for the compressor.
    """
    return level

EncoderInterface (ABC)

Encoder interface.

Implement your own encoder inheriting from this class.

Note

Verify that the encoder alphabet is ASCII (a check is enforced nevertheless).

Source code in blake2signer/interfaces.py
class EncoderInterface(ABC):
    """Encoder interface.

    Implement your own encoder inheriting from this class.

    Note:
        Verify that the encoder alphabet is ASCII (a check is enforced nevertheless).
    """

    @property
    @abstractmethod
    def alphabet(self) -> bytes:
        """Return the encoder alphabet characters.

        This is used to validate that separator characters and flags don't belong
        to this alphabet to prevent malfunctions.
        """

    @abstractmethod
    def encode(self, data: bytes) -> bytes:
        """Encode given data.

        Args:
            data: Data to encode.

        Returns:
            Encoded data.
        """

    @abstractmethod
    def decode(self, data: bytes) -> bytes:
        """Decode given encoded data.

        Args:
            data: Encoded data to decode.

        Returns:
            Original data.
        """

alphabet: bytes property readonly

Return the encoder alphabet characters.

This is used to validate that separator characters and flags don't belong to this alphabet to prevent malfunctions.

decode(self, data)

Decode given encoded data.

Parameters:

Name Type Description Default
data bytes

Encoded data to decode.

required

Returns:

Type Description
bytes

Original data.

Source code in blake2signer/interfaces.py
@abstractmethod
def decode(self, data: bytes) -> bytes:
    """Decode given encoded data.

    Args:
        data: Encoded data to decode.

    Returns:
        Original data.
    """

encode(self, data)

Encode given data.

Parameters:

Name Type Description Default
data bytes

Data to encode.

required

Returns:

Type Description
bytes

Encoded data.

Source code in blake2signer/interfaces.py
@abstractmethod
def encode(self, data: bytes) -> bytes:
    """Encode given data.

    Args:
        data: Data to encode.

    Returns:
        Encoded data.
    """

SerializerInterface (ABC)

Serializer interface.

Implement your own serializer inheriting from this class.

Source code in blake2signer/interfaces.py
class SerializerInterface(ABC):
    """Serializer interface.

    Implement your own serializer inheriting from this class.
    """

    @abstractmethod
    def serialize(self, data: typing.Any, **kwargs: typing.Any) -> bytes:
        """Serialize given data.

        Args:
            data: Data to serialize.

        Keyword Args:
            **kwargs: Additional arguments for the serializer.

        Returns:
            Serialized data
        """

    @abstractmethod
    def unserialize(self, data: bytes, **kwargs: typing.Any) -> typing.Any:
        """Unserialize given serialized data.

        Args:
            data: Serialized data to unserialize.

        Keyword Args:
            **kwargs: Additional arguments for the serializer.

        Returns:
            Original data.
        """

serialize(self, data, **kwargs)

Serialize given data.

Parameters:

Name Type Description Default
data Any

Data to serialize.

required

Keyword arguments:

Name Type Description
**kwargs Any

Additional arguments for the serializer.

Returns:

Type Description
bytes

Serialized data

Source code in blake2signer/interfaces.py
@abstractmethod
def serialize(self, data: typing.Any, **kwargs: typing.Any) -> bytes:
    """Serialize given data.

    Args:
        data: Data to serialize.

    Keyword Args:
        **kwargs: Additional arguments for the serializer.

    Returns:
        Serialized data
    """

unserialize(self, data, **kwargs)

Unserialize given serialized data.

Parameters:

Name Type Description Default
data bytes

Serialized data to unserialize.

required

Keyword arguments:

Name Type Description
**kwargs Any

Additional arguments for the serializer.

Returns:

Type Description
Any

Original data.

Source code in blake2signer/interfaces.py
@abstractmethod
def unserialize(self, data: bytes, **kwargs: typing.Any) -> typing.Any:
    """Unserialize given serialized data.

    Args:
        data: Serialized data to unserialize.

    Keyword Args:
        **kwargs: Additional arguments for the serializer.

    Returns:
        Original data.
    """
Back to top