"""Validation Logic.""" from owsrequest import request from src import config from src.exceptions import OwsRequestException from src.exceptions import ValidationException from src.log import log def validate_product_by_id(product_id): """Validate product by ID.""" result = request.process( config.APPLICATION_NAME, config.ENVIRONMENT, 'GET', 'ows-product-digital', f'/product/audio/{product_id}/validate', headers={ 'Content-Type': 'application/json', 'Orchard-Profile-Type': 'ContentProfile', 'Orchard-Profile-Id': 'content-integrations-bulk-submit', 'Orchard-Identity-Id': 'a280c495-4938-4953-82e3-078959872772', }, params={'format': 'list'} ) log.debug(f'Validate response: status={result.status_code} content={result.text}') if result.status_code != 200: raise OwsRequestException('validate', result.text) response = result.json() if not response.get('validations', {}).get('is_valid'): raise ValidationException(format_errors(response, product_id)) def format_errors(response, product_id): """Format errors.""" result = [] validations = response.get('validations', {}) for err in validations['errors']: result.append((product_id, None, err.get('code'), err.get('reason'))) for _, track in validations['tracks'].items(): for err in track['errors']: result.append((product_id, track['tuid'], err.get('code'), err.get('reason'))) return result def mark_product_as_submitted(product_id): """Update a product's status to be submitted.""" result = request.process( config.APPLICATION_NAME, config.ENVIRONMENT, 'POST', 'ows-product-digital', f'/product/audio/{product_id}/submit', headers={ 'Content-Type': 'application/json', 'Grass-Account-Type': 'oa', 'Grass-Account-Id': '179', } ) log.debug(f'Update status response: status={result.status_code} content={result.text}') if result.status_code != 200: if result.status_code == 400 and 'Product is already submitted.' in result.text: return raise OwsRequestException('update_status', result.text)