|
4 | 4 | import glob |
5 | 5 | from common.constants import UPLOAD_TYPE, TYPE_FILE, TYPE_MATE_DATA, FILE_NAME_DEFAULT, FILE_SIZE_DEFAULT, MD5_DEFAULT, \ |
6 | 6 | FILE_DIR, FILE_MD5_FIELD, PRE_MANIFEST, FILE_NAME_FIELD, FILE_SIZE_FIELD, FILE_PATH, SUCCEEDED, ERRORS, FILE_ID_DEFAULT,\ |
7 | | - FILE_ID_FIELD, OMIT_DCF_PREFIX, FROM_S3, TEMP_DOWNLOAD_DIR |
| 7 | + FILE_ID_FIELD, OMIT_DCF_PREFIX, FROM_S3, TEMP_DOWNLOAD_DIR, S3_START |
8 | 8 | from common.utils import clean_up_key_value, clean_up_strs, is_valid_uuid |
9 | 9 | from bento.common.utils import get_logger, get_md5 |
10 | 10 | from common.utils import extract_s3_info_from_url |
@@ -56,9 +56,6 @@ def validate(self): |
56 | 56 | self.fileList.append({FILE_NAME_DEFAULT:filename, FILE_PATH: filepath, FILE_SIZE_DEFAULT: size}) |
57 | 57 |
|
58 | 58 | elif self.uploadType == TYPE_FILE: #file |
59 | | - if not os.path.isfile(self.pre_manifest): |
60 | | - self.log.critical(f'manifest file is not valid!') |
61 | | - return False |
62 | 59 | try: |
63 | 60 | return self.validate_size_md5() |
64 | 61 | except Exception as e: |
@@ -155,6 +152,29 @@ def read_manifest(self): |
155 | 152 | files_info = [] |
156 | 153 | files_dict = {} |
157 | 154 | manifest_rows = [] |
| 155 | + is_s3_manifest = self.pre_manifest.startswith(S3_START) |
| 156 | + if is_s3_manifest: |
| 157 | + s3_bucket = None |
| 158 | + bucket_name, key = extract_s3_info_from_url(self.pre_manifest) |
| 159 | + self.download_file_dir = TEMP_DOWNLOAD_DIR |
| 160 | + os.makedirs(self.download_file_dir, exist_ok=True) |
| 161 | + local_manifest = os.path.join(self.download_file_dir, key.split('/')[-1]) |
| 162 | + try: |
| 163 | + s3_bucket = S3Bucket() |
| 164 | + 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!") |
| 167 | + return None |
| 168 | + s3_bucket.download_object(key, local_manifest) |
| 169 | + self.pre_manifest = self.configs[PRE_MANIFEST] = local_manifest |
| 170 | + except Exception as e: |
| 171 | + self.log.debug(e) |
| 172 | + self.log.exception(f"Downloading manifest failed - internal error. Please try again and contact the helpdesk if this error persists.") |
| 173 | + return None |
| 174 | + finally: |
| 175 | + if s3_bucket: |
| 176 | + s3_bucket.close() |
| 177 | + |
158 | 178 | try: |
159 | 179 | with open(self.pre_manifest) as pre_m: |
160 | 180 | reader = csv.DictReader(pre_m, delimiter='\t') |
|
0 commit comments