Source code for baudot.handlers.hexbytes

"""
Handler for reading and writing 5-bit codes as a hexadecimal bit stream.
"""

from io import BufferedIOBase

from .core import BaudotReader, BaudotWriter
from ..exceptions import ReadError, WriteError


[docs]class HexBytesReader(BaudotReader): """ Reader for hexadecimal 5-bit streams """ def __init__(self, stream: BufferedIOBase): self.stream = stream def __next__(self): hex_byte = self.stream.read(2) if not hex_byte: raise StopIteration() try: code = int(hex_byte, 16) except ValueError: str_repr = hex_byte.decode(errors='backslashreplace') raise ReadError(f'Invalid hexadecimal byte: {str_repr}') if not 0 <= code < 32: raise ReadError(f'Code value {code} is not a valid 5-bit value') return code
[docs]class HexBytesWriter(BaudotWriter): """ Writer for hexadecimal 5-bit stream """ def __init__(self, stream: BufferedIOBase): self.stream = stream
[docs] def write(self, code: int): """Writes a code as an hexadecimal value""" if not 0 <= code < 32: raise WriteError('Invalid 5-bit character code') self.stream.write(f'{code:02x}'.encode())