nursnaaz commited on
Commit
a73801c
1 Parent(s): ca61fe7

Create feedback_saver.py

Browse files
Files changed (1) hide show
  1. 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'))