"""Neo4j base model.""" from typing import Any, Dict, List from config import NEO4J_DATABASE_NAME from neo4j import Transaction from lambdacommon.common_config import logger from src.connector.neo4j import neo4j_driver def run_cypher_query(query: str, params: Dict[str, Any]) -> List[Dict[str, Any]]: """Run a cypher query with passed params. Args: query (str): Cypher query. params (dict): Params of the query. Returns: List[Dict[str, Any]]: result data Raises: Exception: Any error that occurs while executing the query. """ try: with neo4j_driver.session(default_access_mode='read', database=NEO4J_DATABASE_NAME) as session: return session.execute_read(execute_cypher_transaction, query, params) except Exception: logger.exception( 'Neo4j query execution failed', extra={ 'query': query, 'params': params } ) raise def execute_cypher_transaction(tx: Transaction, query: str, params: Dict[str, Any]) -> List[Dict[str, Any]]: """Execute cypher query with passed params. Args: tx (Transaction): Neo4j transaction. query (str): Cypher query. params (dict): Params of the query. Returns: List[Dict[str, Any]]: result data """ try: result = tx.run(query, **params) return result.data() except Exception: logger.exception( 'Error running transaction in Neo4j', extra={ 'query': query, 'params': params } ) raise