Skip to content

Interfaces

blake2signer.interfaces

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

CompressorInterface

Bases: ABC

Compressor interface.

Implement your own 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
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."""

    # noinspection PyMethodMayBeStatic
    def scale_compression_level(self, level: int) -> int:  # pylint: disable=R0201
        """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.

        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.

        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 abstractmethod

Get the default compression level.

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.

Returns:

Type Description
bytes

Raw compressed data.

Source code in blake2signer/interfaces.py
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
@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(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
108
109
110
111
112
113
114
115
116
117
@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 compression level for the compressor.

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

Parameters:

Name Type Description Default
level typing.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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.

    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 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
57
58
59
60
61
62
63
64
65
66
67
68
def scale_compression_level(self, level: int) -> int:  # pylint: disable=R0201
    """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

Bases: 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
120
121
122
123
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
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 abstractmethod

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
149
150
151
152
153
154
155
156
157
158
@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
138
139
140
141
142
143
144
145
146
147
@abstractmethod
def encode(self, data: bytes) -> bytes:
    """Encode given data.

    Args:
        data: Data to encode.

    Returns:
        Encoded data.
    """

SerializerInterface

Bases: ABC

Serializer interface.

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

Serialize given data.

Parameters:

Name Type Description Default
data typing.Any

Data to serialize.

required

Other Parameters:

Name Type Description
**kwargs typing.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 typing.Any

Additional arguments for the serializer.

Returns:

Type Description
typing.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.
    """