"""Call for ows-product to validate release.""" from oto import response from owsrequest import request from assets.connectors.sentry import sentry_client from assets.constants import error from assets.constants import service def _get_product(resource): """Get product details using ows-product resource. Args: resource (str): URI for getting product info from ows-product service Returns: message: Dict of product details. """ try: ows_product_response = request.get(service.OWS_PRODUCT, resource) except Exception as ex: sentry_client.captureException() return response.create_error_response( code=error.INTERNAL_ERROR, message=str(ex), status=500) if ows_product_response.status_code == 200: product_details = ows_product_response.json() return response.Response(message=product_details) if ows_product_response.status_code == 404: return response.create_not_found_response( message=str(error.ERROR_RELEASE_NOT_FOUND)) return response.create_fatal_response() def get_product_by_id(product_id): """Verify valid product for provided product_id and return its details. Args: product_id (Integer): Unique identification for product. Returns: message: Dict of product details. """ resource = service.OWS_PRODUCT_BY_PRODUCT_ID.format( product_id=product_id) return _get_product(resource) def get_product_by_upc(upc): """Verify valid product for provided upc and return its details. Args: upc (int): Product UPC. Returns: message: Dict of product details. """ resource = service.OWS_PRODUCT_BY_PRODUCT_UPC.format(upc=upc) return _get_product(resource) def validate_release(upc): """Check for valid release. Args: upc (int): upc to check for valid release Returns: message: status code returned by ows-product """ try: resource = service.OWS_PRODUCT_RESOURCE.format(upc=upc) ows_product_response = request.head(service.OWS_PRODUCT, resource) except Exception as ex: sentry_client.captureException() return response.create_error_response( code=error.INTERNAL_ERROR, message=str(ex), status=500) if ows_product_response.status_code == 200: return response.Response( message=str(error.SUCCESS_CODE)) if ows_product_response.status_code == 404: return response.create_not_found_response( message=str(error.ERROR_RELEASE_NOT_FOUND)) return response.create_fatal_response() def check_ownership(account_type, account_id, product_id): """Check for account product ownership. Args: account_type (str): Account type account_id (int): Account Id to check product_id (int): Product Id to check Returns: response.Response: Response with code from ows-product """ try: resource = service.OWS_PRODUCT_OWNERSHIP_RESOURCE.format( account_type=account_type, account_id=account_id, product_id=product_id) product_response = request.head(service.OWS_PRODUCT, resource) except Exception as ex: sentry_client.captureException() return response.create_fatal_response(str(ex)) if product_response.status_code == 200: return response.Response(message=error.SUCCESS_CODE) if product_response.status_code == 404: return response.create_not_found_response( message=error.ERROR_RELEASE_NOT_FOUND) if product_response.status_code == 403: return response.create_error_response( status=product_response.status_code, code=error.ERROR_CODE_NOT_OWNED, message=error.ERROR_PRODUCT_NOT_OWNED) return response.create_fatal_response()