"""Backfill episode's external id using CSV file. run this in dev with command docker compose run --build backfill-external-id --env=dev """ import argparse import csv import logging import os import sys from podcast.models import episode as episode_model 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_external_id(filename): """Backfill episode's external_id in ows-podcats db. Args: filename (str): The filename to access the csv file. """ if not filename: raise Exception('File with name: backfillExternalId.csv not found.') log.info(f'Reading file: {filename}.\n') with open(filename) as csv_file: error_count = 0 errored_episodes = [] reader = csv.DictReader(csv_file) for row in reader: try: episode_id = int(row['Episode ID']) print(f'Running for episode_id: {episode_id}') data = dict([('external_id', row['GRPS Project ID'])]) episode_model.update_episode(episode_id, data) except Exception as e: errored_episodes.append(episode_id) error_count += 1 log.info( f'Got an exception for episode_id: {episode_id}\n' f'Exception trace: {e}\n' ) print(f'\nErrored errored count: {error_count} and episode_ids: {errored_episodes} \n') def main(): """Extract shell arguments and start backfilling episode external id in DB using CSV file.""" global request_headers argparser = argparse.ArgumentParser(prog='Backfill episode external id') argparser.add_argument('--env', required=True, help='env', default='qa') args = argparser.parse_args() filename = os.environ.get('FILENAME') env = args.env def get_user_id(): """Mock get user id return value.""" return users[env] 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 episode external id backfill for {env} Environment.\n') backfill_external_id(filename) if __name__ == '__main__': main()