Kaydet (Commit) 253a52db authored tarafından Ben Firshman's avatar Ben Firshman Kaydeden (comit) Joffrey F

Rename Client to APIClient

Signed-off-by: 's avatarBen Firshman <ben@firshman.co.uk>
üst df887aaa
# flake8: noqa
from .api import APIClient
from .version import version, version_info from .version import version, version_info
__version__ = version __version__ = version
__title__ = 'docker-py' __title__ = 'docker-py'
from .client import Client, from_env # flake8: noqa
# flake8: noqa # flake8: noqa
from .build import BuildApiMixin from .client import APIClient
from .container import ContainerApiMixin
from .daemon import DaemonApiMixin
from .exec_api import ExecApiMixin
from .image import ImageApiMixin
from .network import NetworkApiMixin
from .service import ServiceApiMixin
from .swarm import SwarmApiMixin
from .volume import VolumeApiMixin
...@@ -8,41 +8,59 @@ import requests.exceptions ...@@ -8,41 +8,59 @@ import requests.exceptions
import six import six
import websocket import websocket
from .build import BuildApiMixin
from . import api, auth, constants, errors, ssladapter from .container import ContainerApiMixin
from .tls import TLSConfig from .daemon import DaemonApiMixin
from .transport import UnixAdapter from .exec_api import ExecApiMixin
from .utils import utils, check_resource, update_headers, kwargs_from_env from .image import ImageApiMixin
from .utils.socket import frames_iter from .network import NetworkApiMixin
from .service import ServiceApiMixin
from .swarm import SwarmApiMixin
from .volume import VolumeApiMixin
from .. import auth, ssladapter
from ..constants import (DEFAULT_TIMEOUT_SECONDS, DEFAULT_USER_AGENT,
IS_WINDOWS_PLATFORM, DEFAULT_DOCKER_API_VERSION,
STREAM_HEADER_SIZE_BYTES, DEFAULT_NUM_POOLS,
MINIMUM_DOCKER_API_VERSION)
from ..errors import DockerException, APIError, TLSParameterError, NotFound
from ..tls import TLSConfig
from ..transport import UnixAdapter
from ..utils import utils, check_resource, update_headers, kwargs_from_env
from ..utils.socket import frames_iter
try: try:
from .transport import NpipeAdapter from ..transport import NpipeAdapter
except ImportError: except ImportError:
pass pass
def from_env(**kwargs): def from_env(**kwargs):
return Client.from_env(**kwargs) return APIClient.from_env(**kwargs)
class Client( class APIClient(
requests.Session, requests.Session,
api.BuildApiMixin, BuildApiMixin,
api.ContainerApiMixin, ContainerApiMixin,
api.DaemonApiMixin, DaemonApiMixin,
api.ExecApiMixin, ExecApiMixin,
api.ImageApiMixin, ImageApiMixin,
api.NetworkApiMixin, NetworkApiMixin,
api.ServiceApiMixin, ServiceApiMixin,
api.SwarmApiMixin, SwarmApiMixin,
api.VolumeApiMixin): VolumeApiMixin):
"""
A low-level client for the Docker Remote API.
Each method maps one-to-one with a REST API endpoint, so calling each
method results in a single API call.
"""
def __init__(self, base_url=None, version=None, def __init__(self, base_url=None, version=None,
timeout=constants.DEFAULT_TIMEOUT_SECONDS, tls=False, timeout=DEFAULT_TIMEOUT_SECONDS, tls=False,
user_agent=constants.DEFAULT_USER_AGENT, user_agent=DEFAULT_USER_AGENT, num_pools=DEFAULT_NUM_POOLS):
num_pools=constants.DEFAULT_NUM_POOLS): super(APIClient, self).__init__()
super(Client, self).__init__()
if tls and not base_url: if tls and not base_url:
raise errors.TLSParameterError( raise TLSParameterError(
'If using TLS, the base_url argument must be provided.' 'If using TLS, the base_url argument must be provided.'
) )
...@@ -53,7 +71,7 @@ class Client( ...@@ -53,7 +71,7 @@ class Client(
self._auth_configs = auth.load_config() self._auth_configs = auth.load_config()
base_url = utils.parse_host( base_url = utils.parse_host(
base_url, constants.IS_WINDOWS_PLATFORM, tls=bool(tls) base_url, IS_WINDOWS_PLATFORM, tls=bool(tls)
) )
if base_url.startswith('http+unix://'): if base_url.startswith('http+unix://'):
self._custom_adapter = UnixAdapter( self._custom_adapter = UnixAdapter(
...@@ -63,8 +81,8 @@ class Client( ...@@ -63,8 +81,8 @@ class Client(
self._unmount('http://', 'https://') self._unmount('http://', 'https://')
self.base_url = 'http+docker://localunixsocket' self.base_url = 'http+docker://localunixsocket'
elif base_url.startswith('npipe://'): elif base_url.startswith('npipe://'):
if not constants.IS_WINDOWS_PLATFORM: if not IS_WINDOWS_PLATFORM:
raise errors.DockerException( raise DockerException(
'The npipe:// protocol is only supported on Windows' 'The npipe:// protocol is only supported on Windows'
) )
try: try:
...@@ -72,7 +90,7 @@ class Client( ...@@ -72,7 +90,7 @@ class Client(
base_url, timeout, pool_connections=num_pools base_url, timeout, pool_connections=num_pools
) )
except NameError: except NameError:
raise errors.DockerException( raise DockerException(
'Install pypiwin32 package to enable npipe:// support' 'Install pypiwin32 package to enable npipe:// support'
) )
self.mount('http+docker://', self._custom_adapter) self.mount('http+docker://', self._custom_adapter)
...@@ -90,24 +108,24 @@ class Client( ...@@ -90,24 +108,24 @@ class Client(
# version detection needs to be after unix adapter mounting # version detection needs to be after unix adapter mounting
if version is None: if version is None:
self._version = constants.DEFAULT_DOCKER_API_VERSION self._version = DEFAULT_DOCKER_API_VERSION
elif isinstance(version, six.string_types): elif isinstance(version, six.string_types):
if version.lower() == 'auto': if version.lower() == 'auto':
self._version = self._retrieve_server_version() self._version = self._retrieve_server_version()
else: else:
self._version = version self._version = version
else: else:
raise errors.DockerException( raise DockerException(
'Version parameter must be a string or None. Found {0}'.format( 'Version parameter must be a string or None. Found {0}'.format(
type(version).__name__ type(version).__name__
) )
) )
if utils.version_lt(self._version, constants.MINIMUM_DOCKER_API_VERSION): if utils.version_lt(self._version, MINIMUM_DOCKER_API_VERSION):
warnings.warn( warnings.warn(
'The minimum API version supported is {}, but you are using ' 'The minimum API version supported is {}, but you are using '
'version {}. It is recommended you either upgrade Docker ' 'version {}. It is recommended you either upgrade Docker '
'Engine or use an older version of docker-py.'.format( 'Engine or use an older version of docker-py.'.format(
constants.MINIMUM_DOCKER_API_VERSION, self._version) MINIMUM_DOCKER_API_VERSION, self._version)
) )
@classmethod @classmethod
...@@ -121,12 +139,12 @@ class Client( ...@@ -121,12 +139,12 @@ class Client(
try: try:
return self.version(api_version=False)["ApiVersion"] return self.version(api_version=False)["ApiVersion"]
except KeyError: except KeyError:
raise errors.DockerException( raise DockerException(
'Invalid response from docker daemon: key "ApiVersion"' 'Invalid response from docker daemon: key "ApiVersion"'
' is missing.' ' is missing.'
) )
except Exception as e: except Exception as e:
raise errors.DockerException( raise DockerException(
'Error while fetching server API version: {0}'.format(e) 'Error while fetching server API version: {0}'.format(e)
) )
...@@ -176,8 +194,8 @@ class Client( ...@@ -176,8 +194,8 @@ class Client(
response.raise_for_status() response.raise_for_status()
except requests.exceptions.HTTPError as e: except requests.exceptions.HTTPError as e:
if e.response.status_code == 404: if e.response.status_code == 404:
raise errors.NotFound(e, response, explanation=explanation) raise NotFound(e, response, explanation=explanation)
raise errors.APIError(e, response, explanation=explanation) raise APIError(e, response, explanation=explanation)
def _result(self, response, json=False, binary=False): def _result(self, response, json=False, binary=False):
assert not (json and binary) assert not (json and binary)
...@@ -282,7 +300,7 @@ class Client( ...@@ -282,7 +300,7 @@ class Client(
if len(buf[walker:]) < 8: if len(buf[walker:]) < 8:
break break
_, length = struct.unpack_from('>BxxxL', buf[walker:]) _, length = struct.unpack_from('>BxxxL', buf[walker:])
start = walker + constants.STREAM_HEADER_SIZE_BYTES start = walker + STREAM_HEADER_SIZE_BYTES
end = start + length end = start + length
walker = end walker = end
yield buf[start:end] yield buf[start:end]
...@@ -297,7 +315,7 @@ class Client( ...@@ -297,7 +315,7 @@ class Client(
self._disable_socket_timeout(socket) self._disable_socket_timeout(socket)
while True: while True:
header = response.raw.read(constants.STREAM_HEADER_SIZE_BYTES) header = response.raw.read(STREAM_HEADER_SIZE_BYTES)
if not header: if not header:
break break
_, length = struct.unpack('>BxxxL', header) _, length = struct.unpack('>BxxxL', header)
...@@ -390,7 +408,7 @@ class Client( ...@@ -390,7 +408,7 @@ class Client(
def get_adapter(self, url): def get_adapter(self, url):
try: try:
return super(Client, self).get_adapter(url) return super(APIClient, self).get_adapter(url)
except requests.exceptions.InvalidSchema as e: except requests.exceptions.InvalidSchema as e:
if self._custom_adapter: if self._custom_adapter:
return self._custom_adapter return self._custom_adapter
......
...@@ -25,7 +25,7 @@ class InformationTest(BaseIntegrationTest): ...@@ -25,7 +25,7 @@ class InformationTest(BaseIntegrationTest):
self.assertIn('Debug', res) self.assertIn('Debug', res)
def test_search(self): def test_search(self):
client = docker.from_env(timeout=10) client = docker.APIClient(timeout=10, **kwargs_from_env())
res = client.search('busybox') res = client.search('busybox')
self.assertTrue(len(res) >= 1) self.assertTrue(len(res) >= 1)
base_img = [x for x in res if x['name'] == 'busybox'] base_img = [x for x in res if x['name'] == 'busybox']
...@@ -114,7 +114,7 @@ class LoadConfigTest(BaseIntegrationTest): ...@@ -114,7 +114,7 @@ class LoadConfigTest(BaseIntegrationTest):
class AutoDetectVersionTest(unittest.TestCase): class AutoDetectVersionTest(unittest.TestCase):
def test_client_init(self): def test_client_init(self):
client = docker.from_env(version='auto') client = docker.APIClient(version='auto', **kwargs_from_env())
client_version = client._version client_version = client._version
api_version = client.version(api_version=False)['ApiVersion'] api_version = client.version(api_version=False)['ApiVersion']
self.assertEqual(client_version, api_version) self.assertEqual(client_version, api_version)
...@@ -126,7 +126,7 @@ class AutoDetectVersionTest(unittest.TestCase): ...@@ -126,7 +126,7 @@ class AutoDetectVersionTest(unittest.TestCase):
class ConnectionTimeoutTest(unittest.TestCase): class ConnectionTimeoutTest(unittest.TestCase):
def setUp(self): def setUp(self):
self.timeout = 0.5 self.timeout = 0.5
self.client = docker.client.Client(base_url='http://192.168.10.2:4243', self.client = docker.api.APIClient(base_url='http://192.168.10.2:4243',
timeout=self.timeout) timeout=self.timeout)
def test_timeout(self): def test_timeout(self):
...@@ -155,7 +155,7 @@ class UnixconnTest(unittest.TestCase): ...@@ -155,7 +155,7 @@ class UnixconnTest(unittest.TestCase):
with warnings.catch_warnings(record=True) as w: with warnings.catch_warnings(record=True) as w:
warnings.simplefilter('always') warnings.simplefilter('always')
client = docker.from_env() client = docker.APIClient(**kwargs_from_env())
client.images() client.images()
client.close() client.close()
del client del client
......
from .base import BaseIntegrationTest from .base import BaseAPIIntegrationTest, BUSYBOX
from .base import BUSYBOX
from .. import helpers from .. import helpers
SECOND = 1000000000 SECOND = 1000000000
...@@ -12,7 +11,7 @@ def wait_on_health_status(client, container, status): ...@@ -12,7 +11,7 @@ def wait_on_health_status(client, container, status):
return helpers.wait_on_condition(condition) return helpers.wait_on_condition(condition)
class HealthcheckTest(BaseIntegrationTest): class HealthcheckTest(BaseAPIIntegrationTest):
@helpers.requires_api_version('1.24') @helpers.requires_api_version('1.24')
def test_healthcheck_shell_command(self): def test_healthcheck_shell_command(self):
......
...@@ -2,6 +2,7 @@ import shutil ...@@ -2,6 +2,7 @@ import shutil
import unittest import unittest
import docker import docker
from docker.utils import kwargs_from_env
import six import six
...@@ -23,7 +24,7 @@ class BaseIntegrationTest(unittest.TestCase): ...@@ -23,7 +24,7 @@ class BaseIntegrationTest(unittest.TestCase):
if six.PY2: if six.PY2:
self.assertRegex = self.assertRegexpMatches self.assertRegex = self.assertRegexpMatches
self.assertCountEqual = self.assertItemsEqual self.assertCountEqual = self.assertItemsEqual
self.client = docker.from_env(timeout=60) self.client = docker.APIClient(timeout=60, **kwargs_from_env())
self.tmp_imgs = [] self.tmp_imgs = []
self.tmp_containers = [] self.tmp_containers = []
self.tmp_folders = [] self.tmp_folders = []
......
...@@ -4,6 +4,7 @@ import sys ...@@ -4,6 +4,7 @@ import sys
import warnings import warnings
import docker.errors import docker.errors
from docker.utils import kwargs_from_env
import pytest import pytest
from .base import BUSYBOX from .base import BUSYBOX
...@@ -12,7 +13,7 @@ from .base import BUSYBOX ...@@ -12,7 +13,7 @@ from .base import BUSYBOX
@pytest.fixture(autouse=True, scope='session') @pytest.fixture(autouse=True, scope='session')
def setup_test_session(): def setup_test_session():
warnings.simplefilter('error') warnings.simplefilter('error')
c = docker.from_env() c = docker.APIClient(**kwargs_from_env())
try: try:
c.inspect_image(BUSYBOX) c.inspect_image(BUSYBOX)
except docker.errors.NotFound: except docker.errors.NotFound:
......
import os import os
import unittest import unittest
from docker.client import Client from docker.api import APIClient
TEST_CERT_DIR = os.path.join( TEST_CERT_DIR = os.path.join(
os.path.dirname(__file__), os.path.dirname(__file__),
...@@ -23,14 +23,14 @@ class ClientTest(unittest.TestCase): ...@@ -23,14 +23,14 @@ class ClientTest(unittest.TestCase):
os.environ.update(DOCKER_HOST='tcp://192.168.59.103:2376', os.environ.update(DOCKER_HOST='tcp://192.168.59.103:2376',
DOCKER_CERT_PATH=TEST_CERT_DIR, DOCKER_CERT_PATH=TEST_CERT_DIR,
DOCKER_TLS_VERIFY='1') DOCKER_TLS_VERIFY='1')
client = Client.from_env() client = APIClient.from_env()
self.assertEqual(client.base_url, "https://192.168.59.103:2376") self.assertEqual(client.base_url, "https://192.168.59.103:2376")
def test_from_env_with_version(self): def test_from_env_with_version(self):
os.environ.update(DOCKER_HOST='tcp://192.168.59.103:2376', os.environ.update(DOCKER_HOST='tcp://192.168.59.103:2376',
DOCKER_CERT_PATH=TEST_CERT_DIR, DOCKER_CERT_PATH=TEST_CERT_DIR,
DOCKER_TLS_VERIFY='1') DOCKER_TLS_VERIFY='1')
client = Client.from_env(version='2.32') client = APIClient.from_env(version='2.32')
self.assertEqual(client.base_url, "https://192.168.59.103:2376") self.assertEqual(client.base_url, "https://192.168.59.103:2376")
self.assertEqual(client._version, '2.32') self.assertEqual(client._version, '2.32')
...@@ -47,7 +47,7 @@ class DisableSocketTest(unittest.TestCase): ...@@ -47,7 +47,7 @@ class DisableSocketTest(unittest.TestCase):
return self.timeout return self.timeout
def setUp(self): def setUp(self):
self.client = Client() self.client = APIClient()
def test_disable_socket_timeout(self): def test_disable_socket_timeout(self):
"""Test that the timeout is disabled on a generic socket object.""" """Test that the timeout is disabled on a generic socket object."""
......
...@@ -1244,7 +1244,7 @@ class ContainerTest(DockerClientTest): ...@@ -1244,7 +1244,7 @@ class ContainerTest(DockerClientTest):
) )
def test_logs(self): def test_logs(self):
with mock.patch('docker.Client.inspect_container', with mock.patch('docker.api.client.APIClient.inspect_container',
fake_inspect_container): fake_inspect_container):
logs = self.client.logs(fake_api.FAKE_CONTAINER_ID) logs = self.client.logs(fake_api.FAKE_CONTAINER_ID)
...@@ -1263,7 +1263,7 @@ class ContainerTest(DockerClientTest): ...@@ -1263,7 +1263,7 @@ class ContainerTest(DockerClientTest):
) )
def test_logs_with_dict_instead_of_id(self): def test_logs_with_dict_instead_of_id(self):
with mock.patch('docker.Client.inspect_container', with mock.patch('docker.api.client.APIClient.inspect_container',
fake_inspect_container): fake_inspect_container):
logs = self.client.logs({'Id': fake_api.FAKE_CONTAINER_ID}) logs = self.client.logs({'Id': fake_api.FAKE_CONTAINER_ID})
...@@ -1282,7 +1282,7 @@ class ContainerTest(DockerClientTest): ...@@ -1282,7 +1282,7 @@ class ContainerTest(DockerClientTest):
) )
def test_log_streaming(self): def test_log_streaming(self):
with mock.patch('docker.Client.inspect_container', with mock.patch('docker.api.client.APIClient.inspect_container',
fake_inspect_container): fake_inspect_container):
self.client.logs(fake_api.FAKE_CONTAINER_ID, stream=True, self.client.logs(fake_api.FAKE_CONTAINER_ID, stream=True,
follow=False) follow=False)
...@@ -1297,7 +1297,7 @@ class ContainerTest(DockerClientTest): ...@@ -1297,7 +1297,7 @@ class ContainerTest(DockerClientTest):
) )
def test_log_following(self): def test_log_following(self):
with mock.patch('docker.Client.inspect_container', with mock.patch('docker.api.client.APIClient.inspect_container',
fake_inspect_container): fake_inspect_container):
self.client.logs(fake_api.FAKE_CONTAINER_ID, stream=False, self.client.logs(fake_api.FAKE_CONTAINER_ID, stream=False,
follow=True) follow=True)
...@@ -1312,7 +1312,7 @@ class ContainerTest(DockerClientTest): ...@@ -1312,7 +1312,7 @@ class ContainerTest(DockerClientTest):
) )
def test_log_following_backwards(self): def test_log_following_backwards(self):
with mock.patch('docker.Client.inspect_container', with mock.patch('docker.api.client.APIClient.inspect_container',
fake_inspect_container): fake_inspect_container):
self.client.logs(fake_api.FAKE_CONTAINER_ID, stream=True) self.client.logs(fake_api.FAKE_CONTAINER_ID, stream=True)
...@@ -1326,7 +1326,7 @@ class ContainerTest(DockerClientTest): ...@@ -1326,7 +1326,7 @@ class ContainerTest(DockerClientTest):
) )
def test_log_streaming_and_following(self): def test_log_streaming_and_following(self):
with mock.patch('docker.Client.inspect_container', with mock.patch('docker.api.client.APIClient.inspect_container',
fake_inspect_container): fake_inspect_container):
self.client.logs(fake_api.FAKE_CONTAINER_ID, stream=True, self.client.logs(fake_api.FAKE_CONTAINER_ID, stream=True,
follow=True) follow=True)
...@@ -1342,7 +1342,7 @@ class ContainerTest(DockerClientTest): ...@@ -1342,7 +1342,7 @@ class ContainerTest(DockerClientTest):
def test_log_tail(self): def test_log_tail(self):
with mock.patch('docker.Client.inspect_container', with mock.patch('docker.api.client.APIClient.inspect_container',
fake_inspect_container): fake_inspect_container):
self.client.logs(fake_api.FAKE_CONTAINER_ID, stream=False, self.client.logs(fake_api.FAKE_CONTAINER_ID, stream=False,
follow=False, tail=10) follow=False, tail=10)
...@@ -1358,7 +1358,7 @@ class ContainerTest(DockerClientTest): ...@@ -1358,7 +1358,7 @@ class ContainerTest(DockerClientTest):
def test_log_since(self): def test_log_since(self):
ts = 809222400 ts = 809222400
with mock.patch('docker.Client.inspect_container', with mock.patch('docker.api.client.APIClient.inspect_container',
fake_inspect_container): fake_inspect_container):
self.client.logs(fake_api.FAKE_CONTAINER_ID, stream=False, self.client.logs(fake_api.FAKE_CONTAINER_ID, stream=False,
follow=False, since=ts) follow=False, since=ts)
...@@ -1375,7 +1375,7 @@ class ContainerTest(DockerClientTest): ...@@ -1375,7 +1375,7 @@ class ContainerTest(DockerClientTest):
def test_log_since_with_datetime(self): def test_log_since_with_datetime(self):
ts = 809222400 ts = 809222400
time = datetime.datetime.utcfromtimestamp(ts) time = datetime.datetime.utcfromtimestamp(ts)
with mock.patch('docker.Client.inspect_container', with mock.patch('docker.api.client.APIClient.inspect_container',
fake_inspect_container): fake_inspect_container):
self.client.logs(fake_api.FAKE_CONTAINER_ID, stream=False, self.client.logs(fake_api.FAKE_CONTAINER_ID, stream=False,
follow=False, since=time) follow=False, since=time)
...@@ -1391,9 +1391,9 @@ class ContainerTest(DockerClientTest): ...@@ -1391,9 +1391,9 @@ class ContainerTest(DockerClientTest):
def test_log_tty(self): def test_log_tty(self):
m = mock.Mock() m = mock.Mock()
with mock.patch('docker.Client.inspect_container', with mock.patch('docker.api.client.APIClient.inspect_container',
fake_inspect_container_tty): fake_inspect_container_tty):
with mock.patch('docker.Client._stream_raw_result', with mock.patch('docker.api.client.APIClient._stream_raw_result',
m): m):
self.client.logs(fake_api.FAKE_CONTAINER_ID, self.client.logs(fake_api.FAKE_CONTAINER_ID,
follow=True, stream=True) follow=True, stream=True)
......
...@@ -33,7 +33,7 @@ class NetworkTest(DockerClientTest): ...@@ -33,7 +33,7 @@ class NetworkTest(DockerClientTest):
get = mock.Mock(return_value=response( get = mock.Mock(return_value=response(
status_code=200, content=json.dumps(networks).encode('utf-8'))) status_code=200, content=json.dumps(networks).encode('utf-8')))
with mock.patch('docker.Client.get', get): with mock.patch('docker.api.client.APIClient.get', get):
self.assertEqual(self.client.networks(), networks) self.assertEqual(self.client.networks(), networks)
self.assertEqual(get.call_args[0][0], url_prefix + 'networks') self.assertEqual(get.call_args[0][0], url_prefix + 'networks')
...@@ -59,7 +59,7 @@ class NetworkTest(DockerClientTest): ...@@ -59,7 +59,7 @@ class NetworkTest(DockerClientTest):
network_response = response(status_code=200, content=network_data) network_response = response(status_code=200, content=network_data)
post = mock.Mock(return_value=network_response) post = mock.Mock(return_value=network_response)
with mock.patch('docker.Client.post', post): with mock.patch('docker.api.client.APIClient.post', post):
result = self.client.create_network('foo') result = self.client.create_network('foo')
self.assertEqual(result, network_data) self.assertEqual(result, network_data)
...@@ -110,7 +110,7 @@ class NetworkTest(DockerClientTest): ...@@ -110,7 +110,7 @@ class NetworkTest(DockerClientTest):
network_id = 'abc12345' network_id = 'abc12345'
delete = mock.Mock(return_value=response(status_code=200)) delete = mock.Mock(return_value=response(status_code=200))
with mock.patch('docker.Client.delete', delete): with mock.patch('docker.api.client.APIClient.delete', delete):
self.client.remove_network(network_id) self.client.remove_network(network_id)
args = delete.call_args args = delete.call_args
...@@ -131,7 +131,7 @@ class NetworkTest(DockerClientTest): ...@@ -131,7 +131,7 @@ class NetworkTest(DockerClientTest):
network_response = response(status_code=200, content=network_data) network_response = response(status_code=200, content=network_data)
get = mock.Mock(return_value=network_response) get = mock.Mock(return_value=network_response)
with mock.patch('docker.Client.get', get): with mock.patch('docker.api.client.APIClient.get', get):
result = self.client.inspect_network(network_id) result = self.client.inspect_network(network_id)
self.assertEqual(result, network_data) self.assertEqual(result, network_data)
...@@ -146,7 +146,7 @@ class NetworkTest(DockerClientTest): ...@@ -146,7 +146,7 @@ class NetworkTest(DockerClientTest):
post = mock.Mock(return_value=response(status_code=201)) post = mock.Mock(return_value=response(status_code=201))
with mock.patch('docker.Client.post', post): with mock.patch('docker.api.client.APIClient.post', post):
self.client.connect_container_to_network( self.client.connect_container_to_network(
{'Id': container_id}, {'Id': container_id},
network_id, network_id,
...@@ -175,7 +175,7 @@ class NetworkTest(DockerClientTest): ...@@ -175,7 +175,7 @@ class NetworkTest(DockerClientTest):
post = mock.Mock(return_value=response(status_code=201)) post = mock.Mock(return_value=response(status_code=201))
with mock.patch('docker.Client.post', post): with mock.patch('docker.api.client.APIClient.post', post):
self.client.disconnect_container_from_network( self.client.disconnect_container_from_network(
{'Id': container_id}, network_id) {'Id': container_id}, network_id)
......
...@@ -11,6 +11,7 @@ import time ...@@ -11,6 +11,7 @@ import time
import unittest import unittest
import docker import docker
from docker.api import APIClient
import requests import requests
from requests.packages import urllib3 from requests.packages import urllib3
import six import six
...@@ -95,12 +96,15 @@ url_prefix = '{0}v{1}/'.format( ...@@ -95,12 +96,15 @@ url_prefix = '{0}v{1}/'.format(
class DockerClientTest(unittest.TestCase): 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.api.client.APIClient',
get=fake_get,
post=fake_post,
put=fake_put,
delete=fake_delete, delete=fake_delete,
_read_from_socket=fake_read_from_socket _read_from_socket=fake_read_from_socket
) )
self.patcher.start() self.patcher.start()
self.client = docker.Client() self.client = APIClient()
# Force-clear authconfig to avoid tampering with the tests # Force-clear authconfig to avoid tampering with the tests
self.client._cfg = {'Configs': {}} self.client._cfg = {'Configs': {}}
...@@ -122,7 +126,7 @@ class DockerClientTest(unittest.TestCase): ...@@ -122,7 +126,7 @@ class DockerClientTest(unittest.TestCase):
class DockerApiTest(DockerClientTest): class DockerApiTest(DockerClientTest):
def test_ctor(self): def test_ctor(self):
with pytest.raises(docker.errors.DockerException) as excinfo: with pytest.raises(docker.errors.DockerException) as excinfo:
docker.Client(version=1.12) APIClient(version=1.12)
self.assertEqual( self.assertEqual(
str(excinfo.value), str(excinfo.value),
...@@ -189,7 +193,7 @@ class DockerApiTest(DockerClientTest): ...@@ -189,7 +193,7 @@ class DockerApiTest(DockerClientTest):
) )
def test_retrieve_server_version(self): def test_retrieve_server_version(self):
client = docker.Client(version="auto") client = APIClient(version="auto")
self.assertTrue(isinstance(client._version, six.string_types)) self.assertTrue(isinstance(client._version, six.string_types))
self.assertFalse(client._version == "auto") self.assertFalse(client._version == "auto")
client.close() client.close()
...@@ -269,27 +273,27 @@ class DockerApiTest(DockerClientTest): ...@@ -269,27 +273,27 @@ class DockerApiTest(DockerClientTest):
return socket_adapter.socket_path return socket_adapter.socket_path
def test_url_compatibility_unix(self): def test_url_compatibility_unix(self):
c = docker.Client(base_url="unix://socket") c = APIClient(base_url="unix://socket")
assert self._socket_path_for_client_session(c) == '/socket' assert self._socket_path_for_client_session(c) == '/socket'
def test_url_compatibility_unix_triple_slash(self): def test_url_compatibility_unix_triple_slash(self):
c = docker.Client(base_url="unix:///socket") c = APIClient(base_url="unix:///socket")
assert self._socket_path_for_client_session(c) == '/socket' assert self._socket_path_for_client_session(c) == '/socket'
def test_url_compatibility_http_unix_triple_slash(self): def test_url_compatibility_http_unix_triple_slash(self):
c = docker.Client(base_url="http+unix:///socket") c = APIClient(base_url="http+unix:///socket")
assert self._socket_path_for_client_session(c) == '/socket' assert self._socket_path_for_client_session(c) == '/socket'
def test_url_compatibility_http(self): def test_url_compatibility_http(self):
c = docker.Client(base_url="http://hostname:1234") c = APIClient(base_url="http://hostname:1234")
assert c.base_url == "http://hostname:1234" assert c.base_url == "http://hostname:1234"
def test_url_compatibility_tcp(self): def test_url_compatibility_tcp(self):
c = docker.Client(base_url="tcp://hostname:1234") c = APIClient(base_url="tcp://hostname:1234")
assert c.base_url == "http://hostname:1234" assert c.base_url == "http://hostname:1234"
...@@ -435,7 +439,7 @@ class StreamTest(unittest.TestCase): ...@@ -435,7 +439,7 @@ class StreamTest(unittest.TestCase):
b'\r\n' b'\r\n'
) + b'\r\n'.join(lines) ) + b'\r\n'.join(lines)
with docker.Client(base_url="http+unix://" + self.socket_file) \ with APIClient(base_url="http+unix://" + self.socket_file) \
as client: as client:
for i in range(5): for i in range(5):
try: try:
...@@ -455,7 +459,7 @@ class StreamTest(unittest.TestCase): ...@@ -455,7 +459,7 @@ class StreamTest(unittest.TestCase):
class UserAgentTest(unittest.TestCase): class UserAgentTest(unittest.TestCase):
def setUp(self): def setUp(self):
self.patcher = mock.patch.object( self.patcher = mock.patch.object(
docker.Client, APIClient,
'send', 'send',
return_value=fake_resp("GET", "%s/version" % fake_api.prefix) return_value=fake_resp("GET", "%s/version" % fake_api.prefix)
) )
...@@ -465,7 +469,7 @@ class UserAgentTest(unittest.TestCase): ...@@ -465,7 +469,7 @@ class UserAgentTest(unittest.TestCase):
self.patcher.stop() self.patcher.stop()
def test_default_user_agent(self): def test_default_user_agent(self):
client = docker.Client() client = APIClient()
client.version() client.version()
self.assertEqual(self.mock_send.call_count, 1) self.assertEqual(self.mock_send.call_count, 1)
...@@ -474,7 +478,7 @@ class UserAgentTest(unittest.TestCase): ...@@ -474,7 +478,7 @@ class UserAgentTest(unittest.TestCase):
self.assertEqual(headers['User-Agent'], expected) self.assertEqual(headers['User-Agent'], expected)
def test_custom_user_agent(self): def test_custom_user_agent(self):
client = docker.Client(user_agent='foo/bar') client = APIClient(user_agent='foo/bar')
client.version() client.version()
self.assertEqual(self.mock_send.call_count, 1) self.assertEqual(self.mock_send.call_count, 1)
......
...@@ -13,10 +13,8 @@ import unittest ...@@ -13,10 +13,8 @@ import unittest
import pytest import pytest
import six import six
from docker.client import Client from docker.api.client import APIClient
from docker.constants import ( from docker.constants import DEFAULT_DOCKER_API_VERSION, IS_WINDOWS_PLATFORM
DEFAULT_DOCKER_API_VERSION, IS_WINDOWS_PLATFORM
)
from docker.errors import DockerException, InvalidVersion from docker.errors import DockerException, InvalidVersion
from docker.utils import ( from docker.utils import (
parse_repository_tag, parse_host, convert_filters, kwargs_from_env, parse_repository_tag, parse_host, convert_filters, kwargs_from_env,
...@@ -47,7 +45,7 @@ class DecoratorsTest(unittest.TestCase): ...@@ -47,7 +45,7 @@ class DecoratorsTest(unittest.TestCase):
def f(self, headers=None): def f(self, headers=None):
return headers return headers
client = Client() client = APIClient()
client._auth_configs = {} client._auth_configs = {}
g = update_headers(f) g = update_headers(f)
...@@ -305,7 +303,7 @@ class KwargsFromEnvTest(unittest.TestCase): ...@@ -305,7 +303,7 @@ class KwargsFromEnvTest(unittest.TestCase):
self.assertEqual(False, kwargs['tls'].assert_hostname) self.assertEqual(False, kwargs['tls'].assert_hostname)
self.assertTrue(kwargs['tls'].verify) self.assertTrue(kwargs['tls'].verify)
try: try:
client = Client(**kwargs) client = APIClient(**kwargs)
self.assertEqual(kwargs['base_url'], client.base_url) self.assertEqual(kwargs['base_url'], client.base_url)
self.assertEqual(kwargs['tls'].ca_cert, client.verify) self.assertEqual(kwargs['tls'].ca_cert, client.verify)
self.assertEqual(kwargs['tls'].cert, client.cert) self.assertEqual(kwargs['tls'].cert, client.cert)
...@@ -324,7 +322,7 @@ class KwargsFromEnvTest(unittest.TestCase): ...@@ -324,7 +322,7 @@ class KwargsFromEnvTest(unittest.TestCase):
self.assertEqual(True, kwargs['tls'].assert_hostname) self.assertEqual(True, kwargs['tls'].assert_hostname)
self.assertEqual(False, kwargs['tls'].verify) self.assertEqual(False, kwargs['tls'].verify)
try: try:
client = Client(**kwargs) client = APIClient(**kwargs)
self.assertEqual(kwargs['base_url'], client.base_url) self.assertEqual(kwargs['base_url'], client.base_url)
self.assertEqual(kwargs['tls'].cert, client.cert) self.assertEqual(kwargs['tls'].cert, client.cert)
self.assertFalse(kwargs['tls'].verify) self.assertFalse(kwargs['tls'].verify)
...@@ -822,6 +820,7 @@ class PortsTest(unittest.TestCase): ...@@ -822,6 +820,7 @@ class PortsTest(unittest.TestCase):
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
...@@ -1094,7 +1093,7 @@ class TarTest(unittest.TestCase): ...@@ -1094,7 +1093,7 @@ class TarTest(unittest.TestCase):
) )
class FormatEnvironmentTest(base.BaseTestCase): class FormatEnvironmentTest(unittest.TestCase):
def test_format_env_binary_unicode_value(self): def test_format_env_binary_unicode_value(self):
env_dict = { env_dict = {
'ARTIST_NAME': b'\xec\x86\xa1\xec\xa7\x80\xec\x9d\x80' 'ARTIST_NAME': b'\xec\x86\xa1\xec\xa7\x80\xec\x9d\x80'
......
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