"""Interface to the ows-product-digital microservice.""" from flask import g from owsrequest import request from owsresponse import status from product_review.constants import error, services from product_review.constants.validations import ( POTENTIAL_AUDIO_INFRINGEMENT_CODE, CROSS_ACCOUNT_OSR_CONFLICT_CODE ) from product_review.util import exception as exception_util def reject_product(product_id): """Change status of an existing product after it's been rejected. Args: product_id (int): unique identifier for the product Returns: response.Response status of create call and dictionary of results """ result = request.put( services.OWS_PRODUCT_DIGITAL, f"/product/audio/{product_id}/reject" ) if result.status_code != status.OK: exception_util.raise_exception_for_ows_response( status=result.status_code, code=error.OWS_PRODUCT_DIGITAL_ERROR_CODE, message=result.json(), ) return result def validate_product(product_id): """Validate product. Args: product_id (int): unique identifier for the product Returns: product_validation_result """ url = f"/product/audio/{product_id}/validate" result = request.get( services.OWS_PRODUCT_DIGITAL, url, params={"validation_context": "post_submission", "format": "list"}, headers={ "Content-Type": "application/json", "Orchard-Profile-Type": g.request_context.profile_type, "Orchard-Profile-Id": g.request_context.profile_id, }, ) if result.status_code != status.OK: exception_util.raise_exception_for_ows_response( status=result.status_code, code=error.OWS_PRODUCT_DIGITAL_ERROR_CODE, message=result.json(), ) return result.json()["validations"] def select_potential_audio_infringement_track_warnings(product_validation_result): """Select potential audio infringement track warnings from product validation result.""" # noqa: E501 result = [] for track_validations in product_validation_result["tracks"].values(): for track_warning in track_validations.get("warnings", []): if track_warning["code"] in ( POTENTIAL_AUDIO_INFRINGEMENT_CODE, CROSS_ACCOUNT_OSR_CONFLICT_CODE ): result.append({ "track_id": track_validations.get("tuid"), "warning": track_warning }) return result def is_product_valid(product_validation_result): """Check if product is valid.""" return bool(product_validation_result["is_valid"]) def approve_product(product_id): """Change status of an existing product after it's been approved. Args: product_id (int): unique identifier for the product Returns: response.Response status of create call and dictionary of results """ url = f"/product/audio/{product_id}/approve" result = request.put(services.OWS_PRODUCT_DIGITAL, url) if result.status_code != status.OK: exception_util.raise_exception_for_ows_response( status=result.status_code, code=error.OWS_PRODUCT_DIGITAL_ERROR_CODE, message=result.json(), ) return result def get_product(product_id): """Get product.""" url = f"/product/audio/{product_id}" result = request.get(services.OWS_PRODUCT_DIGITAL, url) if result.status_code != status.OK: exception_util.raise_exception_for_ows_response( status=result.status_code, code=error.OWS_PRODUCT_DIGITAL_ERROR_CODE, message=result.text, ) return result.json() def update_not_for_distribution(product_id, not_for_distribution): """Update product not_for_distribution flag.""" url = f"/product/{product_id}/not_for_distribution" result = request.put( service_name=services.OWS_PRODUCT_DIGITAL, path=url, json={"not_for_distribution": not_for_distribution}, ) if result.status_code != status.OK: exception_util.raise_exception_for_ows_response( status=result.status_code, code=error.OWS_PRODUCT_DIGITAL_ERROR_CODE, message=result.text, ) return result.json()