import argparse import logging import os import sys import pymysql sys.path.append(os.path.join(os.path.dirname(__file__), '..')) from connector import mysql from sql import project from sql import track as track_sql 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) def update_projects(items, cursor, ar_db): if not items: return for item in items: try: cursor.execute( project.UPDATESQL, { 'project_ids': item['project_id'] } ) ar_db.commit() log.info('UPDATE SUCCESS FOR project_id {}'. format(item['project_id'])) except (pymysql.MySQLError, pymysql.Warning) as e: log.error( 'UPDATE FAILED FOR project_id {} error : {} '.format( item['project_id'], e)) continue def update_tracks(items, cursor, ar_db): if not items: return for track in items: try: cursor.execute( track_sql.UPDATESQL, { 'track_ids': track['id'] } ) ar_db.commit() log.info('UPDATE SUCCESS FOR track_id {}'.format(track['id'])) except (pymysql.MySQLError, pymysql.Warning) as e: log.error( 'UPDATE FAILED FOR track_id %s error : {}'.format(track['id'], e)) continue if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--project_ids', type=str, default=None) parser.add_argument('--track_ids', type=str, default=None) args = parser.parse_args() log.info('Starting re-index job.') log.info( 'project_ids: {} track_ids: {}'.format(args.project_ids, args.track_ids)) item_completed = '' ar_db = None cursor = None try: ar_db = mysql.get_ar_mysql_connection() cursor = ar_db.cursor() if args.project_ids: cursor.execute(project.SELECT_BY_PROJECT_ID_SQL.format( project_ids=args.project_ids)) rows = cursor.fetchall() update_projects(rows, cursor, ar_db) item_completed = '{} projects'.format(len(rows)) elif args.track_ids: cursor.execute(track_sql.SELECT_BY_TRACK_ID_SQL.format( track_ids=args.track_ids)) rows = cursor.fetchall() update_tracks(rows, cursor, ar_db) item_completed = '{} tracks'.format(len(rows)) else: log.error('No project or track params found') except pymysql.Warning as e: log.error('MySQL Warning : {}'.format(str(e))) pass except Exception: log.exception('Failed to query.') exit(1) finally: if cursor: cursor.close() if ar_db: ar_db.close() log.info('{} have been updated.'.format(item_completed)) log.info('Done')