diff env/bin/glacier @ 0:26e78fe6e8c4 draft

"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author shellac
date Sat, 02 May 2020 07:14:21 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/bin/glacier	Sat May 02 07:14:21 2020 -0400
@@ -0,0 +1,161 @@
+#!/Users/pldms/Development/Projects/2020/david-matthews-galaxy/guppy_basecaller/env/bin/python3
+# -*- 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, basename
+
+
+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 """
+    layer2 = connect_to_region(region,
+                               aws_access_key_id=access_key,
+                               aws_secret_access_key=secret_key,
+                               debug=debug_level)
+    if layer2 is None:
+        print('Invalid region (%s)' % region)
+        sys.exit(1)
+    return layer2
+
+
+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):
+            sys.stdout.write('Uploading %s to %s...' % (filename, vault_name))
+            sys.stdout.flush()
+            archive_id = glacier_vault.upload_archive(
+                filename,
+                description = basename(filename))
+            print(' done. Vault returned ArchiveID %s' % archive_id)
+
+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 as 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()