diff env/lib/python3.7/site-packages/boto/roboto/awsqueryrequest.py @ 5:9b1c78e6ba9c draft default tip

"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author shellac
date Mon, 01 Jun 2020 08:59:25 -0400
parents 79f47841a781
children
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/boto/roboto/awsqueryrequest.py	Thu May 14 16:47:39 2020 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,503 +0,0 @@
-# Copyright (c) 2010 Mitch Garnaat http://garnaat.org/
-# Copyright (c) 2010, Eucalyptus Systems, Inc.
-#
-# 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.
-import sys
-import os
-import boto
-import optparse
-import copy
-import boto.exception
-import boto.roboto.awsqueryservice
-
-import bdb
-import traceback
-try:
-    import epdb as debugger
-except ImportError:
-    import pdb as debugger
-
-def boto_except_hook(debugger_flag, debug_flag):
-    def excepthook(typ, value, tb):
-        if typ is bdb.BdbQuit:
-            sys.exit(1)
-        sys.excepthook = sys.__excepthook__
-
-        if debugger_flag and sys.stdout.isatty() and sys.stdin.isatty():
-            if debugger.__name__ == 'epdb':
-                debugger.post_mortem(tb, typ, value)
-            else:
-                debugger.post_mortem(tb)
-        elif debug_flag:
-            print(traceback.print_tb(tb))
-            sys.exit(1)
-        else:
-            print(value)
-            sys.exit(1)
-
-    return excepthook
-
-class Line(object):
-
-    def __init__(self, fmt, data, label):
-        self.fmt = fmt
-        self.data = data
-        self.label = label
-        self.line = '%s\t' % label
-        self.printed = False
-
-    def append(self, datum):
-        self.line += '%s\t' % datum
-
-    def print_it(self):
-        if not self.printed:
-            print(self.line)
-            self.printed = True
-
-class RequiredParamError(boto.exception.BotoClientError):
-
-    def __init__(self, required):
-        self.required = required
-        s = 'Required parameters are missing: %s' % self.required
-        super(RequiredParamError, self).__init__(s)
-
-class EncoderError(boto.exception.BotoClientError):
-
-    def __init__(self, error_msg):
-        s = 'Error encoding value (%s)' % error_msg
-        super(EncoderError, self).__init__(s)
-
-class FilterError(boto.exception.BotoClientError):
-
-    def __init__(self, filters):
-        self.filters = filters
-        s = 'Unknown filters: %s' % self.filters
-        super(FilterError, self).__init__(s)
-
-class Encoder(object):
-
-    @classmethod
-    def encode(cls, p, rp, v, label=None):
-        if p.name.startswith('_'):
-            return
-        try:
-            mthd = getattr(cls, 'encode_'+p.ptype)
-            mthd(p, rp, v, label)
-        except AttributeError:
-            raise EncoderError('Unknown type: %s' % p.ptype)
-
-    @classmethod
-    def encode_string(cls, p, rp, v, l):
-        if l:
-            label = l
-        else:
-            label = p.name
-        rp[label] = v
-
-    encode_file = encode_string
-    encode_enum = encode_string
-
-    @classmethod
-    def encode_integer(cls, p, rp, v, l):
-        if l:
-            label = l
-        else:
-            label = p.name
-        rp[label] = '%d' % v
-
-    @classmethod
-    def encode_boolean(cls, p, rp, v, l):
-        if l:
-            label = l
-        else:
-            label = p.name
-        if v:
-            v = 'true'
-        else:
-            v = 'false'
-        rp[label] = v
-
-    @classmethod
-    def encode_datetime(cls, p, rp, v, l):
-        if l:
-            label = l
-        else:
-            label = p.name
-        rp[label] = v
-
-    @classmethod
-    def encode_array(cls, p, rp, v, l):
-        v = boto.utils.mklist(v)
-        if l:
-            label = l
-        else:
-            label = p.name
-        label = label + '.%d'
-        for i, value in enumerate(v):
-            rp[label%(i+1)] = value
-
-class AWSQueryRequest(object):
-
-    ServiceClass = None
-
-    Description = ''
-    Params = []
-    Args = []
-    Filters = []
-    Response = {}
-
-    CLITypeMap = {'string' : 'string',
-                  'integer' : 'int',
-                  'int' : 'int',
-                  'enum' : 'choice',
-                  'datetime' : 'string',
-                  'dateTime' : 'string',
-                  'file' : 'string',
-                  'boolean' : None}
-
-    @classmethod
-    def name(cls):
-        return cls.__name__
-
-    def __init__(self, **args):
-        self.args = args
-        self.parser = None
-        self.cli_options = None
-        self.cli_args = None
-        self.cli_output_format = None
-        self.connection = None
-        self.list_markers = []
-        self.item_markers = []
-        self.request_params = {}
-        self.connection_args = None
-
-    def __repr__(self):
-        return self.name()
-
-    def get_connection(self, **args):
-        if self.connection is None:
-            self.connection = self.ServiceClass(**args)
-        return self.connection
-
-    @property
-    def status(self):
-        retval = None
-        if self.http_response is not None:
-            retval = self.http_response.status
-        return retval
-
-    @property
-    def reason(self):
-        retval = None
-        if self.http_response is not None:
-            retval = self.http_response.reason
-        return retval
-
-    @property
-    def request_id(self):
-        retval = None
-        if self.aws_response is not None:
-            retval = getattr(self.aws_response, 'requestId')
-        return retval
-
-    def process_filters(self):
-        filters = self.args.get('filters', [])
-        filter_names = [f['name'] for f in self.Filters]
-        unknown_filters = [f for f in filters if f not in filter_names]
-        if unknown_filters:
-            raise FilterError('Unknown filters: %s' % unknown_filters)
-        for i, filter in enumerate(self.Filters):
-            name = filter['name']
-            if name in filters:
-                self.request_params['Filter.%d.Name' % (i+1)] = name
-                for j, value in enumerate(boto.utils.mklist(filters[name])):
-                    Encoder.encode(filter, self.request_params, value,
-                                   'Filter.%d.Value.%d' % (i+1, j+1))
-
-    def process_args(self, **args):
-        """
-        Responsible for walking through Params defined for the request and:
-
-        * Matching them with keyword parameters passed to the request
-          constructor or via the command line.
-        * Checking to see if all required parameters have been specified
-          and raising an exception, if not.
-        * Encoding each value into the set of request parameters that will
-          be sent in the request to the AWS service.
-        """
-        self.args.update(args)
-        self.connection_args = copy.copy(self.args)
-        if 'debug' in self.args and self.args['debug'] >= 2:
-            boto.set_stream_logger(self.name())
-        required = [p.name for p in self.Params+self.Args if not p.optional]
-        for param in self.Params+self.Args:
-            if param.long_name:
-                python_name = param.long_name.replace('-', '_')
-            else:
-                python_name = boto.utils.pythonize_name(param.name, '_')
-            value = None
-            if python_name in self.args:
-                value = self.args[python_name]
-            if value is None:
-                value = param.default
-            if value is not None:
-                if param.name in required:
-                    required.remove(param.name)
-                if param.request_param:
-                    if param.encoder:
-                        param.encoder(param, self.request_params, value)
-                    else:
-                        Encoder.encode(param, self.request_params, value)
-            if python_name in self.args:
-                del self.connection_args[python_name]
-        if required:
-            l = []
-            for p in self.Params+self.Args:
-                if p.name in required:
-                    if p.short_name and p.long_name:
-                        l.append('(%s, %s)' % (p.optparse_short_name,
-                                               p.optparse_long_name))
-                    elif p.short_name:
-                        l.append('(%s)' % p.optparse_short_name)
-                    else:
-                        l.append('(%s)' % p.optparse_long_name)
-            raise RequiredParamError(','.join(l))
-        boto.log.debug('request_params: %s' % self.request_params)
-        self.process_markers(self.Response)
-
-    def process_markers(self, fmt, prev_name=None):
-        if fmt and fmt['type'] == 'object':
-            for prop in fmt['properties']:
-                self.process_markers(prop, fmt['name'])
-        elif fmt and fmt['type'] == 'array':
-            self.list_markers.append(prev_name)
-            self.item_markers.append(fmt['name'])
-
-    def send(self, verb='GET', **args):
-        self.process_args(**args)
-        self.process_filters()
-        conn = self.get_connection(**self.connection_args)
-        self.http_response = conn.make_request(self.name(),
-                                               self.request_params,
-                                               verb=verb)
-        self.body = self.http_response.read()
-        boto.log.debug(self.body)
-        if self.http_response.status == 200:
-            self.aws_response = boto.jsonresponse.Element(list_marker=self.list_markers,
-                                                          item_marker=self.item_markers)
-            h = boto.jsonresponse.XmlHandler(self.aws_response, self)
-            h.parse(self.body)
-            return self.aws_response
-        else:
-            boto.log.error('%s %s' % (self.http_response.status,
-                                      self.http_response.reason))
-            boto.log.error('%s' % self.body)
-            raise conn.ResponseError(self.http_response.status,
-                                     self.http_response.reason,
-                                     self.body)
-
-    def add_standard_options(self):
-        group = optparse.OptionGroup(self.parser, 'Standard Options')
-        # add standard options that all commands get
-        group.add_option('-D', '--debug', action='store_true',
-                         help='Turn on all debugging output')
-        group.add_option('--debugger', action='store_true',
-                         default=False,
-                         help='Enable interactive debugger on error')
-        group.add_option('-U', '--url', action='store',
-                         help='Override service URL with value provided')
-        group.add_option('--region', action='store',
-                         help='Name of the region to connect to')
-        group.add_option('-I', '--access-key-id', action='store',
-                         help='Override access key value')
-        group.add_option('-S', '--secret-key', action='store',
-                         help='Override secret key value')
-        group.add_option('--version', action='store_true',
-                         help='Display version string')
-        if self.Filters:
-            self.group.add_option('--help-filters', action='store_true',
-                                   help='Display list of available filters')
-            self.group.add_option('--filter', action='append',
-                                   metavar=' name=value',
-                                   help='A filter for limiting the results')
-        self.parser.add_option_group(group)
-
-    def process_standard_options(self, options, args, d):
-        if hasattr(options, 'help_filters') and options.help_filters:
-            print('Available filters:')
-            for filter in self.Filters:
-                print('%s\t%s' % (filter.name, filter.doc))
-            sys.exit(0)
-        if options.debug:
-            self.args['debug'] = 2
-        if options.url:
-            self.args['url'] = options.url
-        if options.region:
-            self.args['region'] = options.region
-        if options.access_key_id:
-            self.args['aws_access_key_id'] = options.access_key_id
-        if options.secret_key:
-            self.args['aws_secret_access_key'] = options.secret_key
-        if options.version:
-            # TODO - Where should the version # come from?
-            print('version x.xx')
-            exit(0)
-        sys.excepthook = boto_except_hook(options.debugger,
-                                          options.debug)
-
-    def get_usage(self):
-        s = 'usage: %prog [options] '
-        l = [ a.long_name for a in self.Args ]
-        s += ' '.join(l)
-        for a in self.Args:
-            if a.doc:
-                s += '\n\n\t%s - %s' % (a.long_name, a.doc)
-        return s
-
-    def build_cli_parser(self):
-        self.parser = optparse.OptionParser(description=self.Description,
-                                            usage=self.get_usage())
-        self.add_standard_options()
-        for param in self.Params:
-            ptype = action = choices = None
-            if param.ptype in self.CLITypeMap:
-                ptype = self.CLITypeMap[param.ptype]
-                action = 'store'
-            if param.ptype == 'boolean':
-                action = 'store_true'
-            elif param.ptype == 'array':
-                if len(param.items) == 1:
-                    ptype = param.items[0]['type']
-                    action = 'append'
-            elif param.cardinality != 1:
-                action = 'append'
-            if ptype or action == 'store_true':
-                if param.short_name:
-                    self.parser.add_option(param.optparse_short_name,
-                                           param.optparse_long_name,
-                                           action=action, type=ptype,
-                                           choices=param.choices,
-                                           help=param.doc)
-                elif param.long_name:
-                    self.parser.add_option(param.optparse_long_name,
-                                           action=action, type=ptype,
-                                           choices=param.choices,
-                                           help=param.doc)
-
-    def do_cli(self):
-        if not self.parser:
-            self.build_cli_parser()
-        self.cli_options, self.cli_args = self.parser.parse_args()
-        d = {}
-        self.process_standard_options(self.cli_options, self.cli_args, d)
-        for param in self.Params:
-            if param.long_name:
-                p_name = param.long_name.replace('-', '_')
-            else:
-                p_name = boto.utils.pythonize_name(param.name)
-            value = getattr(self.cli_options, p_name)
-            if param.ptype == 'file' and value:
-                if value == '-':
-                    value = sys.stdin.read()
-                else:
-                    path = os.path.expanduser(value)
-                    path = os.path.expandvars(path)
-                    if os.path.isfile(path):
-                        fp = open(path)
-                        value = fp.read()
-                        fp.close()
-                    else:
-                        self.parser.error('Unable to read file: %s' % path)
-            d[p_name] = value
-        for arg in self.Args:
-            if arg.long_name:
-                p_name = arg.long_name.replace('-', '_')
-            else:
-                p_name = boto.utils.pythonize_name(arg.name)
-            value = None
-            if arg.cardinality == 1:
-                if len(self.cli_args) >= 1:
-                    value = self.cli_args[0]
-            else:
-                value = self.cli_args
-            d[p_name] = value
-        self.args.update(d)
-        if hasattr(self.cli_options, 'filter') and self.cli_options.filter:
-            d = {}
-            for filter in self.cli_options.filter:
-                name, value = filter.split('=')
-                d[name] = value
-            if 'filters' in self.args:
-                self.args['filters'].update(d)
-            else:
-                self.args['filters'] = d
-        try:
-            response = self.main()
-            self.cli_formatter(response)
-        except RequiredParamError as e:
-            print(e)
-            sys.exit(1)
-        except self.ServiceClass.ResponseError as err:
-            print('Error(%s): %s' % (err.error_code, err.error_message))
-            sys.exit(1)
-        except boto.roboto.awsqueryservice.NoCredentialsError as err:
-            print('Unable to find credentials.')
-            sys.exit(1)
-        except Exception as e:
-            print(e)
-            sys.exit(1)
-
-    def _generic_cli_formatter(self, fmt, data, label=''):
-        if fmt['type'] == 'object':
-            for prop in fmt['properties']:
-                if 'name' in fmt:
-                    if fmt['name'] in data:
-                        data = data[fmt['name']]
-                    if fmt['name'] in self.list_markers:
-                        label = fmt['name']
-                        if label[-1] == 's':
-                            label = label[0:-1]
-                        label = label.upper()
-                self._generic_cli_formatter(prop, data, label)
-        elif fmt['type'] == 'array':
-            for item in data:
-                line = Line(fmt, item, label)
-                if isinstance(item, dict):
-                    for field_name in item:
-                        line.append(item[field_name])
-                elif isinstance(item, basestring):
-                    line.append(item)
-                line.print_it()
-
-    def cli_formatter(self, data):
-        """
-        This method is responsible for formatting the output for the
-        command line interface.  The default behavior is to call the
-        generic CLI formatter which attempts to print something
-        reasonable.  If you want specific formatting, you should
-        override this method and do your own thing.
-
-        :type data: dict
-        :param data: The data returned by AWS.
-        """
-        if data:
-            self._generic_cli_formatter(self.Response, data)
-
-