Spaces:
Sleeping
Sleeping
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')) | |