from masters_registry.connectors import dynamodb from masters_registry.constant import opcode_const from masters_registry.models import ownership def lock_territories(isrc, territories, lock_reason, correlation_id, user): """Lock territories for a single ISRC and save audit information. Args: isrc (dict): ISRC ownership item from dynamoDB active table territories (list): list of two-letter territories codes to lock lock_reason (str): reason for locking correlation_id (str): correlation id for logs user (str): user id for audit table logging Returns: dict: lists of territories that were removed, locked and unlocked """ audit_items = [] result = { opcode_const.REMOVE: [], opcode_const.LOCK: [], opcode_const.UNLOCK: [], } for territory in territories: if territory in isrc['territories']: del isrc['territories'][territory] result[opcode_const.REMOVE].append(territory) existing_lock = isrc['locked_territories'].get(territory) if existing_lock and existing_lock['reason'] == lock_reason: continue if existing_lock and existing_lock['reason'] != lock_reason: result[opcode_const.UNLOCK].append(territory) isrc['locked_territories'][territory] = { 'reason': lock_reason } result[opcode_const.LOCK].append(territory) for opcode, territories in result.items(): if not territories: continue reason = lock_reason if opcode == opcode_const.LOCK else None audit_items.append(ownership.create_audit_record( opcode, isrc['isrc'], territories, correlation_id, user, reason=reason )) dynamodb.update_isrc(isrc) ownership.update_multiple_ownerships(audit_items) return result