Spaces:
Sleeping
Sleeping
Create feedback_saver.py
Browse files- feedback_saver.py +40 -0
feedback_saver.py
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import boto3
|
2 |
+
from datetime import datetime
|
3 |
+
from io import StringIO
|
4 |
+
import pandas as pd
|
5 |
+
|
6 |
+
class FeedbackSaverWithPandas:
|
7 |
+
def __init__(self, aws_access_key_id, aws_secret_access_key):
|
8 |
+
self.s3_client = boto3.client(
|
9 |
+
's3',
|
10 |
+
aws_access_key_id=aws_access_key_id,
|
11 |
+
aws_secret_access_key=aws_secret_access_key
|
12 |
+
)
|
13 |
+
|
14 |
+
def save_feedback_to_s3(self, question, response, feedback, bucket_name, object_key):
|
15 |
+
"""Append new feedback data to existing CSV in an S3 bucket and save it back."""
|
16 |
+
current_df = self._read_current_data_from_s3(bucket_name, object_key)
|
17 |
+
new_df = pd.DataFrame([{
|
18 |
+
"Date": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
19 |
+
"Question": question,
|
20 |
+
"Response": response,
|
21 |
+
"Feedback": feedback
|
22 |
+
}])
|
23 |
+
appended_data = pd.concat([current_df, new_df], ignore_index=True)
|
24 |
+
self._write_data_to_s3(appended_data, bucket_name, object_key)
|
25 |
+
|
26 |
+
def _read_current_data_from_s3(self, bucket, key):
|
27 |
+
"""Read existing CSV from S3 bucket into a pandas DataFrame."""
|
28 |
+
try:
|
29 |
+
csv_obj = self.s3_client.get_object(Bucket=bucket, Key=key)
|
30 |
+
csv_string = csv_obj['Body'].read().decode('utf-8')
|
31 |
+
return pd.read_csv(StringIO(csv_string))
|
32 |
+
except self.s3_client.exceptions.NoSuchKey:
|
33 |
+
# Return an empty DataFrame if the file does not exist
|
34 |
+
return pd.DataFrame(columns=["Date", "Question", "Response", "Feedback"])
|
35 |
+
|
36 |
+
def _write_data_to_s3(self, data_frame, bucket, key):
|
37 |
+
"""Write DataFrame back to S3 as a CSV."""
|
38 |
+
csv_buffer = StringIO()
|
39 |
+
data_frame.to_csv(csv_buffer, index=False)
|
40 |
+
self.s3_client.put_object(Bucket=bucket, Key=key, Body=csv_buffer.getvalue().encode('utf-8'))
|