diff options
| author | Joffrey F <joffrey@docker.com> | 2015-09-16 14:09:50 -0700 |
|---|---|---|
| committer | Joffrey F <joffrey@docker.com> | 2015-10-14 17:26:50 -0700 |
| commit | 147df4d21feed69ff19a7da99577ba8e7b110b3b (patch) | |
| tree | f17d462f50e1577e8170e367b5b8295c9975a1dd /docker | |
| parent | 6a66a2248d997e2effa98b4cc82546bdd31048c7 (diff) | |
| download | docker-py-147df4d21feed69ff19a7da99577ba8e7b110b3b.tar.gz | |
put/get archive implementation
Signed-off-by: Joffrey F <joffrey@docker.com>
Diffstat (limited to 'docker')
| -rw-r--r-- | docker/api/container.py | 30 | ||||
| -rw-r--r-- | docker/client.py | 3 | ||||
| -rw-r--r-- | docker/utils/__init__.py | 2 | ||||
| -rw-r--r-- | docker/utils/utils.py | 8 |
4 files changed, 42 insertions, 1 deletions
diff --git a/docker/api/container.py b/docker/api/container.py index 94889e9..142bd0f 100644 --- a/docker/api/container.py +++ b/docker/api/container.py @@ -75,6 +75,12 @@ class ContainerApiMixin(object): @utils.check_resource def copy(self, container, resource): + if utils.version_gte(self._version, '1.20'): + warnings.warn( + 'Client.copy() is deprecated for API version >= 1.20, ' + 'please use get_archive() instead', + DeprecationWarning + ) res = self._post_json( self._url("/containers/{0}/copy".format(container)), data={"Resource": resource}, @@ -146,6 +152,21 @@ class ContainerApiMixin(object): return res.raw @utils.check_resource + @utils.minimum_version('1.20') + def get_archive(self, container, path): + params = { + 'path': path + } + url = self._url('/containers/{0}/archive', container) + res = self._get(url, params=params, stream=True) + self._raise_for_status(res) + encoded_stat = res.headers.get('x-docker-container-path-stat') + return ( + res.raw, + utils.decode_json_header(encoded_stat) if encoded_stat else None + ) + + @utils.check_resource def inspect_container(self, container): return self._result( self._get(self._url("/containers/{0}/json", container)), True @@ -215,6 +236,15 @@ class ContainerApiMixin(object): return h_ports @utils.check_resource + @utils.minimum_version('1.20') + def put_archive(self, container, path, data): + params = {'path': path} + url = self._url('/containers/{0}/archive', container) + res = self._put(url, params=params, data=data) + self._raise_for_status(res) + return res.status_code == 200 + + @utils.check_resource def remove_container(self, container, v=False, link=False, force=False): params = {'v': v, 'link': link, 'force': force} res = self._delete( diff --git a/docker/client.py b/docker/client.py index 79efc9f..d219472 100644 --- a/docker/client.py +++ b/docker/client.py @@ -109,6 +109,9 @@ class Client( def _get(self, url, **kwargs): return self.get(url, **self._set_request_timeout(kwargs)) + def _put(self, url, **kwargs): + return self.put(url, **self._set_request_timeout(kwargs)) + def _delete(self, url, **kwargs): return self.delete(url, **self._set_request_timeout(kwargs)) diff --git a/docker/utils/__init__.py b/docker/utils/__init__.py index fd0ef5c..92e03e9 100644 --- a/docker/utils/__init__.py +++ b/docker/utils/__init__.py @@ -3,7 +3,7 @@ from .utils import ( mkbuildcontext, tar, exclude_paths, parse_repository_tag, parse_host, kwargs_from_env, convert_filters, create_host_config, create_container_config, parse_bytes, ping_registry, parse_env_file, - version_lt, version_gte + version_lt, version_gte, decode_json_header ) # flake8: noqa from .types import Ulimit, LogConfig # flake8: noqa diff --git a/docker/utils/utils.py b/docker/utils/utils.py index 1fce137..89837b7 100644 --- a/docker/utils/utils.py +++ b/docker/utils/utils.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import base64 import io import os import os.path @@ -66,6 +67,13 @@ def mkbuildcontext(dockerfile): return f +def decode_json_header(header): + data = base64.b64decode(header) + if six.PY3: + data = data.decode('utf-8') + return json.loads(data) + + def tar(path, exclude=None, dockerfile=None): f = tempfile.NamedTemporaryFile() t = tarfile.open(mode='w', fileobj=f) |
