"""Fetching data from art_relations database.""" from typing import List from typing import Type from src.common.models.metadata import ARSyncEvent from src.common.models.metadata import ArtRelationsTable from src.common.connectors.art_relations import execute_query FETCH_QUERY = 'SELECT * FROM {table_name} WHERE {primary_key_name} IN %(ids)s' def fetch_ar_records_to_sync( table: Type[ArtRelationsTable], ids: List[int] ) -> List[ARSyncEvent]: """Fetch records from Art Relations to sync. Args: table: Art Relations table info. ids: List of ids to fetch records. Return: List of ARSyncEvent records. """ query_results = execute_query( FETCH_QUERY.format( table_name=table.name, primary_key_name=table.primary_key_name ), {'ids': ids} ) records = list(query_results) if len(set(ids)) != len(records): raise Exception(f'Failed to fetch some rows in {table.name}.') results = [ ARSyncEvent(data=record, table=table.name) for record in records ] return results