Commit
·
b4066c5
1
Parent(s):
843932c
Removed other references to boto3 client
Browse files- chatfuncs/aws_functions.py +66 -63
- chatfuncs/config.py +1 -1
chatfuncs/aws_functions.py
CHANGED
@@ -4,17 +4,13 @@ import boto3
|
|
4 |
import tempfile
|
5 |
import os
|
6 |
from chatfuncs.helper_functions import get_or_create_env_var
|
|
|
7 |
|
8 |
PandasDataFrame = Type[pd.DataFrame]
|
9 |
|
10 |
# Get AWS credentials if required
|
11 |
-
bucket_name=
|
12 |
|
13 |
-
RUN_AWS_FUNCTIONS = get_or_create_env_var("RUN_AWS_FUNCTIONS", "0")
|
14 |
-
print(f'The value of RUN_AWS_FUNCTIONS is {RUN_AWS_FUNCTIONS}')
|
15 |
-
|
16 |
-
AWS_REGION = get_or_create_env_var('AWS_REGION', '')
|
17 |
-
print(f'The value of AWS_REGION is {AWS_REGION}')
|
18 |
|
19 |
if RUN_AWS_FUNCTIONS == "1":
|
20 |
try:
|
@@ -49,67 +45,71 @@ if RUN_AWS_FUNCTIONS == "1":
|
|
49 |
# Download direct from S3 - requires login credentials
|
50 |
def download_file_from_s3(bucket_name, key, local_file_path):
|
51 |
|
52 |
-
|
53 |
-
|
54 |
-
|
|
|
|
|
55 |
|
56 |
def download_folder_from_s3(bucket_name, s3_folder, local_folder):
|
57 |
"""
|
58 |
Download all files from an S3 folder to a local folder.
|
59 |
"""
|
60 |
-
|
|
|
61 |
|
62 |
-
|
63 |
-
|
64 |
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
|
71 |
-
|
72 |
-
|
73 |
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
|
81 |
def download_files_from_s3(bucket_name, s3_folder, local_folder, filenames):
|
82 |
"""
|
83 |
Download specific files from an S3 folder to a local folder.
|
84 |
"""
|
85 |
-
|
|
|
86 |
|
87 |
-
|
88 |
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
|
94 |
-
|
95 |
|
96 |
-
|
97 |
|
98 |
-
|
99 |
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
|
104 |
-
|
105 |
-
|
106 |
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
|
114 |
def upload_file_to_s3(local_file_paths:List[str], s3_key:str, s3_bucket:str=bucket_name):
|
115 |
"""
|
@@ -124,30 +124,33 @@ def upload_file_to_s3(local_file_paths:List[str], s3_key:str, s3_bucket:str=buck
|
|
124 |
- Message as variable/printed to console
|
125 |
"""
|
126 |
final_out_message = []
|
|
|
127 |
|
128 |
-
|
129 |
|
130 |
-
|
131 |
-
local_file_paths = [local_file_paths]
|
132 |
|
133 |
-
|
134 |
-
|
135 |
-
# Get file name off file path
|
136 |
-
file_name = os.path.basename(file)
|
137 |
|
138 |
-
|
139 |
-
|
|
|
|
|
140 |
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
|
|
|
|
|
|
148 |
|
149 |
-
|
150 |
-
|
151 |
|
152 |
return final_out_message_str
|
153 |
|
|
|
4 |
import tempfile
|
5 |
import os
|
6 |
from chatfuncs.helper_functions import get_or_create_env_var
|
7 |
+
from chatfuncs.config import AWS_REGION, RUN_AWS_FUNCTIONS, QA_CHATBOT_BUCKET
|
8 |
|
9 |
PandasDataFrame = Type[pd.DataFrame]
|
10 |
|
11 |
# Get AWS credentials if required
|
12 |
+
bucket_name=QA_CHATBOT_BUCKET
|
13 |
|
|
|
|
|
|
|
|
|
|
|
14 |
|
15 |
if RUN_AWS_FUNCTIONS == "1":
|
16 |
try:
|
|
|
45 |
# Download direct from S3 - requires login credentials
|
46 |
def download_file_from_s3(bucket_name, key, local_file_path):
|
47 |
|
48 |
+
if RUN_AWS_FUNCTIONS == "1":
|
49 |
+
|
50 |
+
s3 = boto3.client('s3')
|
51 |
+
s3.download_file(bucket_name, key, local_file_path)
|
52 |
+
print(f"File downloaded from S3: s3://{bucket_name}/{key} to {local_file_path}")
|
53 |
|
54 |
def download_folder_from_s3(bucket_name, s3_folder, local_folder):
|
55 |
"""
|
56 |
Download all files from an S3 folder to a local folder.
|
57 |
"""
|
58 |
+
if RUN_AWS_FUNCTIONS == "1":
|
59 |
+
s3 = boto3.client('s3')
|
60 |
|
61 |
+
# List objects in the specified S3 folder
|
62 |
+
response = s3.list_objects_v2(Bucket=bucket_name, Prefix=s3_folder)
|
63 |
|
64 |
+
# Download each object
|
65 |
+
for obj in response.get('Contents', []):
|
66 |
+
# Extract object key and construct local file path
|
67 |
+
object_key = obj['Key']
|
68 |
+
local_file_path = os.path.join(local_folder, os.path.relpath(object_key, s3_folder))
|
69 |
|
70 |
+
# Create directories if necessary
|
71 |
+
os.makedirs(os.path.dirname(local_file_path), exist_ok=True)
|
72 |
|
73 |
+
# Download the object
|
74 |
+
try:
|
75 |
+
s3.download_file(bucket_name, object_key, local_file_path)
|
76 |
+
print(f"Downloaded 's3://{bucket_name}/{object_key}' to '{local_file_path}'")
|
77 |
+
except Exception as e:
|
78 |
+
print(f"Error downloading 's3://{bucket_name}/{object_key}':", e)
|
79 |
|
80 |
def download_files_from_s3(bucket_name, s3_folder, local_folder, filenames):
|
81 |
"""
|
82 |
Download specific files from an S3 folder to a local folder.
|
83 |
"""
|
84 |
+
if RUN_AWS_FUNCTIONS == "1":
|
85 |
+
s3 = boto3.client('s3')
|
86 |
|
87 |
+
print("Trying to download file: ", filenames)
|
88 |
|
89 |
+
if filenames == '*':
|
90 |
+
# List all objects in the S3 folder
|
91 |
+
print("Trying to download all files in AWS folder: ", s3_folder)
|
92 |
+
response = s3.list_objects_v2(Bucket=bucket_name, Prefix=s3_folder)
|
93 |
|
94 |
+
print("Found files in AWS folder: ", response.get('Contents', []))
|
95 |
|
96 |
+
filenames = [obj['Key'].split('/')[-1] for obj in response.get('Contents', [])]
|
97 |
|
98 |
+
print("Found filenames in AWS folder: ", filenames)
|
99 |
|
100 |
+
for filename in filenames:
|
101 |
+
object_key = os.path.join(s3_folder, filename)
|
102 |
+
local_file_path = os.path.join(local_folder, filename)
|
103 |
|
104 |
+
# Create directories if necessary
|
105 |
+
os.makedirs(os.path.dirname(local_file_path), exist_ok=True)
|
106 |
|
107 |
+
# Download the object
|
108 |
+
try:
|
109 |
+
s3.download_file(bucket_name, object_key, local_file_path)
|
110 |
+
print(f"Downloaded 's3://{bucket_name}/{object_key}' to '{local_file_path}'")
|
111 |
+
except Exception as e:
|
112 |
+
print(f"Error downloading 's3://{bucket_name}/{object_key}':", e)
|
113 |
|
114 |
def upload_file_to_s3(local_file_paths:List[str], s3_key:str, s3_bucket:str=bucket_name):
|
115 |
"""
|
|
|
124 |
- Message as variable/printed to console
|
125 |
"""
|
126 |
final_out_message = []
|
127 |
+
final_out_message_str = ""
|
128 |
|
129 |
+
if RUN_AWS_FUNCTIONS == "1":
|
130 |
|
131 |
+
s3_client = boto3.client('s3')
|
|
|
132 |
|
133 |
+
if isinstance(local_file_paths, str):
|
134 |
+
local_file_paths = [local_file_paths]
|
|
|
|
|
135 |
|
136 |
+
for file in local_file_paths:
|
137 |
+
try:
|
138 |
+
# Get file name off file path
|
139 |
+
file_name = os.path.basename(file)
|
140 |
|
141 |
+
s3_key_full = s3_key + file_name
|
142 |
+
print("S3 key: ", s3_key_full)
|
143 |
+
|
144 |
+
s3_client.upload_file(file, s3_bucket, s3_key_full)
|
145 |
+
out_message = "File " + file_name + " uploaded successfully!"
|
146 |
+
print(out_message)
|
147 |
+
|
148 |
+
except Exception as e:
|
149 |
+
out_message = f"Error uploading file(s): {e}"
|
150 |
+
print(out_message)
|
151 |
|
152 |
+
final_out_message.append(out_message)
|
153 |
+
final_out_message_str = '\n'.join(final_out_message)
|
154 |
|
155 |
return final_out_message_str
|
156 |
|
chatfuncs/config.py
CHANGED
@@ -107,7 +107,7 @@ if AWS_ACCESS_KEY: print(f'AWS_ACCESS_KEY found in environment variables')
|
|
107 |
AWS_SECRET_KEY = get_or_create_env_var('AWS_SECRET_KEY', '')
|
108 |
if AWS_SECRET_KEY: print(f'AWS_SECRET_KEY found in environment variables')
|
109 |
|
110 |
-
|
111 |
|
112 |
# Custom headers e.g. if routing traffic through Cloudfront
|
113 |
# Retrieving or setting CUSTOM_HEADER
|
|
|
107 |
AWS_SECRET_KEY = get_or_create_env_var('AWS_SECRET_KEY', '')
|
108 |
if AWS_SECRET_KEY: print(f'AWS_SECRET_KEY found in environment variables')
|
109 |
|
110 |
+
QA_CHATBOT_BUCKET = get_or_create_env_var('QA_CHATBOT_BUCKET', '')
|
111 |
|
112 |
# Custom headers e.g. if routing traffic through Cloudfront
|
113 |
# Retrieving or setting CUSTOM_HEADER
|