"""Update subaccount mapping in neo4j.""" import backoff from lambdacommon.common_config import logger from src.connectors.neo4j import connector_neo4j from src.cypher.subaccount_mapping_in_neo4j import ( CHECK_PROJECT_SYNC_UP, UPDATE_LABELPARTICIPANT_RELATIONSHIPS, UPDATE_LP_REFERENTIAL_UUIDS, UPDATE_SUBACCOUNT_RELATIONSHIP, ) def update_lp_relationships(transaction, vendor_id): """Update LabelParticipant relationships.""" lp_relationships_query = UPDATE_LABELPARTICIPANT_RELATIONSHIPS.format(vendor_id=vendor_id) transaction.run(lp_relationships_query) return def update_subaccount_relationship(transaction, vendor_id): """Update subaccount relationship.""" subaccount_relationship_query = UPDATE_SUBACCOUNT_RELATIONSHIP.format(vendor_id=vendor_id) transaction.run(subaccount_relationship_query) return def update_lp_referential_uuids(transaction, vendor_id): """Update CompanyBrand, Vendor, and Subaccount UUIDs on Label Participants.""" update_uuids_query = UPDATE_LP_REFERENTIAL_UUIDS.format(vendor_id=vendor_id) transaction.run(update_uuids_query) return def raise_exception_on_giveup(details): """Raise exception when project sync-up not completed in 30 sec.""" raise Exception('Project and subaccount_id sync up in neo4j is incomplete') @backoff.on_predicate( backoff.constant, lambda returnValue: returnValue > 0, jitter=None, max_tries=3, interval=15, logger=logger, on_giveup=raise_exception_on_giveup ) def check_project_sync_up(transaction, vendor_id): """Check project subaccount_id sync up from art_relations to neo4j.""" logger.info(f'Checking project sync-up completion for vendor: {vendor_id}') query = CHECK_PROJECT_SYNC_UP.format(vendor_id=vendor_id) result = transaction.run(query) projects = result.data() return len(projects[0]['num']) @connector_neo4j.Neo4jSession( transaction=True, use_v2=True, database='graph.db' ) def update_mapping_in_neo4j(vendor_id, logger): """Update subaccount mapping in neo4j.""" transaction = connector_neo4j.get_session() try: check_project_sync_up(transaction, vendor_id) logger.info(f'Start mapping in neo4j for vendor: {vendor_id}') update_lp_relationships(transaction, vendor_id) update_subaccount_relationship(transaction, vendor_id) update_lp_referential_uuids(transaction, vendor_id) logger.info('mapping in neo4j completed') except Exception as e: logger.info(str(e))