| Index: third_party/gsutil/boto/bin/glacier | 
| diff --git a/third_party/gsutil/boto/bin/glacier b/third_party/gsutil/boto/bin/glacier | 
| new file mode 100755 | 
| index 0000000000000000000000000000000000000000..bd28adf61550a20842c8035f2d8eba4abafb851f | 
| --- /dev/null | 
| +++ b/third_party/gsutil/boto/bin/glacier | 
| @@ -0,0 +1,154 @@ | 
| +#!/usr/bin/env python | 
| +# -*- coding: utf-8 -*- | 
| +# Copyright (c) 2012 Miguel Olivares http://moliware.com/ | 
| +# | 
| +# Permission is hereby granted, free of charge, to any person obtaining a | 
| +# copy of this software and associated documentation files (the | 
| +# "Software"), to deal in the Software without restriction, including | 
| +# without limitation the rights to use, copy, modify, merge, publish, dis- | 
| +# tribute, sublicense, and/or sell copies of the Software, and to permit | 
| +# persons to whom the Software is furnished to do so, subject to the fol- | 
| +# lowing conditions: | 
| +# | 
| +# The above copyright notice and this permission notice shall be included | 
| +# in all copies or substantial portions of the Software. | 
| +# | 
| +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | 
| +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- | 
| +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT | 
| +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | 
| +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 
| +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | 
| +# IN THE SOFTWARE. | 
| +# | 
| +""" | 
| +  glacier | 
| +  ~~~~~~~ | 
| + | 
| +    Amazon Glacier tool built on top of boto. Look at the usage method to see | 
| +    how to use it. | 
| + | 
| +    Author: Miguel Olivares <miguel@moliware.com> | 
| +""" | 
| +import sys | 
| + | 
| +from boto.glacier import connect_to_region | 
| +from getopt import getopt, GetoptError | 
| +from os.path import isfile | 
| + | 
| + | 
| +COMMANDS = ('vaults', 'jobs', 'upload') | 
| + | 
| + | 
| +def usage(): | 
| +    print """ | 
| +glacier <command> [args] | 
| + | 
| +    Commands | 
| +        vaults    - Operations with vaults | 
| +        jobs      - Operations with jobs | 
| +        upload    - Upload files to a vault. If the vault doesn't exits, it is | 
| +                    created | 
| + | 
| +    Common args: | 
| +        --access_key - Your AWS Access Key ID.  If not supplied, boto will | 
| +                       use the value of the environment variable | 
| +                       AWS_ACCESS_KEY_ID | 
| +        --secret_key - Your AWS Secret Access Key.  If not supplied, boto | 
| +                       will use the value of the environment variable | 
| +                       AWS_SECRET_ACCESS_KEY | 
| +        --region     - AWS region to use. Possible values: us-east-1, us-west-1, | 
| +                       us-west-2, ap-northeast-1, eu-west-1. | 
| +                       Default: us-east-1 | 
| + | 
| +    Vaults operations: | 
| + | 
| +        List vaults: | 
| +            glacier vaults | 
| + | 
| +    Jobs operations: | 
| + | 
| +        List jobs: | 
| +            glacier jobs <vault name> | 
| + | 
| +    Uploading files: | 
| + | 
| +        glacier upload <vault name> <files> | 
| + | 
| +        Examples : | 
| +            glacier upload pics *.jpg | 
| +            glacier upload pics a.jpg b.jpg | 
| +""" | 
| +    sys.exit() | 
| + | 
| + | 
| +def connect(region, debug_level=0, access_key=None, secret_key=None): | 
| +    """ Connect to a specific region """ | 
| +    return connect_to_region(region, | 
| +                             aws_access_key_id=access_key, | 
| +                             aws_secret_access_key=secret_key, | 
| +                             debug=debug_level) | 
| + | 
| + | 
| +def list_vaults(region, access_key=None, secret_key=None): | 
| +    layer2 = connect(region, access_key = access_key, secret_key = secret_key) | 
| +    for vault in layer2.list_vaults(): | 
| +        print vault.arn | 
| + | 
| + | 
| +def list_jobs(vault_name, region, access_key=None, secret_key=None): | 
| +    layer2 = connect(region, access_key = access_key, secret_key = secret_key) | 
| +    print layer2.layer1.list_jobs(vault_name) | 
| + | 
| + | 
| +def upload_files(vault_name, filenames, region, access_key=None, secret_key=None): | 
| +    layer2 = connect(region, access_key = access_key, secret_key = secret_key) | 
| +    layer2.create_vault(vault_name) | 
| +    glacier_vault = layer2.get_vault(vault_name) | 
| +    for filename in filenames: | 
| +        if isfile(filename): | 
| +            print 'Uploading %s to %s' % (filename, vault_name) | 
| +            glacier_vault.upload_archive(filename) | 
| + | 
| + | 
| +def main(): | 
| +    if len(sys.argv) < 2: | 
| +        usage() | 
| + | 
| +    command = sys.argv[1] | 
| +    if command not in COMMANDS: | 
| +        usage() | 
| + | 
| +    argv = sys.argv[2:] | 
| +    options = 'a:s:r:' | 
| +    long_options = ['access_key=', 'secret_key=', 'region='] | 
| +    try: | 
| +        opts, args = getopt(argv, options, long_options) | 
| +    except GetoptError, e: | 
| +        usage() | 
| + | 
| +    # Parse agument | 
| +    access_key = secret_key = None | 
| +    region = 'us-east-1' | 
| +    for option, value in opts: | 
| +        if option in ('-a', '--access_key'): | 
| +            access_key = value | 
| +        elif option in ('-s', '--secret_key'): | 
| +            secret_key = value | 
| +        elif option in ('-r', '--region'): | 
| +            region = value | 
| +    # handle each command | 
| +    if command == 'vaults': | 
| +        list_vaults(region, access_key, secret_key) | 
| +    elif command == 'jobs': | 
| +        if len(args) != 1: | 
| +            usage() | 
| +        list_jobs(args[0], region, access_key, secret_key) | 
| +    elif command == 'upload': | 
| +        if len(args) < 2: | 
| +            usage() | 
| +        upload_files(args[0], args[1:], region, access_key, secret_key) | 
| + | 
| + | 
| +if __name__ == '__main__': | 
| +    main() | 
|  |