"""Interface for the ows-users microservice.""" from ddtrace import tracer from oto import response from owsrequest import request from notifications_delivery import config from notifications_delivery.connectors import sentry from notifications_delivery.constants import error, ows_services @tracer.wrap(service='ows-users') def get_user_info(user_id): """Get a user's info (first_name, last_name, email) from ows-users. Args: user_id (str): the orchard user id Returns: response.Response: containing the user's info. """ path = '/users/{user_id}'.format(user_id=user_id) result = request.process( application=ows_services.APPLICATION_NAME, environment=config.ENVIRONMENT, method=ows_services.METHOD_GET, service_name=ows_services.OWS_USERS, path=path) if result.status_code != 200: return response.create_error_response( status=result.status_code, code=error.ERROR_CODE_OWS_USERS_REQUEST, message=result.text) return response.Response(result.json()) @tracer.wrap(service='ows-users') def get_users_info(user_ids): """Get multiple user's info from ows-users. Args: user_ids (list): the orchard user ids Returns: response.Response: containing the users info. """ users_info = [] for user_id in user_ids: result = get_user_info(user_id) if not result: sentry.send_response_to_sentry( result, error.ERROR_CODE_OWS_USERS_REQUEST) continue users_info.append(result.message) return response.Response(users_info) @tracer.wrap(service='ows-users') def get_alw_users_by_email(email): """Get multiple ALW user's info from ows-users. Args: email (str): the orchard user email Returns: response.Response: containing the alw users info. """ path = '/users/get-alw-users-by-email?email={email}'.format(email=email) result = request.process( application=ows_services.APPLICATION_NAME, environment=config.ENVIRONMENT, method=ows_services.METHOD_GET, service_name=ows_services.OWS_USERS, path=path) if result.status_code != 200: return response.create_error_response( status=result.status_code, code=error.ERROR_CODE_OWS_USERS_REQUEST, message=result.text) return response.Response(result.json()) @tracer.wrap(service='ows-users') def get_identity_by_email(email): """Get Identity for this email. Args: email (str): the orchard user email Returns: response.Response: containing the alw users info. """ path = f'/users/identity/email/{email}' result = request.process( application=ows_services.APPLICATION_NAME, environment=config.ENVIRONMENT, method=ows_services.METHOD_GET, service_name=ows_services.OWS_USERS, path=path) if result.status_code != 200: return response.create_error_response( status=result.status_code, code=error.ERROR_CODE_OWS_USERS_REQUEST, message=result.text) return response.Response(result.json())