"""Backfill apple id for episodes under apple subscription feeds. Run this in dev with command PYTHONPATH=. env/bin/python3.8 dev/backfill_apple_id_for_episodes_under_apple_feeds.py -- -env dev """ import argparse import csv import logging import os import sys from podcast.models.episode import get_episodes_by_ids from podcast.models.episode import update_episode from podcast.utils import api_utils log = logging.getLogger('main') log.setLevel(logging.DEBUG) fmt = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') sh = logging.StreamHandler(sys.stdout) sh.setFormatter(fmt) log.addHandler(sh) users = { 'dev': '366', 'qa': '1298', 'prod': '88' } request_headers = None def backfill_apple_id_for_episodes_under_apple_feeds(filename): """Backfill apple id for episodes under apple subscription feeds. Args: filename (str): The filename to access the csv file. """ if not filename: raise Exception('File with name: backfillAppleIdForEpisodesUnderAppleFeeds.csv not found') log.info(f'Reading file: {filename}\n') with open(filename) as csv_file: error_episode_count = 0 success_episode_count = 0 errored_episode_ids = [] success_episode_ids = [] reader = csv.DictReader(csv_file) for row in reader: public_rss_episode_id = None try: public_rss_episode_id = int(row['Public RSS Episode ID']) print(f'\nRunning for public_rss_episode_id: {public_rss_episode_id}') apple_subscription_episode_id = int(row['Apple Sub feed Episode ID']) episodes = get_episodes_by_ids([public_rss_episode_id, apple_subscription_episode_id])['items'] print( f'\nFetched episodes for public_rss_episode_id: {public_rss_episode_id} and ' f'apple_subscription_episode_id: {apple_subscription_episode_id}' ) public_rss_episode = episodes[0] apple_subscription_episode = episodes[1] if public_rss_episode['title'].strip() == apple_subscription_episode['title'].strip(): apple_episode_id = public_rss_episode['apple_id'] if apple_episode_id: update_episode(apple_subscription_episode['id'], {'apple_id': apple_episode_id}) print(f'Updated episode with apple_episode_id: {apple_episode_id}') success_episode_ids.append(public_rss_episode_id) else: print('No Apple id for public rss episode') else: print('Title mismatch for public rss episode: {} and apple episode: {}'.format( public_rss_episode['title'], apple_subscription_episode['title'])) except Exception as e: errored_episode_ids.append(public_rss_episode_id) error_episode_count += 1 log.info( f'\nGot an exception for public_rss_episode_id: {public_rss_episode_id}\n' f'Exception trace: {e}\n' ) print(f'\nSuccess episode count: {success_episode_count} and success_episode_ids: {success_episode_ids} \n') print(f'\nErrored episode count: {error_episode_count} and errored_episode_ids: {errored_episode_ids} \n') def main(): """Extract shell arguments, backfill apple id for episodes under apple subscription feeds.""" global request_headers argparser = argparse.ArgumentParser(prog='Backfill apple id for episodes under apple subscription feeds') argparser.add_argument('-env', required=True, help='env', default='qa') args = argparser.parse_args() filename = os.environ.get('FILENAME') env = args.env user_id = users[env] def get_user_id(): """Mock get user id return value.""" return user_id api_utils.get_user_id = get_user_id request_headers = { 'Grass-Account-Type': 'vendor', 'Grass-Account-Id': '1', 'Correlation-Id': '12', 'Orchard-Identity-UUID': 'podcast-admin', 'Content-Type': 'application/json' } log.info(f'Running backfill_apple_id_for_episodes_under_apple_feeds for {env} environment.\n') backfill_apple_id_for_episodes_under_apple_feeds(filename) if __name__ == '__main__': main()