Customer-Support-Bot / feedback_saver.py
nursnaaz's picture
Create feedback_saver.py
a73801c verified
import boto3
from datetime import datetime
from io import StringIO
import pandas as pd
class FeedbackSaverWithPandas:
def __init__(self, aws_access_key_id, aws_secret_access_key):
self.s3_client = boto3.client(
's3',
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key
)
def save_feedback_to_s3(self, question, response, feedback, bucket_name, object_key):
"""Append new feedback data to existing CSV in an S3 bucket and save it back."""
current_df = self._read_current_data_from_s3(bucket_name, object_key)
new_df = pd.DataFrame([{
"Date": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"Question": question,
"Response": response,
"Feedback": feedback
}])
appended_data = pd.concat([current_df, new_df], ignore_index=True)
self._write_data_to_s3(appended_data, bucket_name, object_key)
def _read_current_data_from_s3(self, bucket, key):
"""Read existing CSV from S3 bucket into a pandas DataFrame."""
try:
csv_obj = self.s3_client.get_object(Bucket=bucket, Key=key)
csv_string = csv_obj['Body'].read().decode('utf-8')
return pd.read_csv(StringIO(csv_string))
except self.s3_client.exceptions.NoSuchKey:
# Return an empty DataFrame if the file does not exist
return pd.DataFrame(columns=["Date", "Question", "Response", "Feedback"])
def _write_data_to_s3(self, data_frame, bucket, key):
"""Write DataFrame back to S3 as a CSV."""
csv_buffer = StringIO()
data_frame.to_csv(csv_buffer, index=False)
self.s3_client.put_object(Bucket=bucket, Key=key, Body=csv_buffer.getvalue().encode('utf-8'))