"""Apple Music Streams utils functions.""" from datetime import datetime import re from feed_ingestion.flows.apple_music_streams import config from feed_ingestion.util.task_status import get_values def get_skip_and_saves_reports(date, licensor): """Return skip_and_saves reports depending on date of ingest. Args: date (str): Reporting date (YYYY-MM-DD). licensor (str): The licensor. Returns: list: The list with skip_and_saves_reports. """ current_date = datetime.strptime(date, '%Y-%m-%d') if licensor == 'awal': # awal do not has non royalty reports on their s3 # apple data only available only for 1 year via api if current_date < datetime.strptime('2021-08-16', '%Y-%m-%d'): return ['amLibraryEvents'] return ['amLibraryEvents', 'amNonRoyaltySummaryStreams'] if current_date < datetime.strptime( config.switch_over_date_on_summary_reports, '%Y-%m-%d'): return ['amLibraryEvents', 'amNonRoyaltyStreams'] return ['amLibraryEvents', 'amNonRoyaltySummaryStreams'] def get_fact_analytics_report(date, licensor): """Return skip_and_saves reports depending on date of ingest. Args: date (str): Reporting date (YYYY-MM-DD). licensor (str): The licensor. Returns: str: The name of fact_analytics report. """ current_date = datetime.strptime(date, '%Y-%m-%d') if licensor == 'awal': switch_over_date = config.switch_over_date_on_summary_reports_awal else: switch_over_date = config.switch_over_date_on_summary_reports if current_date < datetime.strptime(switch_over_date, '%Y-%m-%d'): return 'amStreams' return 'amStreamsSummary' def get_available_reports(date): """Return all reports which are available for that date. Args: date (str): Reporting date (YYYY-MM-DD). Returns: list: List of all reports which are available for that date. """ current_date = datetime.strptime(date, '%Y-%m-%d') available_reports = [] for report_name, report in config.reports.items(): end_date = datetime.strptime(report.get('end_date', date), '%Y-%m-%d') start_date = datetime.strptime(report.get('start_date'), '%Y-%m-%d') if start_date <= current_date <= end_date: available_reports.append(report_name) return available_reports def parse_vendor_id_from_s3_file_path(s3_file_path, s3_folder): """Return vendor_id. Returns: str: vendor_id extracted from apple music report file name """ path_pattern = rf'{s3_folder}[AppleMusic|AMShazam|D_D]+_?[A-Za-z]+_(\d+)_[\d]+.*txt\.gz' # noqa: E501 result = re.search(path_pattern, s3_file_path) return result.group(1) def get_missing_vendors(feed_name, date, s3_folder): """Return list of missing vendors for specific feed_name. Returns: list: list of missing vendors """ missing_files = get_values(feed_name, date, 'missing_files') vendors = [] for missing_file in missing_files: vendor_id = parse_vendor_id_from_s3_file_path(missing_file, s3_folder) vendors.append(vendor_id) return vendors