Merge initial pass at python 3 support
Conflicts: requestbuilder/auth/aws.py requestbuilder/command.py
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
||||
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, print_function
|
||||
|
||||
import argparse
|
||||
import bdb
|
||||
@@ -37,6 +37,9 @@ from requestbuilder.suite import RequestBuilder
|
||||
from requestbuilder.util import add_default_routes, aggregate_subclass_fields
|
||||
|
||||
|
||||
import six
|
||||
|
||||
|
||||
class BaseCommand(object):
|
||||
"""
|
||||
The basis for a command line tool. To invoke this as a command line tool,
|
||||
@@ -241,7 +244,7 @@ class BaseCommand(object):
|
||||
self.log.debug('parsed arguments from CLI: %s', str(cli_args))
|
||||
|
||||
def distribute_args(self):
|
||||
for key, val in self.args.iteritems():
|
||||
for key, val in six.iteritems(self.args):
|
||||
# If a location to route this to was supplied, put it there, too.
|
||||
if key not in self._arg_routes:
|
||||
raise TypeError('got unrecognized arg: "{0}"'.format(key))
|
||||
@@ -276,12 +279,12 @@ class BaseCommand(object):
|
||||
if getattr(err, 'filename', None):
|
||||
err_bits[-1] += ':'
|
||||
err_bits.append(err.filename)
|
||||
print >> sys.stderr, ' '.join(err_bits)
|
||||
print(' '.join(err_bits), file=sys.stderr)
|
||||
else:
|
||||
if len(err.args) > 0 and err.args[0]:
|
||||
print >> sys.stderr, msg_prefix, err.args[0]
|
||||
print(msg_prefix, err.args[0], file=sys.stderr)
|
||||
else:
|
||||
print >> sys.stderr, msg_prefix, str(err)
|
||||
print(msg_prefix, str(err), file=sys.stderr)
|
||||
# Since we don't even have a config file to consult our options for
|
||||
# determining when debugging is on are limited to what we got at
|
||||
# the command line.
|
||||
@@ -337,12 +340,12 @@ class BaseCommand(object):
|
||||
if getattr(err, 'filename', None):
|
||||
err_bits[-1] += ':'
|
||||
err_bits.append(err.filename)
|
||||
print >> sys.stderr, ' '.join(err_bits)
|
||||
print(' '.join(err_bits), file=sys.stderr)
|
||||
else:
|
||||
if len(err.args) > 0 and err.args[0]:
|
||||
print >> sys.stderr, msg_prefix, err.args[0]
|
||||
print(msg_prefix, err.args[0], file=sys.stderr)
|
||||
else:
|
||||
print >> sys.stderr, msg_prefix, str(err)
|
||||
print(msg_prefix, str(err), file=sys.stderr)
|
||||
if self.debug:
|
||||
raise
|
||||
sys.exit(1)
|
||||
@@ -384,7 +387,7 @@ def _debugger_usr1_handler(_, frame):
|
||||
frame_dict = {'_frame': frame}
|
||||
frame_dict.update(frame.f_globals)
|
||||
frame_dict.update(frame.f_locals)
|
||||
print >> sys.stderr, ''.join(traceback.format_stack(frame))
|
||||
print(''.join(traceback.format_stack(frame)), file=sys.stderr)
|
||||
|
||||
|
||||
def _rewrap_description(text, width=70):
|
||||
|
||||
@@ -14,11 +14,14 @@
|
||||
|
||||
from __future__ import absolute_import
|
||||
|
||||
import ConfigParser
|
||||
import itertools
|
||||
import logging
|
||||
|
||||
|
||||
import six
|
||||
from six.moves import configparser
|
||||
|
||||
|
||||
class ConfigView(object):
|
||||
def __init__(self, data, region=None, user=None):
|
||||
self.log = data.log
|
||||
@@ -87,7 +90,7 @@ class ConfigView(object):
|
||||
@staticmethod
|
||||
def __get_all_options(confdict, option):
|
||||
matches = {}
|
||||
for section, options in confdict.iteritems():
|
||||
for section, options in six.iteritems(confdict):
|
||||
if '*' not in section and option in options:
|
||||
matches[section] = options[option]
|
||||
return matches
|
||||
@@ -115,7 +118,7 @@ class ConfigData(object):
|
||||
self._parse_config(filenames)
|
||||
|
||||
def _parse_config(self, filenames):
|
||||
parser = ConfigParser.SafeConfigParser()
|
||||
parser = configparser.SafeConfigParser()
|
||||
parser.read(filenames)
|
||||
for section in parser.sections():
|
||||
if section == 'global':
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
||||
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, print_function
|
||||
|
||||
import argparse
|
||||
import copy
|
||||
@@ -31,6 +31,9 @@ from requestbuilder.util import aggregate_subclass_fields
|
||||
from requestbuilder.xmlparse import parse_listdelimited_aws_xml
|
||||
|
||||
|
||||
import six
|
||||
|
||||
|
||||
class BaseRequest(BaseCommand):
|
||||
"""
|
||||
The basis for a command line tool that represents a request. The data for
|
||||
@@ -216,7 +219,7 @@ class BaseRequest(BaseCommand):
|
||||
if isinstance(err, ServerError):
|
||||
msg = '{0}: {1}'.format(os.path.basename(sys.argv[0]),
|
||||
err.format_for_cli())
|
||||
print >> sys.stderr, msg
|
||||
print(msg, file=sys.stderr)
|
||||
if self.debug:
|
||||
raise
|
||||
sys.exit(1)
|
||||
@@ -323,7 +326,7 @@ class AWSQueryRequest(BaseRequest):
|
||||
if args is None:
|
||||
pass
|
||||
elif isinstance(args, dict):
|
||||
for (key, val) in args.iteritems():
|
||||
for (key, val) in six.iteritems(args):
|
||||
# Prefix.Key1, Prefix.Key2, ...
|
||||
if prefix:
|
||||
prefixed_key = '{0}.{1}'.format(prefix, key)
|
||||
@@ -434,7 +437,7 @@ def _process_filters(cli_filters):
|
||||
filter_args[key].append(val)
|
||||
# Build the flattenable [{'Name': key, 'Value': [value, ...]}, ...]
|
||||
filters = [{'Name': name, 'Value': values} for (name, values)
|
||||
in filter_args.iteritems()]
|
||||
in six.iteritems(filter_args)]
|
||||
return filters
|
||||
|
||||
|
||||
|
||||
@@ -106,7 +106,7 @@ class BaseService(RegionConfigurableMixin):
|
||||
def session(self):
|
||||
if self._session is None:
|
||||
self._session = requests.session()
|
||||
for key, val in self.session_args.iteritems():
|
||||
for key, val in six.iteritems(self.session_args):
|
||||
setattr(self._session, key, val)
|
||||
for adapter in self._session.adapters.values():
|
||||
# send_request handles retries to allow for re-signing
|
||||
@@ -282,7 +282,7 @@ class BaseService(RegionConfigurableMixin):
|
||||
self.log.debug('request method: %s', request.method)
|
||||
self.log.debug('request url: %s', p_request.url)
|
||||
if isinstance(p_request.headers, (dict, collections.Mapping)):
|
||||
for key, val in sorted(p_request.headers.iteritems()):
|
||||
for key, val in sorted(six.iteritems(p_request.headers)):
|
||||
if key.lower().endswith('password'):
|
||||
val = '<redacted>'
|
||||
self.log.debug('request header: %s: %s', key, val)
|
||||
@@ -315,7 +315,7 @@ class BaseService(RegionConfigurableMixin):
|
||||
val = '<redacted>'
|
||||
self.log.debug('request data: %s: %s', key, val)
|
||||
if isinstance(request.files, (dict, collections.Mapping)):
|
||||
for key, val in sorted(request.files.iteritems()):
|
||||
for key, val in sorted(six.iteritems(request.files)):
|
||||
if hasattr(val, '__len__'):
|
||||
val = '<{0} bytes>'.format(len(val))
|
||||
self.log.debug('request file: %s: %s', key, val)
|
||||
|
||||
3
setup.py
3
setup.py
@@ -88,6 +88,9 @@ setup(name='requestbuilder',
|
||||
'Programming Language :: Python :: 2',
|
||||
'Programming Language :: Python :: 2.6',
|
||||
'Programming Language :: Python :: 2.7',
|
||||
'Programming Language :: Python :: 3',
|
||||
'Programming Language :: Python :: 3.4',
|
||||
'Programming Language :: Python :: 3.5',
|
||||
'Topic :: Internet'],
|
||||
cmdclass={'build_py': build_py_with_git_version,
|
||||
'sdist': sdist_with_git_version})
|
||||
|
||||
Reference in New Issue
Block a user