Skip to content

Commit 711831b

Browse files
authored
fix: handle PermissionError for local_folder (#174)
1 parent 7ebe54c commit 711831b

1 file changed

Lines changed: 17 additions & 9 deletions

File tree

app/src/ingestion/rag_utils.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)