Skip to content

Instantly share code, notes, and snippets.

@lwille
Created November 11, 2012 17:55
Show Gist options
  • Save lwille/4055698 to your computer and use it in GitHub Desktop.
Save lwille/4055698 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
import os, sys
try:
import boto.s3
from boto.s3.key import Key
Key.change_storage_class
except ImportError, e:
sys.stderr.write('Package boto (svn rev. >= 1595) must be installed.\n')
sys.exit(1)
except AttributeError, e:
sys.stderr.write('Invalid version of boto. Required svn rev. >= 1595.\n')
sys.exit(1)
def convert(bucket_name, aws_id, aws_key):
s3 = boto.connect_s3(aws_id, aws_key)
bucket = s3.lookup(bucket_name)
if not bucket:
sys.stderr.write('Invalid authentication, or bucketname. Try again.\n')
sys.exit(1)
print 'Found bucket: %s' % bucket_name
sys.stdout.write('Converting: ')
sys.stdout.flush()
found = converted = 0
try:
for key in bucket.list():
found += 1
if key.storage_class != 'REDUCED_REDUNDANCY':
key.change_storage_class('REDUCED_REDUNDANCY')
converted += 1
if found % 100 == 0:
sys.stdout.write('.')
sys.stdout.flush()
except KeyboardInterrupt: pass
print '\nConverted %d items out of %d to reduced redundancy storage.' % \
(converted, found)
def main():
def usage(msg=None):
if msg:
sys.stderr.write('<Error>\n%s\n</Error>\n' % msg)
sys.stderr.write(''.join(['Usage: %s bucket [aws_access_key_id ',
'aws_secret_access_key]\n']) % sys.argv[0])
sys.exit(1)
if len(sys.argv) == 2:
bucket = sys.argv[1]
msg = ''
if 'AWS_ACCESS_KEY_ID' in os.environ:
aws_id = os.environ['AWS_ACCESS_KEY_ID']
else:
msg += 'Environment does not contain AWS_ACCESS_KEY_ID.\n'
if 'AWS_SECRET_ACCESS_KEY' in os.environ:
aws_key = os.environ['AWS_SECRET_ACCESS_KEY']
else:
msg += 'Environment does not contain AWS_SECRET_ACCESS_KEY.\n'
if msg:
usage(msg + 'Please set values in environment or pass them in.')
elif len(sys.argv) == 4:
bucket = sys.argv[1]
aws_id = sys.argv[2]
aws_key = sys.argv[3]
else:
usage()
convert(bucket, aws_id, aws_key)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment