"""Data lookup logic.""" from content_utils.connectors.graphql import LambdaGraphQLConnector from content_utils.exceptions import GraphQLError from content_utils.exceptions import InvalidProductException from src import config from src.logic.ows_assets import get_asset_by_id from src.queries.graphql import PRODUCT_DATA_QUERY graphql_connector = LambdaGraphQLConnector( graphql_service_name=config.GRAPHQL_SERVICE_NAME, application_name=config.APPLICATION_NAME, logger=config.app_logger, environment=config.ENVIRONMENT, ) def get_product(asset_final_id): """Retrieve a product.""" product_id = get_product_id_by_asset(asset_final_id) return get_product_data(product_id) def get_product_data(product_id): """Get product data by product id.""" response = graphql_connector.execute(PRODUCT_DATA_QUERY, {'productId': product_id}) validate_product_query_errors(response, product_id) return response['data']['product'] def validate_product_query_errors(response, product_id): """Check product query response for errors.""" errors = response.get('errors') if errors: raise GraphQLError(f'Product retrieval blocked: {errors}') product = response['data']['product'] if not product: raise InvalidProductException( f'Product with product_id {product_id} not found, may be deleted') def get_product_id_by_asset(asset_final_id): """Get product id for the asset.""" data = get_asset_by_id(asset_final_id) return str(data['product_id']) def find_path(error): """Find the path of the error if exists.""" if error.get('extensions', {}).get('exception', {}).get('path'): return error.get('extensions').get('exception').get('path') if error.get('path'): return error.get('path')