Add helpful error for APIClient methods on Client

Signed-off-by: Ben Firshman <ben@firshman.co.uk>
This commit is contained in:
Ben Firshman 2016-10-21 17:14:17 +02:00
parent c7a3aa7e44
commit b5f7d380d0
No known key found for this signature in database
GPG Key ID: 18296449E36D2F1E
2 changed files with 24 additions and 0 deletions

View File

@ -154,4 +154,14 @@ class Client(object):
return self.api.version(*args, **kwargs)
version.__doc__ = APIClient.version.__doc__
def __getattr__(self, name):
s = ["'Client' object has no attribute '{}'".format(name)]
# If a user calls a method on APIClient, they
if hasattr(APIClient, name):
s.append("In docker-py 2.0, this method is now on the object "
"APIClient. See the low-level API section of the "
"documentation for more details.".format(name))
raise AttributeError(' '.join(s))
from_env = Client.from_env

View File

@ -45,6 +45,20 @@ class ClientTest(unittest.TestCase):
assert client.version() == mock_func.return_value
mock_func.assert_called_with()
def test_call_api_client_method(self):
client = docker.from_env()
with self.assertRaises(AttributeError) as cm:
client.create_container()
s = str(cm.exception)
assert "'Client' object has no attribute 'create_container'" in s
assert "this method is now on the object APIClient" in s
with self.assertRaises(AttributeError) as cm:
client.abcdef()
s = str(cm.exception)
assert "'Client' object has no attribute 'abcdef'" in s
assert "this method is now on the object APIClient" not in s
class FromEnvTest(unittest.TestCase):