in atomresponder/s3_mixin.py [0:0]
def download_to_local_location(self, bucket=None, key=None, filename=None, retries=10, retry_delay=2):
"""
Downloads the content from the bucket to a location given by the settings
:param bucket:
:param key:
:param filename: file name to download to. If None, then the basename of key is used
:return: filepath that has been downloaded
"""
import traceback
logger.info("Downloading from s3://{0}/{1} to {2}".format(bucket, key, filename))
dest_path = self.get_download_filename(key, overridden_name=filename)
conn = self.get_s3_connection()
bucketref = conn.get_bucket(bucket)
keyref = bucketref.get_key(key)
if keyref is None:
raise FileDoesNotExist(bucket, key)
n=0
while True:
logger.info("Downloading {0}/{1} to {2}, attempt {3}...".format(bucket, key, dest_path,n))
try:
with open(dest_path, "wb") as f:
keyref.get_contents_to_file(f)
logger.info("Completed downloading {0}/{1}".format(bucket,key))
return dest_path
except Exception as e:
#if something goes wrong, log it and retry
logger.error(str(e))
logger.error(traceback.format_exc())
time.sleep(retry_delay)
n+=1
if n>retries:
raise