Skip to content

Interfaces

blake2signer.interfaces

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

CompressorInterface

Bases: ABC

Compressor interface.

Implement any compressor inheriting from this class.

Source code in blake2signer/interfaces.py
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
class CompressorInterface(ABC):
    """Compressor interface.

    Implement any compressor inheriting from this class.
    """

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

        This value is not scaled, it should be the actual default compression level
        for the compressor.
        """

    # noinspection PyMethodMayBeStatic
    def scale_compression_level(self, level: int) -> int:
        """Scale the compression level from 1 to 9 to a valid 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 the compression level for the compressor.

        It correctly scales the level if necessary, and returns the corresponding
         default value if no level is indicated.

        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.

        Raises:
            CompressionError: The compression level is out of bounds.
        """
        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 adjusted for the compressor.

        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 abstractmethod property

Get the default compression level.

This value is not scaled, it should be the actual default compression level for the compressor.

compress(data, *, level) abstractmethod

Compress given data.

Parameters:

Name Type Description Default
data bytes

Data to compress.

required

Other Parameters:

Name Type Description
level int

Desired compression level adjusted for the compressor.

Returns:

Type Description
bytes

Raw compressed data.

Source code in blake2signer/interfaces.py
 98
 99
100
101
102
103
104
105
106
107
108
109
110
@abstractmethod
def compress(self, data: bytes, *, level: int) -> bytes:
    """Compress given data.

    Args:
        data: Data to compress.

    Keyword Args:
        level: Desired compression level adjusted for the compressor.

    Returns:
        Raw compressed data.
    """

decompress(data) abstractmethod

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
112
113
114
115
116
117
118
119
120
121
@abstractmethod
def decompress(self, data: bytes) -> bytes:
    """Decompress given compressed data.

    Args:
        data: Compressed data to decompress.

    Returns:
        Original data.
    """

get_compression_level(level)

Return the compression level for the compressor.

It correctly scales the level if necessary, and returns the corresponding default value if no level is indicated.

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.

Raises:

Type Description
CompressionError

The compression level is out of bounds.

Source code in blake2signer/interfaces.py
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
def get_compression_level(self, level: typing.Optional[int]) -> int:
    """Return the compression level for the compressor.

    It correctly scales the level if necessary, and returns the corresponding
     default value if no level is indicated.

    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.

    Raises:
        CompressionError: The compression level is out of bounds.
    """
    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(level)

Scale the compression level from 1 to 9 to a valid 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
61
62
63
64
65
66
67
68
69
70
71
72
def scale_compression_level(self, level: int) -> int:
    """Scale the compression level from 1 to 9 to a valid 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

Bases: ABC

Encoder interface.

Implement any encoder inheriting from this class.

Note

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

Source code in blake2signer/interfaces.py
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
class EncoderInterface(ABC):
    """Encoder interface.

    Implement any encoder inheriting from this class.

    Note:
        Make sure 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 abstractmethod property

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(data) abstractmethod

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
153
154
155
156
157
158
159
160
161
162
@abstractmethod
def decode(self, data: bytes) -> bytes:
    """Decode given encoded data.

    Args:
        data: Encoded data to decode.

    Returns:
        Original data.
    """

encode(data) abstractmethod

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
142
143
144
145
146
147
148
149
150
151
@abstractmethod
def encode(self, data: bytes) -> bytes:
    """Encode given data.

    Args:
        data: Data to encode.

    Returns:
        Encoded data.
    """

SerializerInterface

Bases: ABC

Serializer interface.

Implement any serializer inheriting from this class.

Source code in blake2signer/interfaces.py
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class SerializerInterface(ABC):
    """Serializer interface.

    Implement any 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(data, **kwargs) abstractmethod

Serialize given data.

Parameters:

Name Type Description Default
data Any

Data to serialize.

required

Other Parameters:

Name Type Description
**kwargs Any

Additional arguments for the serializer.

Returns:

Type Description
bytes

Serialized data

Source code in blake2signer/interfaces.py
16
17
18
19
20
21
22
23
24
25
26
27
28
@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(data, **kwargs) abstractmethod

Unserialize given serialized data.

Parameters:

Name Type Description Default
data bytes

Serialized data to unserialize.

required

Other Parameters:

Name Type Description
**kwargs Any

Additional arguments for the serializer.

Returns:

Type Description
Any

Original data.

Source code in blake2signer/interfaces.py
30
31
32
33
34
35
36
37
38
39
40
41
42
@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.
    """