"""Interface for the ows-product-digital microservice.""" from oto import response from owsrequest import request as requests import sentry_sdk from product.constants import error from product.constants import header from product.constants import service_name def copy_digital_product(product_id, fields): """Copy a product. Args: product_id (int): The product_id (release_id) of the product to copy. fields (dict): Fields that override original product fields when copying the product. Returns: response.Response: Response object with copy operation status and new product_id in .message on success. """ try: copy_product_response = requests.post( service_name.OWS_PRODUCT_DIGITAL, "/product/{product_id}/copy".format(product_id=product_id), json=fields, ) except Exception as exception: sentry_sdk.capture_exception(exception) return response.create_fatal_response( message="Could not connect to ows-product-digital." ) return response.Response( status=copy_product_response.status_code, message=copy_product_response.json() ) def create_digital_product(fields): """Copy a product. Args: fields (dict): Fields to create product from Returns: response.Response: Response object with operation status and new product_id in .message on success. """ try: product_response = requests.post( service_name.OWS_PRODUCT_DIGITAL, "/product/audio", json=fields ) except Exception as exception: sentry_sdk.capture_exception(exception) return response.create_fatal_response( message="Could not connect to ows-product-digital." ) return response.Response( status=product_response.status_code, message=product_response.json() ) def update_digital_product(product_id, account_id, account_type, fields): """Update a product.""" try: headers = { header.GRASS_ACCOUNT_TYPE: account_type, header.GRASS_ACCOUNT_ID: account_id, } product_response = requests.put( service_name.OWS_PRODUCT_DIGITAL, "/product/audio/{}".format(product_id), json=fields, headers=headers, ) except Exception as exception: sentry_sdk.capture_exception(exception) return response.create_fatal_response( message="Could not connect to ows-product-digital." ) return response.Response( status=product_response.status_code, message=product_response.json() ) def get_digital_product(product_id): """Retrieve a digital product metadata. Args: product_id (int): The product_id (release_id) of the product to fetch. Returns: response.Response: Response object with metadata of the product. """ try: get_product_response = requests.get( service_name.OWS_PRODUCT_DIGITAL, "/product/audio/{product_id}".format(product_id=product_id), ) except Exception as exception: sentry_sdk.capture_exception(exception) return response.create_fatal_response( message="Could not connect to ows-product-digital." ) return response.Response( status=get_product_response.status_code, message=get_product_response.json() ) def delete_digital_product(product_id, account_type, account_id): """Delete digital product. Args: product_id (int): digital product id to delete. Returns: response.Response: status of deletion """ try: headers = { header.GRASS_ACCOUNT_TYPE: account_type, header.GRASS_ACCOUNT_ID: account_id, } delete_status = requests.delete( service_name.OWS_PRODUCT_DIGITAL, "/product/{product_id}".format(product_id=product_id), headers=headers, ) return response.Response(status=delete_status.status_code) except Exception as exception: sentry_sdk.capture_exception(exception) return response.create_error_response( code=error.INTERNAL_ERROR, message=str(exception), status=500 )