Skip to content

Commit 0529444

Browse files
committed
Merge pull request #2 from dclark87/master
Added md5 checking before uploading to S3
2 parents a8f8006 + f6cfad7 commit 0529444

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

nipype/interfaces/io.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -544,9 +544,12 @@ def _upload_to_s3(self, src, dst):
544544
'''
545545

546546
# Import packages
547+
import hashlib
547548
import logging
548549
import os
549550

551+
from botocore.exceptions import ClientError
552+
550553
# Init variables
551554
bucket = self.bucket
552555
iflogger = logging.getLogger('interface')
@@ -571,8 +574,26 @@ def _upload_to_s3(self, src, dst):
571574
dst_f = dst_files[src_idx]
572575
dst_k = dst_f.replace(s3_prefix, '').lstrip('/')
573576

577+
# See if same file is already up there
578+
try:
579+
dst_obj = bucket.Object(key=dst_k)
580+
dst_md5 = dst_obj.e_tag.strip('"')
581+
582+
# See if same file is already there
583+
src_read = open(src_f, 'rb').read()
584+
src_md5 = hashlib.md5(src_read).hexdigest()
585+
# Move to next loop iteration
586+
if dst_md5 == src_md5:
587+
iflogger.info('File %s already exists on S3, skipping...' % dst_f)
588+
continue
589+
else:
590+
iflogger.info('Overwriting previous S3 file...')
591+
592+
except ClientError as exc:
593+
iflogger.info('New file to S3')
594+
574595
# Copy file up to S3 (either encrypted or not)
575-
iflogger.info('Copying %s to S3 bucket, %s, as %s...'\
596+
iflogger.info('Uploading %s to S3 bucket, %s, as %s...'\
576597
% (src_f, bucket.name, dst_f))
577598
if self.inputs.encrypt_bucket_keys:
578599
extra_args = {'ServerSideEncryption' : 'AES256'}

0 commit comments

Comments
 (0)