From c682c3c1004020ca3c027a72e723d449e10e262c Mon Sep 17 00:00:00 2001 From: Tim Savage Date: Fri, 14 Mar 2014 23:52:48 +1100 Subject: [PATCH] Initial migration to python 3 support --- setup.py | 13 +++++++------ tests/integration/long/test_large_data.py | 11 +++++++---- tests/integration/long/utils.py | 3 ++- tests/integration/standard/test_metadata.py | 8 +++++--- tests/integration/standard/test_types.py | 2 +- tests/unit/io/test_asyncorereactor.py | 5 ++++- tests/unit/io/test_libevreactor.py | 5 ++++- tests/unit/test_connection.py | 5 ++++- tests/unit/test_parameter_binding.py | 5 +++++ tests/unit/test_policies.py | 5 +++++ tox.ini | 6 +++--- 11 files changed, 47 insertions(+), 21 deletions(-) diff --git a/setup.py b/setup.py index 9a00de93..9fddd960 100644 --- a/setup.py +++ b/setup.py @@ -1,3 +1,4 @@ +from __future__ import print_function import platform import os import sys @@ -62,11 +63,11 @@ class DocCommand(Command): except subprocess.CalledProcessError as exc: raise RuntimeError("Documentation step '%s' failed: %s: %s" % (mode, exc, exc.output)) else: - print output + print(output) - print "" - print "Documentation step '%s' performed, results here:" % mode - print " %s/" % path + print("") + print("Documentation step '%s' performed, results here:" % mode) + print(" %s/" % path) class BuildFailed(Exception): @@ -148,7 +149,7 @@ def run_setup(extensions): kw['cmdclass']['build_ext'] = build_extensions kw['ext_modules'] = extensions - dependencies = ['futures', 'scales', 'blist'] + dependencies = ['futures', 'scales', 'blist', 'six'] if platform.python_implementation() != "CPython": dependencies.remove('blist') @@ -163,7 +164,7 @@ def run_setup(extensions): packages=['cassandra', 'cassandra.io'], include_package_data=True, install_requires=dependencies, - tests_require=['nose', 'mock', 'ccm', 'unittest2', 'PyYAML'], + tests_require=['nose', 'mock', 'PyYAML'], classifiers=[ 'Development Status :: 5 - Production/Stable', 'Intended Audience :: Developers', diff --git a/tests/integration/long/test_large_data.py b/tests/integration/long/test_large_data.py index 10e0a8eb..420beac7 100644 --- a/tests/integration/long/test_large_data.py +++ b/tests/integration/long/test_large_data.py @@ -1,4 +1,7 @@ -import Queue +try: + from Queue import Queue, Empty +except ImportError: + from queue import Queue, Empty from struct import pack import unittest @@ -38,14 +41,14 @@ class LargeDataTests(unittest.TestCase): return session def batch_futures(self, session, statement_generator): - futures = Queue.Queue(maxsize=121) + futures = Queue(maxsize=121) for i, statement in enumerate(statement_generator): if i > 0 and i % 120 == 0: # clear the existing queue while True: try: futures.get_nowait().result() - except Queue.Empty: + except Empty: break future = session.execute_async(statement) @@ -54,7 +57,7 @@ class LargeDataTests(unittest.TestCase): while True: try: futures.get_nowait().result() - except Queue.Empty: + except Empty: break def test_wide_rows(self): diff --git a/tests/integration/long/utils.py b/tests/integration/long/utils.py index cb411a2e..b82ca869 100644 --- a/tests/integration/long/utils.py +++ b/tests/integration/long/utils.py @@ -1,3 +1,4 @@ +from __future__ import print_function import logging import time @@ -77,7 +78,7 @@ def force_stop(node): def ring(node): - print 'From node%s:' % node + print('From node%s:' % node) get_node(node).nodetool('ring') diff --git a/tests/integration/standard/test_metadata.py b/tests/integration/standard/test_metadata.py index c0f8670a..d2f1a039 100644 --- a/tests/integration/standard/test_metadata.py +++ b/tests/integration/standard/test_metadata.py @@ -1,3 +1,5 @@ +import six + try: import unittest2 as unittest except ImportError: @@ -295,7 +297,7 @@ class TestCodeCoverage(unittest.TestCase): cluster = Cluster() cluster.connect() - self.assertIsInstance(cluster.metadata.export_schema_as_string(), basestring) + self.assertIsInstance(cluster.metadata.export_schema_as_string(), six.string_types) def test_export_keyspace_schema(self): """ @@ -307,8 +309,8 @@ class TestCodeCoverage(unittest.TestCase): for keyspace in cluster.metadata.keyspaces: keyspace_metadata = cluster.metadata.keyspaces[keyspace] - self.assertIsInstance(keyspace_metadata.export_as_string(), basestring) - self.assertIsInstance(keyspace_metadata.as_cql_query(), basestring) + self.assertIsInstance(keyspace_metadata.export_as_string(), six.string_types) + self.assertIsInstance(keyspace_metadata.as_cql_query(), six.string_types) def test_case_sensitivity(self): """ diff --git a/tests/integration/standard/test_types.py b/tests/integration/standard/test_types.py index a350c457..230916cd 100644 --- a/tests/integration/standard/test_types.py +++ b/tests/integration/standard/test_types.py @@ -352,7 +352,7 @@ class TypeTests(unittest.TestCase): """ Ensure timezone-aware datetimes are converted to timestamps correctly """ try: import pytz - except ImportError, exc: + except ImportError as exc: raise unittest.SkipTest('pytz is not available: %r' % (exc,)) dt = datetime(1997, 8, 29, 11, 14) diff --git a/tests/unit/io/test_asyncorereactor.py b/tests/unit/io/test_asyncorereactor.py index 8b5db2e1..26a10ca5 100644 --- a/tests/unit/io/test_asyncorereactor.py +++ b/tests/unit/io/test_asyncorereactor.py @@ -5,7 +5,10 @@ except ImportError: import errno import os -from StringIO import StringIO +try: + from StringIO import StringIO +except ImportError: + from io import StringIO import socket from socket import error as socket_error diff --git a/tests/unit/io/test_libevreactor.py b/tests/unit/io/test_libevreactor.py index f7fab9fd..abd5e3d7 100644 --- a/tests/unit/io/test_libevreactor.py +++ b/tests/unit/io/test_libevreactor.py @@ -5,7 +5,10 @@ except ImportError: import errno import os -from StringIO import StringIO +try: + from StringIO import StringIO +except ImportError: + from io import StringIO from socket import error as socket_error from mock import patch, Mock diff --git a/tests/unit/test_connection.py b/tests/unit/test_connection.py index 0ade788e..b1d40619 100644 --- a/tests/unit/test_connection.py +++ b/tests/unit/test_connection.py @@ -3,7 +3,10 @@ try: except ImportError: import unittest # noqa -from StringIO import StringIO +try: + from StringIO import StringIO +except ImportError: + from io import StringIO from mock import Mock, ANY diff --git a/tests/unit/test_parameter_binding.py b/tests/unit/test_parameter_binding.py index 3ed66647..3be60bf5 100644 --- a/tests/unit/test_parameter_binding.py +++ b/tests/unit/test_parameter_binding.py @@ -1,3 +1,5 @@ +import six + try: import unittest2 as unittest except ImportError: @@ -12,6 +14,9 @@ try: except ImportError: # Python <2.7 from cassandra.util import OrderedDict # NOQA +if six.PY3: + xrange = range + class ParamBindingTest(unittest.TestCase): diff --git a/tests/unit/test_policies.py b/tests/unit/test_policies.py index 56fd5440..0cafbc75 100644 --- a/tests/unit/test_policies.py +++ b/tests/unit/test_policies.py @@ -1,3 +1,5 @@ +import six + try: import unittest2 as unittest except ImportError: @@ -22,6 +24,9 @@ from cassandra.policies import (RoundRobinPolicy, DCAwareRoundRobinPolicy, from cassandra.pool import Host from cassandra.query import Statement +if six.PY3: + xrange = range + class TestLoadBalancingPolicy(unittest.TestCase): def test_non_implemented(self): diff --git a/tox.ini b/tox.ini index eb51cc78..92b36cfb 100644 --- a/tox.ini +++ b/tox.ini @@ -1,11 +1,11 @@ [tox] -envlist = py26,py27,pypy +envlist = py26,py27,pypy,py33 [testenv] deps = nose mock - ccm - unittest2 +; ccm +; unittest2 pip PyYAML commands = {envpython} setup.py build_ext --inplace