"""UpdateJobStatus. Updates the job status for a job """ from feed_sender.util import mysql def update(data): """Update the job status. Args: data (dict): Data for query execution. Returns: bool: True after operation is success """ db_connection = mysql.get_dd_db_connection_pymysql( autocommit=True) sql = GetSql(data).get() written_rows = mysql.execute_write_query( db_connection, sql['query'], sql.get('params')) return written_rows == 1 class GetSql(object): """GetSql class.""" def __init__(self, data): """Initialize data for sql query. Args: data (dict): Data for query execution. """ self.data = data def func_not_found(self): """Return function not found. Returns: None """ return None def get(self): """Dyanmically calls valid sql_* function. Returns: dict: Query and params. """ func_name = 'sql_' + self.data['status'] func = getattr(self, func_name, self.func_not_found) return func() def sql_encoding(self): """Create mysql query for encoding. Returns: dict: The mysql query and params. """ return { 'query': 'UPDATE encoding_queue_detail ' 'SET encoding_started = NOW(), status = "encoding", ' 'encoding_server = "Proper Encoder" ' 'WHERE encoding_queue_detail_id = %(eqd_id)s ' 'AND status = "ready_to_encode"', 'params': {'eqd_id': self.data['eqd_id']}} def sql_encoded(self): """Create mysql query for encoded. Returns: dict: The mysql query and params. """ return { 'query': 'UPDATE encoding_queue_detail ' 'SET encoding_ended = NOW(), status = "encoded", ' 'package_size = 0 ' 'WHERE encoding_queue_detail_id = %(eqd_id)s ' 'AND status = "encoding"', 'params': {'eqd_id': self.data['eqd_id']}} def sql_delivering(self): """Create mysql query for delivering. Returns: dict: The mysql query and params. """ return { 'query': 'UPDATE encoding_queue_detail ' 'SET delivery_started = NOW(), status = "delivering", ' 'delivery_server = "Proper Delivery" ' 'WHERE encoding_queue_detail_id = %(eqd_id)s ' 'AND status = "encoded"', 'params': {'eqd_id': self.data['eqd_id']}} def sql_delivered(self): """Create mysql query for delivered. Returns: dict: The mysql query and params. """ return { 'query': 'UPDATE encoding_queue_detail ' 'SET delivery_ended = NOW(), status = "delivered" ' 'WHERE encoding_queue_detail_id = %(eqd_id)s ' 'AND status = "delivering"', 'params': {'eqd_id': self.data['eqd_id']}} def sql_delivery_failure(self): """Create mysql query for delivery_failure. Returns: dict: The mysql query and params. """ error_log = 'SFTP Error: {}'.format(self.data['error_log']) return { 'query': 'UPDATE encoding_queue_detail ' 'SET status = "delivery_failure", ' 'error_log = %(error_log)s ' 'WHERE encoding_queue_detail_id = %(eqd_id)s ' 'AND status = "delivering"', 'params': {'error_log': error_log, 'eqd_id': self.data['eqd_id']}} def sql_system_cancelled(self): """Create mysql query for system_cancelled. Returns: dict: The mysql query and params. """ return { 'query': 'UPDATE encoding_queue_detail ' 'SET status = "system_cancelled", ' 'error_log = %(error_log)s ' 'WHERE encoding_queue_detail_id = %(eqd_id)s', 'params': { 'error_log': self.data['error_log'], 'eqd_id': self.data['eqd_id']}}