"""Product logic.""" import logging import const from models import ows_product import util # noqa from utils import document as document_utils def prepare_doc(event): """Construct a Cloudsearch document for the product corpus. Args: event (dict): event with product data from Maxwell's Returns: dict: cloudsearch document ready for upload """ json_doc = {} doc_type = 'add' event_type = event.get('type') if not event_type or event.get('_metadata'): logging.warning( 'An event with incompatible format received: %s', event) return json_doc # Prevent the removal of product document if we receive 'delete' event # from 'release_correction' or 'release_approval_queue' tables. # We need to update the product document in this case. if event_type == 'delete' and event.get('table') != 'releases': event_type = 'insert' elif event_type == 'delete' and event.get('table') == 'releases': doc_type = 'delete' event_type = 'delete' if event_type != 'delete': json_doc = ows_product.get_product_document( event['data']['release_id']) if json_doc.get('release_id') in [1982836, 1877977, 2364977]\ or json_doc.get('release_date') == '0001-01-01': # Skip documents with a bad date. return {} if event['data']['release_id'] in const.PRODUCT_EXCLUSION_LIST: # Delete the cloudsearch record for exclusion list doc_type = 'delete' return document_utils.prepare_for_upload( util.parse_spec_file('releases'), { 'type': doc_type, 'id': 'rel{}'.format(event['data']['release_id']), 'fields': json_doc})