#!/usr/bin/python

"""
Upload a file to S3
"""

from sys import argv, stdout
from time import time
from os.path import basename
from optparse import OptionParser

from boto.s3.key import Key
from boto.s3.connection import S3Connection


def uploadFile( bucket, filename, dest=None ):
    "Upload a file to a bucket"
    if not bucket:
        bucket = 'onos'
    if not dest: 
        key = basename( filename )
    else:
        key = dest + basename( filename ) #FIXME add the /
    print '* Uploading', filename, 'to bucket', bucket, 'as', key
    stdout.flush()
    start = time()
    def callback( transmitted, size ):
        "Progress callback for set_contents_from_filename"
        elapsed = time() - start
        percent = 100.0 * transmitted / size
        kbps = .001 * transmitted / elapsed
        print ( '\r%d bytes transmitted of %d (%.2f%%),'
                ' %.2f KB/sec ' %
                ( transmitted, size, percent, kbps ) ),
        stdout.flush()
    conn = S3Connection()
    bucket = conn.get_bucket( bucket )
    k = Key( bucket )
    k.key = key
    k.set_contents_from_filename( filename, cb=callback, num_cb=100 )
    print
    elapsed = time() - start
    print "* elapsed time: %.2f seconds" % elapsed

if __name__ == '__main__':
    usage = "Usage: %prog [options] <file to upload>"
    parser = OptionParser(usage=usage)
    parser.add_option("-b", "--bucket", dest="bucket",
                      help="Bucket on S3")
    parser.add_option("-d", "--dest", dest="dest",
                      help="Destination path in bucket")
    parser.add_option("-k", "--key", dest="awsKey",
                      help="Bucket on S3")
    parser.add_option("-s", "--secret", dest="awsSecret",
                      help="Bucket on S3")
    (options, args) = parser.parse_args()
    
    if len( args ) == 0:
        parser.error("missing filenames")
    for file in args:
        uploadFile( options.bucket, file, options.dest )

    #FIXME key and secret are unused
