from botocore import exceptions from copy_auth0_logs_to_cloudwatch.boto import session as boto_session from copy_auth0_logs_to_cloudwatch import config, constants def _get_key(key: str) -> str: """Compose a Redis key. Args: key (str): Key. Returns: str: Complete key constructed by concatenated prefix + key. """ return f'{config.ENVIRONMENT}/{constants.APP_NAME}/{key}' def get(key: str, default_value: str or None = None) -> str or None: """Get value from S3. Args: key (str): S3 path. default_value (str or None): Return if key is not found. Returns: str or None: Value or None if not found. """ s3_client = boto_session.client('s3') try: obj = s3_client.get_object(Bucket=config.AWS_S3_BUCKET_LOG_ID, Key=_get_key(key)) value = obj['Body'].read().decode('utf-8') return value except exceptions.ClientError as e: error_code = e.response['Error']['Code'] if error_code == 'NoSuchKey': return default_value else: raise def set(key: str, value: str): """Set value to S3. Args: key (str): S3 path. value (str): Value to save. """ s3_client = boto_session.client('s3') s3_client.put_object(Body=value, Bucket=config.AWS_S3_BUCKET_LOG_ID, Key=_get_key(key))