Source code for jii_multispeq.measurement.checksum

"""
Checksum handeling and calculation for MultispeQ Measurements.
"""

import re
import zlib
import warnings
from jii_multispeq.constants import REGEX_CHECKSUM

[docs] def get_crc32( data=None ): """ Calculate a CRC32 checksum from data and represent as HEX. :param data: Data stream :type data: str :return: HEX CRC32 checksum :rtype: str :raises ValueError: if no data is provided :raises ValueError: if provided data is not a string """ if data is None: raise ValueError("Data not provided") if not isinstance(data, str): raise ValueError("Provided data needs to be a string") sum = zlib.crc32( data.encode('utf-8') ) return hex(sum)[2:].upper()
[docs] def strip_crc32 ( data=None ): """ Strip CRC32 checksum from data string and return data and checksum separately. :param data: Data stream :type data: str :return: data string and HEX CRC32 checksum :rtype: str, str :raises ValueError: if no data is provided :raises ValueError: if provided data is not a string """ if data is None: raise ValueError("Data not provided") if not isinstance(data, str): raise ValueError("Provided data needs to be a string") # Remove trailing spaces or line breaks data = data.strip() # Check if there is an attached checksum prog = re.compile( REGEX_CHECKSUM, re.I ) result = prog.search( data ) if result is None: return data, None crc32 = data[-8:] data = data[:-8] if crc32 != get_crc32( data ): warnings.warn("Checksum missmatch. There might has been an issue during data transfer.") return data, crc32