import boto3
import base64
from botocore.exceptions import ClientError

def get_secret(secret_name, region='us-east-1'):
	region_name = region

	# Create a Secrets Manager client
	session = boto3.session.Session()
	client = session.client(
		service_name='secretsmanager',
		region_name=region_name
	)

	try:
		get_secret_value_response = client.get_secret_value(
			SecretId=secret_name
		)

	except ClientError as e:
		if e.response['Error']['Code'] == 'DecryptionFailureException':
			# Secrets Manager can't decrypt the protected secret text using the provided KMS key.
			# Deal with the exception here, and/or rethrow at your discretion.
			print('DecryptionFailureException raised: {}'.format(e))
		elif e.response['Error']['Code'] == 'InternalServiceErrorException':
			# An error occurred on the server side.
			# Deal with the exception here, and/or rethrow at your discretion.
			print('InternalServiceErrorException raised: {}'.format(e))
		elif e.response['Error']['Code'] == 'InvalidParameterException':
			# You provided an invalid value for a parameter.
			# Deal with the exception here, and/or rethrow at your discretion.
			print('InvalidParameterException raised: {}'.format(e))
		elif e.response['Error']['Code'] == 'InvalidRequestException':
			# You provided a parameter value that is not valid for the current state of the resource.
			# Deal with the exception here, and/or rethrow at your discretion.
			print('InvalidRequestException raised: {}'.format(e))
		elif e.response['Error']['Code'] == 'ResourceNotFoundException':
			# We can't find the resource that you asked for.
			# Deal with the exception here, and/or rethrow at your discretion.
			print('ResourceNotFoundException raised: {}'.format(e))
		else:
			print("Unknown Error: {}".format(e))
	else:
		# Decrypts secret using the associated KMS CMK.
		# Depending on whether the secret is a string or binary, one of these fields will be populated.
		if 'SecretString' in get_secret_value_response:
			secret = get_secret_value_response['SecretString']
			return secret
		else:
			decoded_binary_secret = base64.b64decode(get_secret_value_response['SecretBinary'])
			return decoded_binary_secret