Unverified Kaydet (Commit) d5bc7dc9 authored tarafından Ben Firshman's avatar Ben Firshman

Drop support for Python 2.6

Because it's ancient. If you're still using it, you can use an old
version of docker-py.
Signed-off-by: 's avatarBen Firshman <ben@firshman.co.uk>
üst b49cacce
...@@ -3,7 +3,6 @@ language: python ...@@ -3,7 +3,6 @@ language: python
python: python:
- "3.5" - "3.5"
env: env:
- TOX_ENV=py26
- TOX_ENV=py27 - TOX_ENV=py27
- TOX_ENV=py33 - TOX_ENV=py33
- TOX_ENV=py34 - TOX_ENV=py34
......
...@@ -64,7 +64,6 @@ setup( ...@@ -64,7 +64,6 @@ setup(
'Operating System :: OS Independent', 'Operating System :: OS Independent',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.3',
......
import sys
import unittest
import six
class BaseTestCase(unittest.TestCase):
def assertIn(self, object, collection):
if six.PY2 and sys.version_info[1] <= 6:
return self.assertTrue(object in collection)
return super(BaseTestCase, self).assertIn(object, collection)
class Cleanup(object):
if sys.version_info < (2, 7):
# Provide a basic implementation of addCleanup for Python < 2.7
def __init__(self, *args, **kwargs):
super(Cleanup, self).__init__(*args, **kwargs)
self._cleanups = []
def tearDown(self):
super(Cleanup, self).tearDown()
ok = True
while self._cleanups:
fn, args, kwargs = self._cleanups.pop(-1)
try:
fn(*args, **kwargs)
except KeyboardInterrupt:
raise
except:
ok = False
if not ok:
raise
def addCleanup(self, function, *args, **kwargs):
self._cleanups.append((function, args, kwargs))
import datetime import datetime
import json import json
import io
import os import os
import re import re
import shutil import shutil
import socket import socket
import sys
import tempfile import tempfile
import threading import threading
import time import time
import io import unittest
import docker import docker
import requests import requests
from requests.packages import urllib3 from requests.packages import urllib3
import six import six
from .. import base
from . import fake_api from . import fake_api
import pytest import pytest
...@@ -93,7 +92,7 @@ url_prefix = '{0}v{1}/'.format( ...@@ -93,7 +92,7 @@ url_prefix = '{0}v{1}/'.format(
docker.constants.DEFAULT_DOCKER_API_VERSION) docker.constants.DEFAULT_DOCKER_API_VERSION)
class DockerClientTest(base.Cleanup, base.BaseTestCase): class DockerClientTest(unittest.TestCase):
def setUp(self): def setUp(self):
self.patcher = mock.patch.multiple( self.patcher = mock.patch.multiple(
'docker.Client', get=fake_get, post=fake_post, put=fake_put, 'docker.Client', get=fake_get, post=fake_post, put=fake_put,
...@@ -109,11 +108,6 @@ class DockerClientTest(base.Cleanup, base.BaseTestCase): ...@@ -109,11 +108,6 @@ class DockerClientTest(base.Cleanup, base.BaseTestCase):
self.client.close() self.client.close()
self.patcher.stop() self.patcher.stop()
def assertIn(self, object, collection):
if six.PY2 and sys.version_info[1] <= 6:
return self.assertTrue(object in collection)
return super(DockerClientTest, self).assertIn(object, collection)
def base_create_payload(self, img='busybox', cmd=None): def base_create_payload(self, img='busybox', cmd=None):
if not cmd: if not cmd:
cmd = ['true'] cmd = ['true']
...@@ -356,7 +350,7 @@ class DockerApiTest(DockerClientTest): ...@@ -356,7 +350,7 @@ class DockerApiTest(DockerClientTest):
self.assertEqual(result, content) self.assertEqual(result, content)
class StreamTest(base.Cleanup, base.BaseTestCase): class StreamTest(unittest.TestCase):
def setUp(self): def setUp(self):
socket_dir = tempfile.mkdtemp() socket_dir = tempfile.mkdtemp()
self.build_context = tempfile.mkdtemp() self.build_context = tempfile.mkdtemp()
...@@ -458,7 +452,7 @@ class StreamTest(base.Cleanup, base.BaseTestCase): ...@@ -458,7 +452,7 @@ class StreamTest(base.Cleanup, base.BaseTestCase):
str(i).encode() for i in range(50)]) str(i).encode() for i in range(50)])
class UserAgentTest(base.BaseTestCase): class UserAgentTest(unittest.TestCase):
def setUp(self): def setUp(self):
self.patcher = mock.patch.object( self.patcher = mock.patch.object(
docker.Client, docker.Client,
......
...@@ -7,18 +7,17 @@ import os.path ...@@ -7,18 +7,17 @@ import os.path
import random import random
import shutil import shutil
import tempfile import tempfile
import unittest
from docker import auth, errors from docker import auth, errors
from .. import base
try: try:
from unittest import mock from unittest import mock
except ImportError: except ImportError:
import mock import mock
class RegressionTest(base.BaseTestCase): class RegressionTest(unittest.TestCase):
def test_803_urlsafe_encode(self): def test_803_urlsafe_encode(self):
auth_data = { auth_data = {
'username': 'root', 'username': 'root',
...@@ -29,7 +28,7 @@ class RegressionTest(base.BaseTestCase): ...@@ -29,7 +28,7 @@ class RegressionTest(base.BaseTestCase):
assert b'_' in encoded assert b'_' in encoded
class ResolveRepositoryNameTest(base.BaseTestCase): class ResolveRepositoryNameTest(unittest.TestCase):
def test_resolve_repository_name_hub_library_image(self): def test_resolve_repository_name_hub_library_image(self):
self.assertEqual( self.assertEqual(
auth.resolve_repository_name('image'), auth.resolve_repository_name('image'),
...@@ -115,7 +114,7 @@ def encode_auth(auth_info): ...@@ -115,7 +114,7 @@ def encode_auth(auth_info):
auth_info.get('password', '').encode('utf-8')) auth_info.get('password', '').encode('utf-8'))
class ResolveAuthTest(base.BaseTestCase): class ResolveAuthTest(unittest.TestCase):
index_config = {'auth': encode_auth({'username': 'indexuser'})} index_config = {'auth': encode_auth({'username': 'indexuser'})}
private_config = {'auth': encode_auth({'username': 'privateuser'})} private_config = {'auth': encode_auth({'username': 'privateuser'})}
legacy_config = {'auth': encode_auth({'username': 'legacyauth'})} legacy_config = {'auth': encode_auth({'username': 'legacyauth'})}
...@@ -270,7 +269,7 @@ class ResolveAuthTest(base.BaseTestCase): ...@@ -270,7 +269,7 @@ class ResolveAuthTest(base.BaseTestCase):
) )
class LoadConfigTest(base.Cleanup, base.BaseTestCase): class LoadConfigTest(unittest.TestCase):
def test_load_config_no_file(self): def test_load_config_no_file(self):
folder = tempfile.mkdtemp() folder = tempfile.mkdtemp()
self.addCleanup(shutil.rmtree, folder) self.addCleanup(shutil.rmtree, folder)
......
import os import os
import unittest
from docker.client import Client from docker.client import Client
from .. import base
TEST_CERT_DIR = os.path.join( TEST_CERT_DIR = os.path.join(
os.path.dirname(__file__), os.path.dirname(__file__),
...@@ -8,7 +9,7 @@ TEST_CERT_DIR = os.path.join( ...@@ -8,7 +9,7 @@ TEST_CERT_DIR = os.path.join(
) )
class ClientTest(base.BaseTestCase): class ClientTest(unittest.TestCase):
def setUp(self): def setUp(self):
self.os_environ = os.environ.copy() self.os_environ = os.environ.copy()
...@@ -34,7 +35,7 @@ class ClientTest(base.BaseTestCase): ...@@ -34,7 +35,7 @@ class ClientTest(base.BaseTestCase):
self.assertEqual(client._version, '2.32') self.assertEqual(client._version, '2.32')
class DisableSocketTest(base.BaseTestCase): class DisableSocketTest(unittest.TestCase):
class DummySocket(object): class DummySocket(object):
def __init__(self, timeout=60): def __init__(self, timeout=60):
self.timeout = timeout self.timeout = timeout
......
...@@ -2,8 +2,8 @@ import json ...@@ -2,8 +2,8 @@ import json
import six import six
from ..helpers import requires_api_version
from .api_test import DockerClientTest, url_prefix, response from .api_test import DockerClientTest, url_prefix, response
from ..helpers import requires_api_version
from docker.utils import create_ipam_config, create_ipam_pool from docker.utils import create_ipam_config, create_ipam_pool
try: try:
......
import unittest
from docker import ssladapter from docker import ssladapter
try: try:
...@@ -16,10 +17,8 @@ except ImportError: ...@@ -16,10 +17,8 @@ except ImportError:
OP_NO_SSLv3 = 0x2000000 OP_NO_SSLv3 = 0x2000000
OP_NO_TLSv1 = 0x4000000 OP_NO_TLSv1 = 0x4000000
from .. import base
class SSLAdapterTest(unittest.TestCase):
class SSLAdapterTest(base.BaseTestCase):
def test_only_uses_tls(self): def test_only_uses_tls(self):
ssl_context = ssladapter.urllib3.util.ssl_.create_urllib3_context() ssl_context = ssladapter.urllib3.util.ssl_.create_urllib3_context()
...@@ -29,7 +28,7 @@ class SSLAdapterTest(base.BaseTestCase): ...@@ -29,7 +28,7 @@ class SSLAdapterTest(base.BaseTestCase):
assert not ssl_context.options & OP_NO_TLSv1 assert not ssl_context.options & OP_NO_TLSv1
class MatchHostnameTest(base.BaseTestCase): class MatchHostnameTest(unittest.TestCase):
cert = { cert = {
'issuer': ( 'issuer': (
(('countryName', u'US'),), (('countryName', u'US'),),
......
...@@ -8,6 +8,7 @@ import shutil ...@@ -8,6 +8,7 @@ import shutil
import sys import sys
import tarfile import tarfile
import tempfile import tempfile
import unittest
import pytest import pytest
import six import six
...@@ -28,7 +29,6 @@ from docker.utils import ( ...@@ -28,7 +29,6 @@ from docker.utils import (
from docker.utils.ports import build_port_bindings, split_port from docker.utils.ports import build_port_bindings, split_port
from docker.utils.utils import create_endpoint_config, format_environment from docker.utils.utils import create_endpoint_config, format_environment
from .. import base
from ..helpers import make_tree from ..helpers import make_tree
...@@ -38,7 +38,7 @@ TEST_CERT_DIR = os.path.join( ...@@ -38,7 +38,7 @@ TEST_CERT_DIR = os.path.join(
) )
class DecoratorsTest(base.BaseTestCase): class DecoratorsTest(unittest.TestCase):
def test_update_headers(self): def test_update_headers(self):
sample_headers = { sample_headers = {
'X-Docker-Locale': 'en-US', 'X-Docker-Locale': 'en-US',
...@@ -69,7 +69,7 @@ class DecoratorsTest(base.BaseTestCase): ...@@ -69,7 +69,7 @@ class DecoratorsTest(base.BaseTestCase):
} }
class HostConfigTest(base.BaseTestCase): class HostConfigTest(unittest.TestCase):
def test_create_host_config_no_options(self): def test_create_host_config_no_options(self):
config = create_host_config(version='1.19') config = create_host_config(version='1.19')
self.assertFalse('NetworkMode' in config) self.assertFalse('NetworkMode' in config)
...@@ -208,7 +208,7 @@ class HostConfigTest(base.BaseTestCase): ...@@ -208,7 +208,7 @@ class HostConfigTest(base.BaseTestCase):
) )
class UlimitTest(base.BaseTestCase): class UlimitTest(unittest.TestCase):
def test_create_host_config_dict_ulimit(self): def test_create_host_config_dict_ulimit(self):
ulimit_dct = {'name': 'nofile', 'soft': 8096} ulimit_dct = {'name': 'nofile', 'soft': 8096}
config = create_host_config( config = create_host_config(
...@@ -253,7 +253,7 @@ class UlimitTest(base.BaseTestCase): ...@@ -253,7 +253,7 @@ class UlimitTest(base.BaseTestCase):
self.assertRaises(ValueError, lambda: Ulimit(name='hello', hard='456')) self.assertRaises(ValueError, lambda: Ulimit(name='hello', hard='456'))
class LogConfigTest(base.BaseTestCase): class LogConfigTest(unittest.TestCase):
def test_create_host_config_dict_logconfig(self): def test_create_host_config_dict_logconfig(self):
dct = {'type': LogConfig.types.SYSLOG, 'config': {'key1': 'val1'}} dct = {'type': LogConfig.types.SYSLOG, 'config': {'key1': 'val1'}}
config = create_host_config( config = create_host_config(
...@@ -277,7 +277,7 @@ class LogConfigTest(base.BaseTestCase): ...@@ -277,7 +277,7 @@ class LogConfigTest(base.BaseTestCase):
LogConfig(type=LogConfig.types.JSON, config='helloworld') LogConfig(type=LogConfig.types.JSON, config='helloworld')
class KwargsFromEnvTest(base.BaseTestCase): class KwargsFromEnvTest(unittest.TestCase):
def setUp(self): def setUp(self):
self.os_environ = os.environ.copy() self.os_environ = os.environ.copy()
...@@ -377,7 +377,7 @@ class KwargsFromEnvTest(base.BaseTestCase): ...@@ -377,7 +377,7 @@ class KwargsFromEnvTest(base.BaseTestCase):
assert 'tls' not in kwargs assert 'tls' not in kwargs
class ConverVolumeBindsTest(base.BaseTestCase): class ConverVolumeBindsTest(unittest.TestCase):
def test_convert_volume_binds_empty(self): def test_convert_volume_binds_empty(self):
self.assertEqual(convert_volume_binds({}), []) self.assertEqual(convert_volume_binds({}), [])
self.assertEqual(convert_volume_binds([]), []) self.assertEqual(convert_volume_binds([]), [])
...@@ -436,7 +436,7 @@ class ConverVolumeBindsTest(base.BaseTestCase): ...@@ -436,7 +436,7 @@ class ConverVolumeBindsTest(base.BaseTestCase):
) )
class ParseEnvFileTest(base.BaseTestCase): class ParseEnvFileTest(unittest.TestCase):
def generate_tempfile(self, file_content=None): def generate_tempfile(self, file_content=None):
""" """
Generates a temporary file for tests with the content Generates a temporary file for tests with the content
...@@ -479,7 +479,7 @@ class ParseEnvFileTest(base.BaseTestCase): ...@@ -479,7 +479,7 @@ class ParseEnvFileTest(base.BaseTestCase):
os.unlink(env_file) os.unlink(env_file)
class ParseHostTest(base.BaseTestCase): class ParseHostTest(unittest.TestCase):
def test_parse_host(self): def test_parse_host(self):
invalid_hosts = [ invalid_hosts = [
'0.0.0.0', '0.0.0.0',
...@@ -541,7 +541,7 @@ class ParseHostTest(base.BaseTestCase): ...@@ -541,7 +541,7 @@ class ParseHostTest(base.BaseTestCase):
assert parse_host(host_value) == expected_result assert parse_host(host_value) == expected_result
class ParseRepositoryTagTest(base.BaseTestCase): class ParseRepositoryTagTest(unittest.TestCase):
sha = 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' sha = 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
def test_index_image_no_tag(self): def test_index_image_no_tag(self):
...@@ -587,7 +587,7 @@ class ParseRepositoryTagTest(base.BaseTestCase): ...@@ -587,7 +587,7 @@ class ParseRepositoryTagTest(base.BaseTestCase):
) )
class ParseDeviceTest(base.BaseTestCase): class ParseDeviceTest(unittest.TestCase):
def test_dict(self): def test_dict(self):
devices = parse_devices([{ devices = parse_devices([{
'PathOnHost': '/dev/sda1', 'PathOnHost': '/dev/sda1',
...@@ -646,7 +646,7 @@ class ParseDeviceTest(base.BaseTestCase): ...@@ -646,7 +646,7 @@ class ParseDeviceTest(base.BaseTestCase):
}) })
class ParseBytesTest(base.BaseTestCase): class ParseBytesTest(unittest.TestCase):
def test_parse_bytes_valid(self): def test_parse_bytes_valid(self):
self.assertEqual(parse_bytes("512MB"), 536870912) self.assertEqual(parse_bytes("512MB"), 536870912)
self.assertEqual(parse_bytes("512M"), 536870912) self.assertEqual(parse_bytes("512M"), 536870912)
...@@ -666,7 +666,7 @@ class ParseBytesTest(base.BaseTestCase): ...@@ -666,7 +666,7 @@ class ParseBytesTest(base.BaseTestCase):
) )
class UtilsTest(base.BaseTestCase): class UtilsTest(unittest.TestCase):
longMessage = True longMessage = True
def test_convert_filters(self): def test_convert_filters(self):
...@@ -706,7 +706,7 @@ class UtilsTest(base.BaseTestCase): ...@@ -706,7 +706,7 @@ class UtilsTest(base.BaseTestCase):
}) })
class SplitCommandTest(base.BaseTestCase): class SplitCommandTest(unittest.TestCase):
def test_split_command_with_unicode(self): def test_split_command_with_unicode(self):
self.assertEqual(split_command(u'echo μμ'), ['echo', 'μμ']) self.assertEqual(split_command(u'echo μμ'), ['echo', 'μμ'])
...@@ -715,7 +715,7 @@ class SplitCommandTest(base.BaseTestCase): ...@@ -715,7 +715,7 @@ class SplitCommandTest(base.BaseTestCase):
self.assertEqual(split_command('echo μμ'), ['echo', 'μμ']) self.assertEqual(split_command('echo μμ'), ['echo', 'μμ'])
class PortsTest(base.BaseTestCase): class PortsTest(unittest.TestCase):
def test_split_port_with_host_ip(self): def test_split_port_with_host_ip(self):
internal_port, external_port = split_port("127.0.0.1:1000:2000") internal_port, external_port = split_port("127.0.0.1:1000:2000")
self.assertEqual(internal_port, ["2000"]) self.assertEqual(internal_port, ["2000"])
...@@ -821,14 +821,13 @@ class PortsTest(base.BaseTestCase): ...@@ -821,14 +821,13 @@ class PortsTest(base.BaseTestCase):
self.assertEqual(port_bindings["1000"], [("127.0.0.1", "1000")]) self.assertEqual(port_bindings["1000"], [("127.0.0.1", "1000")])
self.assertEqual(port_bindings["2000"], [("127.0.0.1", "2000")]) self.assertEqual(port_bindings["2000"], [("127.0.0.1", "2000")])
def convert_paths(collection): def convert_paths(collection):
if not IS_WINDOWS_PLATFORM: if not IS_WINDOWS_PLATFORM:
return collection return collection
return set(map(lambda x: x.replace('/', '\\'), collection)) return set(map(lambda x: x.replace('/', '\\'), collection))
class ExcludePathsTest(base.BaseTestCase): class ExcludePathsTest(unittest.TestCase):
dirs = [ dirs = [
'foo', 'foo',
'foo/bar', 'foo/bar',
...@@ -1010,7 +1009,7 @@ class ExcludePathsTest(base.BaseTestCase): ...@@ -1010,7 +1009,7 @@ class ExcludePathsTest(base.BaseTestCase):
) )
class TarTest(base.Cleanup, base.BaseTestCase): class TarTest(unittest.TestCase):
def test_tar_with_excludes(self): def test_tar_with_excludes(self):
dirs = [ dirs = [
'foo', 'foo',
......
[tox] [tox]
envlist = py26, py27, py33, py34, py35, flake8 envlist = py27, py33, py34, py35, flake8
skipsdist=True skipsdist=True
[testenv] [testenv]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment