"""Call for ows-product to validate release.""" from typing import Any from owsrequest import request from requests import HTTPError from assets.constants import error, service from assets.exceptions import ProductNotFound def get_product_by_id( product_id: int, with_tenant_uuids: bool = False ) -> dict[str, Any]: """Verify valid product for provided product_id and return its details. Args: product_id (Integer): Unique identification for product. with_tenant_uuids (bool): Include tenant-level UUID fields (vendorUUID, subaccountUUID, companyBrandUUID, parentCompanyUUID) in the result. Returns: dict: product details. """ resource = ( service.OWS_PRODUCT_BY_PRODUCT_ID_WITH_TENANT_UUIDS if with_tenant_uuids else service.OWS_PRODUCT_BY_PRODUCT_ID ).format(product_id=product_id) try: ows_product_response = request.get(service.OWS_PRODUCT, resource) ows_product_response.raise_for_status() return ows_product_response.json() # type: ignore[no-any-return] except HTTPError as ex: if ex.response.status_code == 404: raise ProductNotFound(error.ERROR_RELEASE_NOT_FOUND) from ex raise def check_ownership( product_id: int, account_type: str | None, account_id: int | None ) -> None: """Check for account product ownership. Args: account_type (str | None): Account type account_id (int | None): Account ID to check product_id (int): Product ID to check """ 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) product_response.raise_for_status() except HTTPError as ex: if ex.response.status_code == 404: raise ProductNotFound(error.ERROR_RELEASE_NOT_FOUND) from ex raise def get_upcs_by_product_ids(product_ids: list[int]) -> dict[str, Any]: """Get upcs by product ids. Args: product_ids (list): Comma delimited list of product ids. Returns: dict: upcs/products list. """ resource = service.OWS_PRODUCT_UPCS_BY_PRODUCT_IDS.format( product_ids=",".join(list(map(str, product_ids))) ) ows_product_response = request.get(service.OWS_PRODUCT, resource) ows_product_response.raise_for_status() return ows_product_response.json() # type: ignore[no-any-return]