mirror of
				https://github.com/opennetworkinglab/onos.git
				synced 2025-11-04 02:01:11 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env 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( filename, dest=None, bucket=None, overwrite=False ):
 | 
						|
    "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
 | 
						|
    if overwrite or not k.exists():
 | 
						|
        k.set_contents_from_filename( filename, cb=callback, num_cb=100 )
 | 
						|
        print
 | 
						|
        elapsed = time() - start
 | 
						|
        print "* elapsed time: %.2f seconds" % elapsed
 | 
						|
    else:
 | 
						|
        print 'file', basename( filename ), 'already exists in', bucket.name
 | 
						|
 | 
						|
def testAccess( bucket=None ):
 | 
						|
    "Verify access to a bucket"
 | 
						|
    if not bucket:
 | 
						|
        bucket = 'onos'
 | 
						|
 | 
						|
    conn = S3Connection()
 | 
						|
    bucket = conn.get_bucket( bucket )
 | 
						|
    print bucket.get_acl()
 | 
						|
 | 
						|
 | 
						|
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")
 | 
						|
    parser.add_option("-f", "--force", dest="overwrite",
 | 
						|
                      help="Overwrite existing file")
 | 
						|
    parser.add_option("-v", "--verify", dest="verify",  action="store_true",
 | 
						|
                      help="Verify access to a bucket")
 | 
						|
    (options, args) = parser.parse_args()
 | 
						|
 | 
						|
    if options.verify:
 | 
						|
        testAccess(options.bucket)
 | 
						|
        exit()
 | 
						|
 | 
						|
    if len( args ) == 0:
 | 
						|
        parser.error("missing filenames")
 | 
						|
    for file in args:
 | 
						|
        uploadFile( file, options.dest, options.bucket, options.overwrite )
 | 
						|
 | 
						|
    #FIXME key and secret are unused
 |