"""Interface for the ows-users microservice.""" import json from owsresponse import response from owsrequest import request as requests from sentry_sdk import capture_message from features import config from features.connectors import redis from features.constants import error from features.constants import services def get_user_details_by_user_id(user_id): """Get user details by user id. Args: user_id: the user id with alw: or oa: prefix Returns: Response: Response object with orchard / subaccount / vendor info """ users_response_cache = redis.client.get('user_info_{}'.format(user_id)) if users_response_cache: return response.Response( message=json.loads(users_response_cache.decode('utf8')) ) users_response = requests.get( services.OWS_USERS, '/users/{}/minimum-details'.format(user_id) ) if users_response.status_code == 200: redis.client.set( 'user_info_{}'.format(user_id), json.dumps(users_response.json()), ex=config.REDIS_CACHE_TTL, ) return response.Response(message=users_response.json()) if users_response.status_code == 404: return response.create_error_response( status=404, code=error.ERROR_CODE_USER_DOES_NOT_EXIST, message=error.ERROR_MESSAGE_USER_DOES_NOT_EXIST, ) if users_response.status_code == 401: return response.create_error_response( status=401, code=error.ERROR_CODE_USER_UNAUTHORIZED, message=error.ERROR_MESSAGE_USER_UNAUTHORIZED, ) error_message = '{ows_users} returned {code} status'.format( ows_users=services.OWS_USERS, code=users_response.status_code ) capture_message(message=error_message) return response.create_fatal_response()