Skip to content

Commit 29bb04f

Browse files
authored
Merge pull request #41 from CBIIT/CRDCDH-2050-001-pgu
Crdcdh 2050
2 parents 68b2dcd + b2992ae commit 29bb04f

File tree

4 files changed

+50
-18
lines changed

4 files changed

+50
-18
lines changed

src/common/s3util.py

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,19 @@ def file_exists_on_s3(self, key):
4141
'''
4242
try:
4343
self.client.head_object(Bucket=self.bucket.name, Key=key)
44-
return True
44+
return True, None
4545
except ClientError as e:
46+
msg = None
4647
if e.response['Error']['Code'] in ['404', '412']:
47-
return False
48+
msg = f'File {key} does not exist in the specified S3 bucket path.'
49+
return False, msg
50+
if e.response['Error']['Code'] in ['403']:
51+
msg = f'Access Denied: Unable to access files in the specified S3 bucket path: {key}'
52+
return False, msg
4853
else:
49-
self.log.error('Unknown S3 client error!')
54+
msg = f'Unknown S3 client error!'
5055
self.log.exception(e)
51-
return False
56+
return False, msg
5257

5358
def put_file_obj(self, key, data, md5_base64):
5459
return self.bucket.put_object(Key=key,
@@ -62,23 +67,48 @@ def upload_file_obj(self, key, data, config=None, extra_args={'ACL': BUCKET_OWNE
6267
def get_object_size(self, key):
6368
try:
6469
res = self.client.head_object(Bucket=self.bucket_name, Key=key)
65-
return res['ContentLength']
70+
return res['ContentLength'], None
6671
except ClientError as e:
67-
return None
72+
msg = None
73+
if e.response['Error']['Code'] in ['404', '412']:
74+
msg = f'File {key} does not exist in the specified S3 bucket path.'
75+
return None, msg
76+
if e.response['Error']['Code'] in ['403']:
77+
msg = f'Access Denied: Unable to access files in the specified S3 bucket path: {key}'
78+
return None, msg
79+
else:
80+
msg = f'Unknown S3 client error!'
81+
self.log.exception(e)
82+
return None, msg
6883

6984
def same_size_file_exists(self, key, file_size):
70-
return file_size == self.get_object_size(key)
85+
file_size1, msg = self.get_object_size(key)
86+
if msg:
87+
self.log.error(msg)
88+
return False
89+
return file_size == file_size1
7190

7291
def download_object(self, key, local_file_path):
7392
try:
7493
self.bucket.download_file( key, local_file_path)
75-
return True
94+
return True, None
7695
except ClientError as ce:
77-
self.log.error(ce)
78-
return False
96+
msg = None
97+
if e.response['Error']['Code'] in ['404', '412']:
98+
msg = f'File {key} does not exist in the specified S3 bucket path.'
99+
return False, msg
100+
if e.response['Error']['Code'] in ['403']:
101+
msg = f'Access Denied: Unable to access files in the specified S3 bucket path: {key}'
102+
return False, msg
103+
else:
104+
msg = f'Unknown S3 client error!'
105+
self.log.exception(e)
106+
return False, msg
79107
except Exception as e:
108+
#
109+
msg = f'Unknown error!'
80110
self.log.error(e)
81-
return False
111+
return False,
82112

83113
def close(self):
84114
self.client.close()

src/copier.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def copy_file(self, file_info, overwrite, dryrun):
103103
file_info[SKIPPED] = False
104104
#self.log.info(f'Copying from {org_url} to s3://{self.bucket_name}/{key.strip("/")} ...')
105105
self.log.info(f'Copying from {org_url} to destination folder in S3 bucket ...')
106-
dest_size = self._upload_obj(org_url, key, org_size)
106+
dest_size, msg = self._upload_obj(org_url, key, org_size)
107107
if dest_size != org_size:
108108
self.log.error(f'Uploading “{file_name}” failed - uploading was not complete. Please try again and contact the helpdesk if this error persists.')
109109
return {self.STATUS: False}

src/file_uploader.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,9 @@ def upload(self):
8484
file_info = job[self.INFO]
8585
file_path = file_info[FILE_PATH]
8686
if self.from_s3 == True: #download file from s3
87-
if not self.s3_bucket.download_object(os.path.join(self.from_prefix, file_info[FILE_NAME_DEFAULT]), file_path):
88-
invalid_reason = f"Failed to download {file_info[FILE_NAME_DEFAULT]} from {self.file_dir}!"
87+
result, msg = self.s3_bucket.download_object(os.path.join(self.from_prefix, file_info[FILE_NAME_DEFAULT]), file_path)
88+
if not result:
89+
invalid_reason = msg
8990
file_info[SUCCEEDED] = False
9091
file_info[ERRORS] = [invalid_reason]
9192
self.invalid_count += 1

src/file_validator.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,9 @@ def validate_size_md5(self):
119119
self.log.error(invalid_reason)
120120
continue
121121
else: # check file existing and validate file size in s3 bucket
122-
s3_file_size = self.s3_bucket.get_object_size(os.path.join(self.from_prefix, info[FILE_NAME_DEFAULT]))
122+
s3_file_size, msg = self.s3_bucket.get_object_size(os.path.join(self.from_prefix, info[FILE_NAME_DEFAULT]))
123123
if not s3_file_size:
124-
invalid_reason += f"File {info[FILE_NAME_DEFAULT]} does not exist in {self.file_dir}!"
124+
invalid_reason += msg
125125
self.fileList.append({FILE_ID_DEFAULT: file_id, FILE_NAME_DEFAULT: info.get(FILE_NAME_DEFAULT), FILE_PATH: file_path, FILE_SIZE_DEFAULT: size_info, MD5_DEFAULT: info[MD5_DEFAULT], SUCCEEDED: False, ERRORS: [invalid_reason]})
126126
self.invalid_count += 1
127127
self.log.error(invalid_reason)
@@ -162,8 +162,9 @@ def read_manifest(self):
162162
try:
163163
s3_bucket = S3Bucket()
164164
s3_bucket.set_s3_client(bucket_name, None)
165-
if s3_bucket.file_exists_on_s3(key) == False:
166-
self.log.critical(f"Manifest file {self.pre_manifest} does not exist!")
165+
result, msg = s3_bucket.file_exists_on_s3(key)
166+
if result == False:
167+
self.log.critical(msg)
167168
return None
168169
s3_bucket.download_object(key, local_manifest)
169170
self.pre_manifest = self.configs[PRE_MANIFEST] = local_manifest

0 commit comments

Comments
 (0)