"""Logic for matches collection and formatting.""" def _check_if_match_is_valid(match): """Check if match is valid.""" return bool(match.get('acrid') and (match.get('isrc') or match.get('upc'))) def _get_match(asset_final_id, match): return { 'acrid': match.get('acrid'), 'asset_final_id': asset_final_id, 'territories_in_conflict': None, 'distributor': None, 'pi_label': match.get('label'), 'pi_isrc': match.get('isrc'), 'pi_upc': match.get('upc'), 'pi_release_name': match.get('album'), 'pi_track_name': match.get('title'), 'pi_track_artists': match.get('artists'), 'confidence_score': match.get('score') } def _get_matches_for_distributors(asset_final_id, match): matches_for_distributors = [] for claim in match['rights_claim']: if claim.get('distributor'): matches_for_distributors.append({ 'acrid': match.get('acrid'), 'asset_final_id': asset_final_id, 'territories_in_conflict': claim.get('territories'), 'distributor': claim['distributor'].get('name'), 'pi_label': match.get('label'), 'pi_isrc': match.get('isrc'), 'pi_upc': match.get('upc'), 'pi_release_name': match.get('album'), 'pi_track_name': match.get('title'), 'pi_track_artists': match.get('artists'), 'confidence_score': match.get('score') }) return matches_for_distributors def _collect_matches_for_publish_by_track(asset_final_id, matches): """Collect matches for publish by track.""" matches_for_publish = [] for match in matches: if _check_if_match_is_valid(match): if match.get('rights_claim'): matches_for_publish.extend(_get_matches_for_distributors( asset_final_id, match )) else: matches_for_publish.append(_get_match(asset_final_id, match)) return matches_for_publish def collect_all_matches_for_publish(items): """Collect all matches for publish.""" matches_for_publish = [] for item in items: if item.get('matches'): matches_for_publish.extend(_collect_matches_for_publish_by_track( item['asset_final_id'], item['matches'] )) return matches_for_publish