@@ -67,6 +67,19 @@ def populate_vector_db() -> None:
6767 local_folder
6868 ), f"Local folder { local_folder } should exist with manually downloaded files from S3"
6969 else :
70+ try :
71+ # Try to create the local folder to make sure we have write permissions
72+ os .makedirs (local_folder , exist_ok = True )
73+ except PermissionError as e :
74+ logger .error ("Error creating directory for %s: %s" , local_folder , e )
75+ fallback_folder = f"/tmp/{ local_folder } " # nosec B108
76+ try :
77+ os .makedirs (fallback_folder , exist_ok = True )
78+ except OSError as e2 :
79+ logger .error ("Error creating fallback directory for %s: %s" , fallback_folder , e2 )
80+ raise
81+ local_folder = fallback_folder
82+
7083 s3 = file_util .get_s3_client ()
7184 bucket = os .environ .get ("BUCKET_NAME" , f"labs-referral-pilot-app-{ config .environment } " )
7285
@@ -75,7 +88,7 @@ def populate_vector_db() -> None:
7588 logger .info ("Region subfolders in S3: %s" , s3_subfolders )
7689 # Exclude certain regions if needed
7790 for s3_folder in s3_subfolders .values ():
78- download_s3_folder_to_local (s3 , bucket , s3_folder )
91+ download_s3_folder_to_local (s3 , bucket , s3_folder , local_folder )
7992
8093 region_subfolders = {
8194 entry .name : entry .path for entry in os .scandir (local_folder ) if entry .is_dir ()
@@ -114,15 +127,10 @@ def get_s3_subfolders(s3: BaseClient, bucket: str, s3_folder: str) -> dict[str,
114127 return subfolders
115128
116129
117- def download_s3_folder_to_local (s3 : BaseClient , bucket : str , s3_folder : str ) -> str :
130+ def download_s3_folder_to_local (
131+ s3 : BaseClient , bucket : str , s3_folder : str , local_folder : str
132+ ) -> str :
118133 """Download the contents of a folder directory from S3 to a local folder."""
119- try :
120- local_folder = s3_folder
121- os .makedirs (local_folder , exist_ok = True )
122- except PermissionError as e :
123- logger .error ("Error creating directories for %s: %s" , s3_folder , e )
124- local_folder = f"/tmp/{ s3_folder } " # nosec B108
125-
126134 logger .info ("Downloading s3://%s/%s to local folder %s" , bucket , s3_folder , local_folder )
127135 paginator = s3 .get_paginator ("list_objects_v2" )
128136 try :
0 commit comments