"""Data access layer for ows-product-manager. Data access layer for extracting project information from ows-project-manager. """ from oto import response from owsrequest import request from label_copy_export import config from label_copy_export.connectors import loggly from label_copy_export.constants import error from label_copy_export.constants import ows_services logger = loggly.get_current_logger() def get_project_manager_response(endpoint, correlation_id=None): """Request data from ows-project-manager microservice. Args: endpoint (str): path to microservice endpoint correlation_id (str): correlation id Returns: response.Response: result with dict message in case of success or response with errors. """ resp = request.process( application=config.APP_NAME, environment=config.ENVIRONMENT, method='GET', service_name=ows_services.OWS_PROJECT_MANAGER, path=endpoint, correlation_id=correlation_id, ) if resp.status_code != 200: return response.create_error_response( code=error.ERROR_CODE_PROJECT_MANAGER, message=resp.text, status=resp.status_code) return response.Response(message=resp.json()) def get_project(project_id, correlation_id=None): """Get project data from ows-project-manager microservice. Retrieves project name and code. Args: project_id (str): project id correlation_id (str): correlation id Returns: response.Response: containing dict message. """ endpoint = '/project/{}'.format(project_id) resp = get_project_manager_response(endpoint, correlation_id) if resp: return resp msg = "Project data for project_id: {} can't be retrieved from {}".format( project_id, ows_services.OWS_PROJECT_MANAGER) logger.warning(msg) return resp def get_products_for_project(project_id, correlation_id=None): """Get all products for project from ows-project-manager microservice. Args: project_id (str): project id correlation_id (str): correlation id Returns: response.Response: containing dict message. """ endpoint = '/project/{}/products'.format(project_id) resp = get_project_manager_response(endpoint, correlation_id) if not resp: msg = "Products for project_id: {} can't be retrieved from {}".format( project_id, ows_services.OWS_PROJECT_MANAGER) logger.warning(msg) return resp def get_project_genres(correlation_id=None): """Get project genres from ows-project-manager microservice. Args: correlation_id (str): correlation id Returns: response.Response: with dict in response.message containing genres in case of success, or errors in other case """ endpoint = '/product/genres' resp = get_project_manager_response(endpoint, correlation_id) if resp: return resp msg = 'There was an error while getting genres from {}'.format( ows_services.OWS_PROJECT_MANAGER) logger.warning(msg) return resp def get_project_subgenres(genre_id, correlation_id=None): """Get subgenres for specific genre. Args: genre_id (int): genre id correlation_id (str): correlation id Returns: response.Response: with dict in response.message containing subgenres in case of success, or errors in other case. """ endpoint = '/product/genres/{}/subgenres'.format(genre_id) resp = get_project_manager_response(endpoint, correlation_id) if resp: return resp msg = "Subgenres for genre id: {} can't be retrieved from {}".format( genre_id, ows_services.OWS_PROJECT_MANAGER) logger.warning(msg) return resp