aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo van Kemenade <hugovk@users.noreply.github.com>2020-04-10 02:18:29 +0300
committerGitHub <noreply@github.com>2020-04-09 19:18:29 -0400
commit0db6e8f4ab936409566973d564ae4b1f88afe13a (patch)
tree91e27e401fa5fd1d5676943e113471b24925f19c
parent9659f282c58138900db6b4dcbfd9d3bb2096717a (diff)
downloadapitools-0db6e8f4ab936409566973d564ae4b1f88afe13a.tar.gz
Drop support for EOL Python versions (#265)
* Drop support for EOL Python versions * sudo no longer needed https://blog.travis-ci.com/2018-11-19-required-linux-infrastructure-migration * Remove unittest2 dependency * Add python_requires and Trove classifiers * Replace unittest2 with unittest
-rw-r--r--.travis.yml3
-rw-r--r--apitools/base/protorpclite/descriptor_test.py8
-rw-r--r--apitools/base/protorpclite/test_util.py2
-rw-r--r--apitools/base/py/base_api_test.py6
-rw-r--r--apitools/base/py/batch_test.py4
-rw-r--r--apitools/base/py/buffered_stream_test.py4
-rw-r--r--apitools/base/py/compression_test.py7
-rw-r--r--apitools/base/py/credentials_lib.py5
-rw-r--r--apitools/base/py/credentials_lib_test.py6
-rw-r--r--apitools/base/py/encoding_test.py5
-rw-r--r--apitools/base/py/exceptions_test.py4
-rw-r--r--apitools/base/py/extra_types_test.py5
-rw-r--r--apitools/base/py/http_wrapper_test.py12
-rw-r--r--apitools/base/py/list_pager_test.py8
-rw-r--r--apitools/base/py/stream_slice_test.py4
-rw-r--r--apitools/base/py/testing/mock_test.py7
-rw-r--r--apitools/base/py/transfer_test.py6
-rw-r--r--apitools/base/py/util_test.py4
-rw-r--r--apitools/gen/client_generation_test.py6
-rw-r--r--apitools/gen/gen_client_test.py5
-rw-r--r--apitools/gen/test_utils.py4
-rw-r--r--apitools/gen/util_test.py8
-rw-r--r--samples/dns_sample/gen_dns_client_test.py7
-rw-r--r--samples/iam_sample/iam_client_test.py7
-rw-r--r--samples/servicemanagement_sample/messages_test.py4
-rw-r--r--samples/uptodate_check_test.py4
-rw-r--r--setup.py6
-rw-r--r--tox.ini3
28 files changed, 73 insertions, 81 deletions
diff --git a/.travis.yml b/.travis.yml
index 627bf3d..453e56d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,4 @@
language: python
-sudo: false
matrix:
include:
- python: "2.7"
@@ -12,8 +11,6 @@ matrix:
env: TOX_ENV=py27-oauth2client3
- python: "2.7"
env: TOX_ENV=py27-oauth2client4
- - python: "3.4"
- env: TOX_ENV=py34-oauth2client4
- python: "3.5"
env: TOX_ENV=py35-oauth2client1
- python: "3.5"
diff --git a/apitools/base/protorpclite/descriptor_test.py b/apitools/base/protorpclite/descriptor_test.py
index fc27ec4..5fbed35 100644
--- a/apitools/base/protorpclite/descriptor_test.py
+++ b/apitools/base/protorpclite/descriptor_test.py
@@ -18,9 +18,9 @@
"""Tests for apitools.base.protorpclite.descriptor."""
import platform
import types
+import unittest
import six
-import unittest2
from apitools.base.protorpclite import descriptor
from apitools.base.protorpclite import message_types
@@ -78,8 +78,8 @@ class DescribeEnumTest(test_util.TestCase):
described.check_initialized()
self.assertEquals(expected, described)
- @unittest2.skipIf('PyPy' in platform.python_implementation(),
- 'todo: reenable this')
+ @unittest.skipIf('PyPy' in platform.python_implementation(),
+ 'todo: reenable this')
def testEnumWithItems(self):
class EnumWithItems(messages.Enum):
A = 3
@@ -512,4 +512,4 @@ class DescriptorLibraryTest(test_util.TestCase):
if __name__ == '__main__':
- unittest2.main()
+ unittest.main()
diff --git a/apitools/base/protorpclite/test_util.py b/apitools/base/protorpclite/test_util.py
index 43345fc..89e3a68 100644
--- a/apitools/base/protorpclite/test_util.py
+++ b/apitools/base/protorpclite/test_util.py
@@ -33,10 +33,10 @@ import os
import re
import socket
import types
+import unittest
import six
from six.moves import range # pylint: disable=redefined-builtin
-import unittest2 as unittest
from apitools.base.protorpclite import message_types
from apitools.base.protorpclite import messages
diff --git a/apitools/base/py/base_api_test.py b/apitools/base/py/base_api_test.py
index b00085c..27b1727 100644
--- a/apitools/base/py/base_api_test.py
+++ b/apitools/base/py/base_api_test.py
@@ -17,11 +17,11 @@ import base64
import datetime
import sys
import contextlib
+import unittest
import six
from six.moves import http_client
from six.moves import urllib_parse
-import unittest2
from apitools.base.protorpclite import message_types
from apitools.base.protorpclite import messages
@@ -96,7 +96,7 @@ class FakeService(base_api.BaseApiService):
super(FakeService, self).__init__(client)
-class BaseApiTest(unittest2.TestCase):
+class BaseApiTest(unittest.TestCase):
def __GetFakeClient(self):
return FakeClient('', credentials=FakeCredentials())
@@ -331,4 +331,4 @@ class BaseApiTest(unittest2.TestCase):
if __name__ == '__main__':
- unittest2.main()
+ unittest.main()
diff --git a/apitools/base/py/batch_test.py b/apitools/base/py/batch_test.py
index 0574dc6..90cf4fb 100644
--- a/apitools/base/py/batch_test.py
+++ b/apitools/base/py/batch_test.py
@@ -16,12 +16,12 @@
"""Tests for apitools.base.py.batch."""
import textwrap
+import unittest
import mock
from six.moves import http_client
from six.moves import range # pylint:disable=redefined-builtin
from six.moves.urllib import parse
-import unittest2
from apitools.base.py import batch
from apitools.base.py import exceptions
@@ -69,7 +69,7 @@ class FakeService(object):
return http_response
-class BatchTest(unittest2.TestCase):
+class BatchTest(unittest.TestCase):
def assertUrlEqual(self, expected_url, provided_url):
diff --git a/apitools/base/py/buffered_stream_test.py b/apitools/base/py/buffered_stream_test.py
index 2098fb1..4de231d 100644
--- a/apitools/base/py/buffered_stream_test.py
+++ b/apitools/base/py/buffered_stream_test.py
@@ -16,15 +16,15 @@
"""Tests for buffered_stream."""
import string
+import unittest
import six
-import unittest2
from apitools.base.py import buffered_stream
from apitools.base.py import exceptions
-class BufferedStreamTest(unittest2.TestCase):
+class BufferedStreamTest(unittest.TestCase):
def setUp(self):
self.stream = six.StringIO(string.ascii_letters)
diff --git a/apitools/base/py/compression_test.py b/apitools/base/py/compression_test.py
index c8ecdac..9832b31 100644
--- a/apitools/base/py/compression_test.py
+++ b/apitools/base/py/compression_test.py
@@ -16,14 +16,15 @@
"""Tests for compression."""
+import unittest
+
from apitools.base.py import compression
from apitools.base.py import gzip
import six
-import unittest2
-class CompressionTest(unittest2.TestCase):
+class CompressionTest(unittest.TestCase):
def setUp(self):
# Sample highly compressible data (~50MB).
@@ -98,7 +99,7 @@ class CompressionTest(unittest2.TestCase):
self.assertTrue(exhausted)
-class StreamingBufferTest(unittest2.TestCase):
+class StreamingBufferTest(unittest.TestCase):
def setUp(self):
self.stream = compression.StreamingBuffer()
diff --git a/apitools/base/py/credentials_lib.py b/apitools/base/py/credentials_lib.py
index a7236df..0823f93 100644
--- a/apitools/base/py/credentials_lib.py
+++ b/apitools/base/py/credentials_lib.py
@@ -17,6 +17,7 @@
"""Common credentials classes and constructors."""
from __future__ import print_function
+import argparse
import contextlib
import datetime
import json
@@ -515,10 +516,6 @@ def _GetRunFlowFlags(args=None):
# since they're bringing their own credentials. So we just allow this
# to fail with an ImportError in those cases.
#
- # TODO(craigcitro): Move this import back to the top when we drop
- # python 2.6 support (eg when gsutil does).
- import argparse
-
parser = argparse.ArgumentParser(parents=[tools.argparser])
# Get command line argparse flags.
flags, _ = parser.parse_known_args(args=args)
diff --git a/apitools/base/py/credentials_lib_test.py b/apitools/base/py/credentials_lib_test.py
index 80b970c..64f056d 100644
--- a/apitools/base/py/credentials_lib_test.py
+++ b/apitools/base/py/credentials_lib_test.py
@@ -17,10 +17,10 @@ import json
import os.path
import shutil
import tempfile
+import unittest
import mock
import six
-import unittest2
from apitools.base.py import credentials_lib
from apitools.base.py import util
@@ -43,7 +43,7 @@ class MetadataMock(object):
self.fail('Unexpected HTTP request to %s' % request_url)
-class CredentialsLibTest(unittest2.TestCase):
+class CredentialsLibTest(unittest.TestCase):
def _RunGceAssertionCredentials(
self, service_account_name=None, scopes=None, cache_filename=None):
@@ -153,7 +153,7 @@ class CredentialsLibTest(unittest2.TestCase):
self.assertIsNone(creds)
-class TestGetRunFlowFlags(unittest2.TestCase):
+class TestGetRunFlowFlags(unittest.TestCase):
def setUp(self):
self._flags_actual = credentials_lib.FLAGS
diff --git a/apitools/base/py/encoding_test.py b/apitools/base/py/encoding_test.py
index d130cc5..54058a2 100644
--- a/apitools/base/py/encoding_test.py
+++ b/apitools/base/py/encoding_test.py
@@ -17,8 +17,7 @@ import base64
import datetime
import json
import sys
-
-import unittest2
+import unittest
from apitools.base.protorpclite import message_types
from apitools.base.protorpclite import messages
@@ -238,7 +237,7 @@ encoding.AddCustomJsonFieldMapping(MessageWithRemappings,
'repeated_field', 'repeatedField')
-class EncodingTest(unittest2.TestCase):
+class EncodingTest(unittest.TestCase):
def testCopyProtoMessage(self):
msg = SimpleMessage(field='abc')
diff --git a/apitools/base/py/exceptions_test.py b/apitools/base/py/exceptions_test.py
index 4937f73..6e3a182 100644
--- a/apitools/base/py/exceptions_test.py
+++ b/apitools/base/py/exceptions_test.py
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import unittest2
+import unittest
from apitools.base.py import exceptions
from apitools.base.py import http_wrapper
@@ -24,7 +24,7 @@ def _MakeResponse(status_code):
request_url='http://www.google.com')
-class HttpErrorFromResponseTest(unittest2.TestCase):
+class HttpErrorFromResponseTest(unittest.TestCase):
"""Tests for exceptions.HttpError.FromResponse."""
diff --git a/apitools/base/py/extra_types_test.py b/apitools/base/py/extra_types_test.py
index 7e37f7c..6a4092b 100644
--- a/apitools/base/py/extra_types_test.py
+++ b/apitools/base/py/extra_types_test.py
@@ -16,8 +16,7 @@
import datetime
import json
import math
-
-import unittest2
+import unittest
from apitools.base.protorpclite import messages
from apitools.base.py import encoding
@@ -25,7 +24,7 @@ from apitools.base.py import exceptions
from apitools.base.py import extra_types
-class ExtraTypesTest(unittest2.TestCase):
+class ExtraTypesTest(unittest.TestCase):
def assertRoundTrip(self, value):
if isinstance(value, extra_types._JSON_PROTO_TYPES):
diff --git a/apitools/base/py/http_wrapper_test.py b/apitools/base/py/http_wrapper_test.py
index ce4c03e..fdf56f5 100644
--- a/apitools/base/py/http_wrapper_test.py
+++ b/apitools/base/py/http_wrapper_test.py
@@ -15,10 +15,10 @@
"""Tests for http_wrapper."""
import socket
+import unittest
import httplib2
from six.moves import http_client
-import unittest2
from mock import patch
@@ -57,7 +57,7 @@ class RaisesExceptionOnLen(object):
return 1
-class HttpWrapperTest(unittest2.TestCase):
+class HttpWrapperTest(unittest.TestCase):
def testRequestBodyUsesLengthProperty(self):
http_wrapper.Request(body=RaisesExceptionOnLen())
@@ -65,8 +65,8 @@ class HttpWrapperTest(unittest2.TestCase):
def testRequestBodyWithLen(self):
http_wrapper.Request(body='burrito')
- @unittest2.skipIf(not _TOKEN_REFRESH_STATUS_AVAILABLE,
- 'oauth2client<1.5 lacks HttpAccessTokenRefreshError.')
+ @unittest.skipIf(not _TOKEN_REFRESH_STATUS_AVAILABLE,
+ 'oauth2client<1.5 lacks HttpAccessTokenRefreshError.')
def testExceptionHandlerHttpAccessTokenError(self):
exception_arg = HttpAccessTokenRefreshError(status=503)
retry_args = http_wrapper.ExceptionRetryArgs(
@@ -80,8 +80,8 @@ class HttpWrapperTest(unittest2.TestCase):
http_wrapper.HandleExceptionsAndRebuildHttpConnections(
retry_args)
- @unittest2.skipIf(not _TOKEN_REFRESH_STATUS_AVAILABLE,
- 'oauth2client<1.5 lacks HttpAccessTokenRefreshError.')
+ @unittest.skipIf(not _TOKEN_REFRESH_STATUS_AVAILABLE,
+ 'oauth2client<1.5 lacks HttpAccessTokenRefreshError.')
def testExceptionHandlerHttpAccessTokenErrorRaises(self):
exception_arg = HttpAccessTokenRefreshError(status=200)
retry_args = http_wrapper.ExceptionRetryArgs(
diff --git a/apitools/base/py/list_pager_test.py b/apitools/base/py/list_pager_test.py
index e1141ae..1ea6368 100644
--- a/apitools/base/py/list_pager_test.py
+++ b/apitools/base/py/list_pager_test.py
@@ -15,7 +15,7 @@
"""Tests for list_pager."""
-import unittest2
+import unittest
from apitools.base.py import list_pager
from apitools.base.py.testing import mock
@@ -34,7 +34,7 @@ class Example(object):
self.c = 'ccc'
-class GetterSetterTest(unittest2.TestCase):
+class GetterSetterTest(unittest.TestCase):
def testGetattrNested(self):
o = Example()
@@ -53,7 +53,7 @@ class GetterSetterTest(unittest2.TestCase):
self.assertEqual(o.c, 'CCC')
-class ListPagerTest(unittest2.TestCase):
+class ListPagerTest(unittest.TestCase):
def _AssertInstanceSequence(self, results, n):
counter = 0
@@ -295,7 +295,7 @@ class ListPagerTest(unittest2.TestCase):
self.assertEquals(1, len(custom_getter_called))
-class ListPagerAttributeTest(unittest2.TestCase):
+class ListPagerAttributeTest(unittest.TestCase):
def setUp(self):
self.mocked_client = mock.Client(iam_client.IamV1)
diff --git a/apitools/base/py/stream_slice_test.py b/apitools/base/py/stream_slice_test.py
index 4d5cdfb..f29e112 100644
--- a/apitools/base/py/stream_slice_test.py
+++ b/apitools/base/py/stream_slice_test.py
@@ -16,15 +16,15 @@
"""Tests for stream_slice."""
import string
+import unittest
import six
-import unittest2
from apitools.base.py import exceptions
from apitools.base.py import stream_slice
-class StreamSliceTest(unittest2.TestCase):
+class StreamSliceTest(unittest.TestCase):
def setUp(self):
self.stream = six.StringIO(string.ascii_letters)
diff --git a/apitools/base/py/testing/mock_test.py b/apitools/base/py/testing/mock_test.py
index 047b721..9bd8f05 100644
--- a/apitools/base/py/testing/mock_test.py
+++ b/apitools/base/py/testing/mock_test.py
@@ -15,8 +15,9 @@
"""Tests for apitools.base.py.testing.mock."""
+import unittest
+
import httplib2
-import unittest2
import six
from apitools.base.protorpclite import messages
@@ -42,7 +43,7 @@ class CustomException(Exception):
pass
-class MockTest(unittest2.TestCase):
+class MockTest(unittest.TestCase):
def testMockFusionBasic(self):
with mock.Client(fusiontables.FusiontablesV1) as client_class:
@@ -252,7 +253,7 @@ class _NestedNestedMessage(messages.Message):
nested = messages.MessageField(_NestedMessage, 1)
-class UtilTest(unittest2.TestCase):
+class UtilTest(unittest.TestCase):
def testMessagesEqual(self):
self.assertFalse(mock._MessagesEqual(
diff --git a/apitools/base/py/transfer_test.py b/apitools/base/py/transfer_test.py
index c68e77e..4a9e79c 100644
--- a/apitools/base/py/transfer_test.py
+++ b/apitools/base/py/transfer_test.py
@@ -16,12 +16,12 @@
"""Tests for transfer.py."""
import string
+import unittest
import httplib2
import mock
import six
from six.moves import http_client
-import unittest2
from apitools.base.py import base_api
from apitools.base.py import exceptions
@@ -30,7 +30,7 @@ from apitools.base.py import http_wrapper
from apitools.base.py import transfer
-class TransferTest(unittest2.TestCase):
+class TransferTest(unittest.TestCase):
def assertRangeAndContentRangeCompatible(self, request, response):
request_prefix = 'bytes='
@@ -311,7 +311,7 @@ class TransferTest(unittest2.TestCase):
self.assertTrue(rewritten_upload_contents.endswith(upload_bytes))
-class UploadTest(unittest2.TestCase):
+class UploadTest(unittest.TestCase):
def setUp(self):
# Sample highly compressible data.
diff --git a/apitools/base/py/util_test.py b/apitools/base/py/util_test.py
index b2ece27..c3a4732 100644
--- a/apitools/base/py/util_test.py
+++ b/apitools/base/py/util_test.py
@@ -14,7 +14,7 @@
# limitations under the License.
"""Tests for util.py."""
-import unittest2
+import unittest
from apitools.base.protorpclite import messages
from apitools.base.py import encoding
@@ -48,7 +48,7 @@ encoding.AddCustomJsonEnumMapping(
MessageWithRemappings.AnEnum, 'value_one', 'ONE')
-class UtilTest(unittest2.TestCase):
+class UtilTest(unittest.TestCase):
def testExpand(self):
method_config_xy = MockedMethodConfig(relative_path='{x}/y/{z}',
diff --git a/apitools/gen/client_generation_test.py b/apitools/gen/client_generation_test.py
index 9146501..4e382dd 100644
--- a/apitools/gen/client_generation_test.py
+++ b/apitools/gen/client_generation_test.py
@@ -22,15 +22,11 @@ import six
import subprocess
import sys
import tempfile
+import unittest
from apitools.gen import gen_client
from apitools.gen import test_utils
-if six.PY2:
- import unittest2 as unittest
-else:
- import unittest
-
_API_LIST = [
'bigquery.v2',
'compute.v1',
diff --git a/apitools/gen/gen_client_test.py b/apitools/gen/gen_client_test.py
index 6c4e9b1..a0f30d5 100644
--- a/apitools/gen/gen_client_test.py
+++ b/apitools/gen/gen_client_test.py
@@ -16,8 +16,7 @@
"""Test for gen_client module."""
import os
-
-import unittest2
+import unittest
from apitools.gen import gen_client
from apitools.gen import test_utils
@@ -32,7 +31,7 @@ def _GetContent(file_path):
return f.read()
-class ClientGenCliTest(unittest2.TestCase):
+class ClientGenCliTest(unittest.TestCase):
def testHelp_NotEnoughArguments(self):
with self.assertRaisesRegexp(SystemExit, '0'):
diff --git a/apitools/gen/test_utils.py b/apitools/gen/test_utils.py
index 484dcbc..e6b5373 100644
--- a/apitools/gen/test_utils.py
+++ b/apitools/gen/test_utils.py
@@ -20,12 +20,12 @@ import os
import shutil
import sys
import tempfile
+import unittest
import six
-import unittest2
-SkipOnWindows = unittest2.skipIf(
+SkipOnWindows = unittest.skipIf(
os.name == 'nt', 'Does not run on windows')
diff --git a/apitools/gen/util_test.py b/apitools/gen/util_test.py
index 7668b53..9682bf9 100644
--- a/apitools/gen/util_test.py
+++ b/apitools/gen/util_test.py
@@ -21,13 +21,13 @@ import gzip
import os
import six.moves.urllib.request as urllib_request
import tempfile
-import unittest2
+import unittest
from apitools.gen import util
from mock import patch
-class NormalizeVersionTest(unittest2.TestCase):
+class NormalizeVersionTest(unittest.TestCase):
def testVersions(self):
already_valid = 'v1'
@@ -36,7 +36,7 @@ class NormalizeVersionTest(unittest2.TestCase):
self.assertEqual('v0_1', util.NormalizeVersion(to_clean))
-class NamesTest(unittest2.TestCase):
+class NamesTest(unittest.TestCase):
def testKeywords(self):
names = util.Names([''])
@@ -81,7 +81,7 @@ def _Gzip(raw_content):
os.unlink(f.name)
-class GetURLContentTest(unittest2.TestCase):
+class GetURLContentTest(unittest.TestCase):
def testUnspecifiedContentEncoding(self):
data = 'regular non-gzipped content'
diff --git a/samples/dns_sample/gen_dns_client_test.py b/samples/dns_sample/gen_dns_client_test.py
index dff6812..862ddba 100644
--- a/samples/dns_sample/gen_dns_client_test.py
+++ b/samples/dns_sample/gen_dns_client_test.py
@@ -15,7 +15,8 @@
"""Test for generated sample module."""
-import unittest2
+import unittest
+
import six
from apitools.base.py import list_pager
@@ -25,7 +26,7 @@ from samples.dns_sample.dns_v1 import dns_v1_client
from samples.dns_sample.dns_v1 import dns_v1_messages
-class DnsGenClientSanityTest(unittest2.TestCase):
+class DnsGenClientSanityTest(unittest.TestCase):
def testBaseUrl(self):
self.assertEquals(u'https://www.googleapis.com/dns/v1/',
@@ -46,7 +47,7 @@ class DnsGenClientSanityTest(unittest2.TestCase):
'ResourceRecordSetsService']), inner_classes)
-class DnsGenClientTest(unittest2.TestCase):
+class DnsGenClientTest(unittest.TestCase):
def setUp(self):
self.mocked_dns_v1 = mock.Client(dns_v1_client.DnsV1)
diff --git a/samples/iam_sample/iam_client_test.py b/samples/iam_sample/iam_client_test.py
index 39d25a4..017a2d0 100644
--- a/samples/iam_sample/iam_client_test.py
+++ b/samples/iam_sample/iam_client_test.py
@@ -15,7 +15,8 @@
"""Test for generated sample module."""
-import unittest2
+import unittest
+
import six
from apitools.base.py.testing import mock
@@ -24,7 +25,7 @@ from samples.iam_sample.iam_v1 import iam_v1_client # nopep8
from samples.iam_sample.iam_v1 import iam_v1_messages # nopep8
-class DnsGenClientSanityTest(unittest2.TestCase):
+class DnsGenClientSanityTest(unittest.TestCase):
def testBaseUrl(self):
self.assertEquals(u'https://iam.googleapis.com/',
@@ -46,7 +47,7 @@ class DnsGenClientSanityTest(unittest2.TestCase):
'RolesService']), inner_classes)
-class IamGenClientTest(unittest2.TestCase):
+class IamGenClientTest(unittest.TestCase):
def setUp(self):
self.mocked_iam_v1 = mock.Client(iam_v1_client.IamV1)
diff --git a/samples/servicemanagement_sample/messages_test.py b/samples/servicemanagement_sample/messages_test.py
index a62dbd7..5f56322 100644
--- a/samples/servicemanagement_sample/messages_test.py
+++ b/samples/servicemanagement_sample/messages_test.py
@@ -15,7 +15,7 @@
"""Test for generated servicemanagement messages module."""
-import unittest2
+import unittest
from apitools.base.py import extra_types
@@ -23,7 +23,7 @@ from samples.servicemanagement_sample.servicemanagement_v1 \
import servicemanagement_v1_messages as messages # nopep8
-class MessagesTest(unittest2.TestCase):
+class MessagesTest(unittest.TestCase):
def testInstantiateMessageWithAdditionalProperties(self):
PROJECT_NAME = 'test-project'
diff --git a/samples/uptodate_check_test.py b/samples/uptodate_check_test.py
index 3871695..8ca258e 100644
--- a/samples/uptodate_check_test.py
+++ b/samples/uptodate_check_test.py
@@ -14,9 +14,9 @@
import os
import difflib
+import unittest
import six
-import unittest2
from apitools.gen import gen_client
from apitools.gen import test_utils
@@ -31,7 +31,7 @@ def _GetContent(file_path):
return f.read()
-class ClientGenCliTest(unittest2.TestCase):
+class ClientGenCliTest(unittest.TestCase):
def AssertDiffEqual(self, expected, actual):
"""Like unittest.assertEqual with a diff in the exception message."""
diff --git a/setup.py b/setup.py
index fbf81b1..efd1117 100644
--- a/setup.py
+++ b/setup.py
@@ -39,7 +39,6 @@ CLI_PACKAGES = [
]
TESTING_PACKAGES = [
- 'unittest2>=0.5.1',
'mock>=1.0.1',
]
@@ -62,6 +61,7 @@ setuptools.setup(
url='http://github.com/google/apitools',
author='Craig Citro',
author_email='craigcitro@google.com',
+ python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*',
# Contained modules and scripts.
packages=setuptools.find_packages(include=['apitools']),
entry_points={'console_scripts': CONSOLE_SCRIPTS},
@@ -88,6 +88,10 @@ setuptools.setup(
# PyPI package information.
classifiers=[
'License :: OSI Approved :: Apache Software License',
+ 'Programming Language :: Python :: 2',
+ 'Programming Language :: Python :: 2.7',
+ 'Programming Language :: Python :: 3',
+ 'Programming Language :: Python :: 3.5',
'Topic :: Software Development :: Libraries',
'Topic :: Software Development :: Libraries :: Python Modules',
],
diff --git a/tox.ini b/tox.ini
index aaa22e0..51b45b4 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,9 +1,6 @@
[tox]
envlist =
- py26-oauth2client4
py27-oauth2client{1,2,3,4}
- py33-oauth2client41
- py34-oauth2client41
py35-oauth2client{1,2,3,4}
[testenv]