From 9461035d49ce2e1c0c0320f03585bfb75132b12c Mon Sep 17 00:00:00 2001 From: Satoshi Amemiya Date: Mon, 2 Jun 2014 16:41:52 +0900 Subject: [PATCH] Support get and load image --- docker/client.py | 10 ++++++++++ tests/fake_api.py | 16 ++++++++++++++++ tests/integration_test.py | 2 +- tests/test.py | 24 ++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 1 deletion(-) diff --git a/docker/client.py b/docker/client.py index 0e8832dc..adf14472 100644 --- a/docker/client.py +++ b/docker/client.py @@ -483,6 +483,12 @@ class Client(requests.Session): self._raise_for_status(res) return res.raw + def get_image(self, image): + res = self._get(self._url("/images/{0}/get".format(image)), + stream=True) + self._raise_for_status(res) + return res.raw + def history(self, image): res = self._get(self._url("/images/{0}/history".format(image))) self._raise_for_status(res) @@ -569,6 +575,10 @@ class Client(requests.Session): self._raise_for_status(res) + def load_image(self, data): + res = self._post(self._url("/images/load"), data=data) + self._raise_for_status(res) + def login(self, username, password=None, email=None, registry=None, reauth=False): # If we don't have any auth data so far, try reloading the config file diff --git a/tests/fake_api.py b/tests/fake_api.py index cc729f5e..fc35d610 100644 --- a/tests/fake_api.py +++ b/tests/fake_api.py @@ -254,6 +254,18 @@ def delete_fake_remove_image(): return status_code, response +def get_fake_get_image(): + status_code = 200 + response = 'Byte Stream....' + return status_code, response + + +def post_fake_load_image(): + status_code = 200 + response = {'Id': FAKE_IMAGE_ID} + return status_code, response + + def post_fake_commit(): status_code = 200 response = {'Id': FAKE_CONTAINER_ID} @@ -323,6 +335,10 @@ fake_responses = { post_fake_image_create, '{1}/{0}/images/e9aa60c60128'.format(CURRENT_VERSION, prefix): delete_fake_remove_image, + '{1}/{0}/images/e9aa60c60128/get'.format(CURRENT_VERSION, prefix): + get_fake_get_image, + '{1}/{0}/images/load'.format(CURRENT_VERSION, prefix): + post_fake_load_image, '{1}/{0}/images/test_image/json'.format(CURRENT_VERSION, prefix): get_fake_inspect_image, '{1}/{0}/images/test_image/insert'.format(CURRENT_VERSION, prefix): diff --git a/tests/integration_test.py b/tests/integration_test.py index bd03642a..c79e6d55 100644 --- a/tests/integration_test.py +++ b/tests/integration_test.py @@ -25,7 +25,7 @@ import docker import six # FIXME: missing tests for -# export; history; import_image; insert; port; push; tag +# export; history; import_image; insert; port; push; tag; get; load class BaseTestCase(unittest.TestCase): diff --git a/tests/test.py b/tests/test.py index ba1cf9be..d1d061ea 100644 --- a/tests/test.py +++ b/tests/test.py @@ -1218,6 +1218,30 @@ class DockerClientTest(unittest.TestCase): timeout=docker.client.DEFAULT_TIMEOUT_SECONDS ) + def test_get_image(self): + try: + self.client.get_image(fake_api.FAKE_IMAGE_ID) + except Exception as e: + self.fail('Command should not raise exception: {0}'.format(e)) + + fake_request.assert_called_with( + url_prefix + 'images/e9aa60c60128/get', + stream=True, + timeout=docker.client.DEFAULT_TIMEOUT_SECONDS + ) + + def test_load_image(self): + try: + self.client.load_image('Byte Stream....') + except Exception as e: + self.fail('Command should not raise exception: {0}'.format(e)) + + fake_request.assert_called_with( + url_prefix + 'images/load', + data='Byte Stream....', + timeout=docker.client.DEFAULT_TIMEOUT_SECONDS + ) + ################# # BUILDER TESTS # #################