"""Abstract class for asset ingestion filename transformation.""" import abc from integration_scripts import logger from constants import database as db_const from models.asset import Audio, Cover from constants import paths as asset_paths from integration_scripts.db_utils import get_upc_from_project_code from integration_scripts.file_utils import get_s3_file_key # from apocrypha.general_use import print_log # app_logger = logger.app_logger class IngestionTransformer(abc.ABC): def __init__(self, asset_list=None): """Create instance lists.""" self.replaced_upcs = dict() if asset_list: self.asset_list = asset_list else: self.asset_list = list() @staticmethod @abc.abstractmethod def transform_audio_assets(asset_list): """Transform a list of audio assets.""" pass @staticmethod @abc.abstractmethod def transform_cover_assets(asset_list): """Transform a list of cover assets.""" pass def _get_upc(self, asset_row, relid): orch_upc = asset_row[db_const.orch_upc] # if orch_upc is missing if not orch_upc: # Check the internal list orch_upc = self.replaced_upcs.get(relid) # if still missing if not orch_upc: msg = 'UPC missing for {}. Getting new UPC.'.format(relid) logger.info(msg) # Get the UPC from the DB new_orch_upc = get_upc_from_project_code(project_code=relid) msg = 'New UPC found: {}.'.format(new_orch_upc) logger.info(msg) # Add to internal list self.replaced_upcs[relid] = new_orch_upc # Overwrite bad UPC orch_upc = new_orch_upc return orch_upc def transform_one_audio_asset(self, asset_row): """Transform one row of cover asset data.""" audio_file_template = '{}_{}_{}.wav' audio_file_template_flac = '{}_{}_{}.flac' relid = asset_row[db_const.source_relid] volume = asset_row[db_const.volume] track = asset_row[db_const.track] file_name = asset_row[db_const.file_name] orch_upc = self._get_upc(asset_row, relid) long_orch_upc = str(orch_upc).zfill(12) source_audio_file = audio_file_template.format( relid, str(volume).zfill(3), str(track).zfill(3)) source_audio_file_flac = audio_file_template_flac.format( relid, str(volume).zfill(3), str(track).zfill(3)) orchard_audio_file = audio_file_template.format( orch_upc, volume, track) orchard_audio_file_flac = audio_file_template_flac.format( orch_upc, volume, track) long_orchard_audio_file = audio_file_template.format( long_orch_upc, volume, track) long_orchard_audio_file_flac = audio_file_template_flac.format( long_orch_upc, volume, track) release_level_key = get_s3_file_key( asset_paths.source_audio, relid, relid + '_') asset = Audio( orch_upc=orch_upc, long_orch_upc=long_orch_upc, orchard_audio_file=orchard_audio_file, orchard_audio_file_flac=orchard_audio_file_flac, long_orchard_audio_file=long_orchard_audio_file, long_orchard_audio_file_flac=long_orchard_audio_file_flac, source_relid=relid, source_audio_file=source_audio_file, source_audio_file_flac=source_audio_file_flac, s3_file_name=file_name, vendor_id=asset_row[db_const.vendor_id], release_level_key=release_level_key ) return relid, asset def transform_one_cover_asset(self, asset_row): """Transform one row of cover asset data.""" cover_file_jpg_template = '{}.jpg' cover_file_tif_template = '{}.tif' relid = asset_row[db_const.source_relid] file_name = asset_row[db_const.file_name] orch_upc = self._get_upc(asset_row, relid) source_cover_jpg_file = cover_file_jpg_template.format( relid) source_cover_tif_file = cover_file_tif_template.format( relid) orchard_cover_file = cover_file_tif_template.format( orch_upc) long_orch_upc = str(orch_upc).zfill(12) long_orchard_cover_file = cover_file_tif_template.format( long_orch_upc) asset = Cover( orch_upc=orch_upc, long_orch_upc=long_orch_upc, orchard_cover_file=orchard_cover_file, long_orchard_cover_file=long_orchard_cover_file, source_relid=relid, source_cover_jpg_file=source_cover_jpg_file, source_cover_tif_file=source_cover_tif_file, s3_file_name=file_name, vendor_id=asset_row[db_const.vendor_id], ) return asset