import datetime class Error: def __init__(self, error_body: str): error_components = error_body.split(',') if len(error_components) >= 3: self.timestamp = datetime.datetime.now().timestamp() self.ID = error_components[0] self.size = error_components[1] self.code = error_components[2] if int(error_components[1]) > 1: self.parameters = error_components[3:] else: self.parameters = [] else: self.timestamp = "0" self.ID = "0" self.size = "0" self.code = "0" self.parameters = [] def __str__(self): data = { "timestamp": self.timestamp, "ID": self.ID, "size": self.size, "code": self.code, "parameters": self.parameters } return str(data) @classmethod def timeout(cls, message_id, error_id, detail="Registration timeout"): return cls("{0},2,{1},{2}".format(message_id, error_id, detail)) @classmethod def redirect(cls, message_id, error_id): return cls("{0},2,{1},Too many redirects".format(message_id, error_id)) @classmethod def general(cls, message_id, error_id, detail): return cls("{0},2,{1},{2}".format(message_id, error_id, detail)) @classmethod def validation(cls, message_id, error_id, status_code, reason, detail): return cls("{0},3,{1},{2}:{3},Exception: {4}".format( message_id, error_id, status_code, reason, detail)) @classmethod def file_not_found(cls, message_id, error_id): return cls("{0},2,{1},UI logfile not found".format(message_id, error_id)) @classmethod def crc_mismatch(cls, message_id, error_id, sequence, expected_crc, actual_crc): return cls("{0},4,{1},Bad CRC on message {2},Message CRC: {3},Calculated CRC: {4}".format( message_id, error_id, sequence, expected_crc, actual_crc))