"""Re-calculate track duration metadata.""" import csv import sys """ Query used to generate CSV as input. SELECT tr.ID, tr.length_minute, tr.length_seconds, af.DURATION FROM ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.TRACK AS tr JOIN ORCHARD_APP_REPORTING_V2.PROD_OWS_ASSETS_OWS_ASSETS.ASSET_UPLOAD AS au ON au.TRACK_UNIQUE_ID = tr.ID AND au.API_VERSION = 2 AND au.DELETED = false AND au.IS_CORRECTION = false JOIN ORCHARD_APP_REPORTING_V2.PROD_OWS_ASSETS_OWS_ASSETS.ASSET_FINAL AS af ON au.ID = af.ASSET_UPLOAD_ID AND af.ASSET_TYPE = 'WAV' WHERE ( (tr.LENGTH_MINUTE IS NULL AND tr.LENGTH_SECONDS IS NOT NULL) OR (tr.LENGTH_MINUTE IS NOT NULL AND tr.LENGTH_SECONDS IS NULL) ) ; """ def main(): """Entrypoint.""" filename = sys.argv[1] with open(filename, 'r') as f: reader = csv.DictReader(f) rows = [x for x in reader] for row in rows: tuid = row['ID'] minutes, seconds = re_calculate(int(row['DURATION'])) print( f""" UPDATE track SET length_minute = {minutes}, length_seconds = {seconds} WHERE id = {tuid}; """ ) for row in rows: minutes = row['LENGTH_MINUTE'] if row['LENGTH_MINUTE'] != '' else 'NULL' seconds = row['LENGTH_SECONDS'] if row['LENGTH_SECONDS'] != '' else 'NULL' print( f""" --rollback UPDATE track --rollback SET length_minute = {minutes}, length_seconds = {seconds} --rollback WHERE track.id = {row['ID']}; """ ) # https://github.com/theorchard/ows-assets/blob/master/assets/logic/asset_status.py#L212 # https://github.com/theorchard/ows-assets/blob/master/assets/utils/time_formatter.py#L4 def re_calculate(duration): seconds = int(duration / 1000) return divmod(seconds, 60) if __name__ == '__main__': main()