"""Class to represent a fingerprint message """ import json import uuid from fpsweeper.logic import util # fp queue related constants BACKFILL = 'backfill' SWEEPER = 'sweeper' FILENAME = 'filename' TUID = 'tuid' UPC = 'upc' FILE_UPLOAD_TIME = 'file_upload_time' CORRELATION_ID = 'correlation_id' TRACK_SOURCE = 'track_source' SQS_MESSAGE_BODY = 'MessageBody' SQS_MESSAGE_ID = 'Id' TRACK_SOURCE_BACKFILL = 'backfill' TRACK_SOURCE_SWEEPER = 'sweeper' class FpMessage(): """Message to push to fingerprint queue """ def __init__(self, filename, tuid, upc, correlation_id, track_source): """Constructor Args: filename (str): ip and full path of audio asset to fingerprint tuid (int): unique track id upc (int): unique release id correlation_id (str): id used to correlate logs track_source (str): for this process, either 'backfill' or 'sweeper' """ if track_source not in(BACKFILL, SWEEPER): raise ValueError self.filename = filename self.tuid = tuid self.upc = upc self.file_upload_time = util.get_unix_timestamp() self.correlation_id = correlation_id self.track_source = track_source def to_sqs_json(self): """Get a json representation of the message formatted for boto3 sqs send_messages() Returns: dictionary """ message_body = json.dumps({FILENAME: self.filename, TUID: self.tuid, UPC: self.upc, FILE_UPLOAD_TIME: self.file_upload_time, CORRELATION_ID: self.correlation_id, TRACK_SOURCE: self.track_source}) return {SQS_MESSAGE_BODY: message_body, SQS_MESSAGE_ID: str(uuid.uuid4())}