"""Module for ows_conflict_manager.action table.""" from oto import response from conflict_manager.connectors import snowflake from conflict_manager.constants import database as db_consts from conflict_manager.utils import model_utils @snowflake.db_session_wrap def get_ids_to_update(ids, session): """Check which of given ids exists in the DB. Args: ids (list): list of grouped_conflict_id to check session (sqlalchemy.orm.session.Session): database session Returns: set """ sql = """ SELECT grouped_conflict_id from {conflict_status_table} WHERE grouped_conflict_id in (:ids); """ query_results = model_utils.run_query( session=session, sql=sql, params={'ids': ids}) return set([row[db_consts.GROUPED_CONFLICT_ID] for row in query_results]) @snowflake.db_session_wrap def create(statuses, session): """Save conflicts statuses to DB. Args: statuses (list): list of conflict statuses dicts prepared to save in DB session (sqlalchemy.orm.session.Session): database session (optional) Returns: response.Response: dict of created action or errors """ sql = """ INSERT INTO {conflict_status_table}( grouped_conflict_id, tuid, conflict_date, conflicting_owner, action, status, update_date, user_id, note, account_type, account_id) VALUES( :grouped_conflict_id, :tuid, :conflict_date, :conflicting_owner, :action, :status, :update_date, :user_id, :note, :account_type, :account_id); """ query_results = model_utils.run_query( session=session, sql=sql, params=statuses) results = model_utils.query_results_to_dict(query_results) return response.Response(results) @snowflake.db_session_wrap def update(ids, status, update_date, note, session): """Update conflict statuses. Args: ids (list): list of grouped_conflict_id that will be updated status (str): new status update_date (str): update date in '2018-05-30' format note (str): note session (sqlalchemy.orm.session.Session): database session (optional) Returns: response.Response: dict of created action or errors """ sql = """ UPDATE {conflict_status_table} SET update_date = :date, status = :status, note = :note WHERE grouped_conflict_id in (:ids); """ query_results = model_utils.run_query( session=session, sql=sql, params={'ids': ids, 'status': status, 'date': update_date, 'note': note}) results = model_utils.query_results_to_dict(query_results) return response.Response(results)