Hello community, here is the log from the commit of package python-docker for openSUSE:Factory checked in at 2020-06-15 20:28:36 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-docker (Old) and /work/SRC/openSUSE:Factory/.python-docker.new.3606 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-docker" Mon Jun 15 20:28:36 2020 rev:18 rq:814541 version:4.2.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-docker/python-docker.changes 2020-02-11 22:24:30.899538305 +0100 +++ /work/SRC/openSUSE:Factory/.python-docker.new.3606/python-docker.changes 2020-06-15 20:28:48.066019001 +0200 @@ -1,0 +2,7 @@ +Mon Jun 8 13:35:57 UTC 2020 - Dirk Mueller <[email protected]> + +- update to 4.2.1: + - Add option on when to use `tls` on Context constructor + - Make context orchestrator field optional + +------------------------------------------------------------------- Old: ---- 4.2.0.tar.gz New: ---- 4.2.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-docker.spec ++++++ --- /var/tmp/diff_new_pack.SkleJf/_old 2020-06-15 20:28:50.150026221 +0200 +++ /var/tmp/diff_new_pack.SkleJf/_new 2020-06-15 20:28:50.154026235 +0200 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define oldpython python Name: python-docker -Version: 4.2.0 +Version: 4.2.1 Release: 0 Summary: Docker API Client License: Apache-2.0 ++++++ 4.2.0.tar.gz -> 4.2.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-py-4.2.0/Jenkinsfile new/docker-py-4.2.1/Jenkinsfile --- old/docker-py-4.2.0/Jenkinsfile 2020-02-06 11:43:03.000000000 +0100 +++ new/docker-py-4.2.1/Jenkinsfile 2020-06-02 16:15:59.000000000 +0200 @@ -31,7 +31,7 @@ } def getDockerVersions = { -> - def dockerVersions = ["17.06.2-ce"] + def dockerVersions = ["19.03.5"] wrappedNode(label: "ubuntu && !zfs && amd64") { def result = sh(script: """docker run --rm \\ --entrypoint=python \\ @@ -46,8 +46,6 @@ def getAPIVersion = { engineVersion -> def versionMap = [ - '17.06': '1.30', - '18.03': '1.37', '18.09': '1.39', '19.03': '1.40' ] @@ -84,7 +82,7 @@ try { sh """docker network create ${testNetwork}""" sh """docker run -d --name ${dindContainerName} -v /tmp --privileged --network ${testNetwork} \\ - dockerswarm/dind:${dockerVersion} dockerd -H tcp://0.0.0.0:2375 + docker:${dockerVersion}-dind dockerd -H tcp://0.0.0.0:2375 """ sh """docker run \\ --name ${testContainerName} \\ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-py-4.2.0/Makefile new/docker-py-4.2.1/Makefile --- old/docker-py-4.2.0/Makefile 2020-02-06 11:43:03.000000000 +0100 +++ new/docker-py-4.2.1/Makefile 2020-06-02 16:15:59.000000000 +0200 @@ -42,7 +42,7 @@ docker run -t --rm -v /var/run/docker.sock:/var/run/docker.sock docker-sdk-python3 py.test -v tests/integration/${file} TEST_API_VERSION ?= 1.35 -TEST_ENGINE_VERSION ?= 18.09.5 +TEST_ENGINE_VERSION ?= 19.03.5 .PHONY: setup-network setup-network: @@ -55,7 +55,7 @@ integration-dind-py2: build setup-network docker rm -vf dpy-dind-py2 || : docker run -d --network dpy-tests --name dpy-dind-py2 --privileged\ - dockerswarm/dind:${TEST_ENGINE_VERSION} dockerd -H tcp://0.0.0.0:2375 --experimental + docker:${TEST_ENGINE_VERSION}-dind dockerd -H tcp://0.0.0.0:2375 --experimental docker run -t --rm --env="DOCKER_HOST=tcp://dpy-dind-py2:2375" --env="DOCKER_TEST_API_VERSION=${TEST_API_VERSION}"\ --network dpy-tests docker-sdk-python py.test tests/integration docker rm -vf dpy-dind-py2 @@ -64,7 +64,7 @@ integration-dind-py3: build-py3 setup-network docker rm -vf dpy-dind-py3 || : docker run -d --network dpy-tests --name dpy-dind-py3 --privileged\ - dockerswarm/dind:${TEST_ENGINE_VERSION} dockerd -H tcp://0.0.0.0:2375 --experimental + docker:${TEST_ENGINE_VERSION}-dind dockerd -H tcp://0.0.0.0:2375 --experimental docker run -t --rm --env="DOCKER_HOST=tcp://dpy-dind-py3:2375" --env="DOCKER_TEST_API_VERSION=${TEST_API_VERSION}"\ --network dpy-tests docker-sdk-python3 py.test tests/integration docker rm -vf dpy-dind-py3 @@ -76,7 +76,7 @@ docker run -d --env="DOCKER_HOST=tcp://localhost:2375" --env="DOCKER_TLS_VERIFY=1"\ --env="DOCKER_CERT_PATH=/certs" --volumes-from dpy-dind-certs --name dpy-dind-ssl\ --network dpy-tests --network-alias docker -v /tmp --privileged\ - dockerswarm/dind:${TEST_ENGINE_VERSION}\ + docker:${TEST_ENGINE_VERSION}-dind\ dockerd --tlsverify --tlscacert=/certs/ca.pem --tlscert=/certs/server-cert.pem\ --tlskey=/certs/server-key.pem -H tcp://0.0.0.0:2375 --experimental docker run -t --rm --volumes-from dpy-dind-ssl --env="DOCKER_HOST=tcp://docker:2375"\ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-py-4.2.0/docker/context/api.py new/docker-py-4.2.1/docker/context/api.py --- old/docker-py-4.2.0/docker/context/api.py 2020-02-06 11:43:03.000000000 +0100 +++ new/docker-py-4.2.1/docker/context/api.py 2020-06-02 16:15:59.000000000 +0200 @@ -14,11 +14,11 @@ Contains methods for context management: create, list, remove, get, inspect. """ - DEFAULT_CONTEXT = Context("default") + DEFAULT_CONTEXT = Context("default", "swarm") @classmethod def create_context( - cls, name, orchestrator="swarm", host=None, tls_cfg=None, + cls, name, orchestrator=None, host=None, tls_cfg=None, default_namespace=None, skip_tls_verify=False): """Creates a new context. Returns: @@ -38,9 +38,7 @@ >>> print(ctx.Metadata) { "Name": "test", - "Metadata": { - "StackOrchestrator": "swarm" - }, + "Metadata": {}, "Endpoints": { "docker": { "Host": "unix:///var/run/docker.sock", @@ -57,7 +55,9 @@ ctx = Context.load_context(name) if ctx: raise errors.ContextAlreadyExists(name) - endpoint = "docker" if orchestrator == "swarm" else orchestrator + endpoint = "docker" + if orchestrator and orchestrator != "swarm": + endpoint = orchestrator ctx = Context(name, orchestrator) ctx.set_endpoint( endpoint, host, tls_cfg, @@ -79,9 +79,7 @@ >>> print(ctx.Metadata) { "Name": "test", - "Metadata": { - "StackOrchestrator": "swarm" - }, + "Metadata": {}, "Endpoints": { "docker": { "Host": "unix:///var/run/docker.sock", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-py-4.2.0/docker/context/config.py new/docker-py-4.2.1/docker/context/config.py --- old/docker-py-4.2.0/docker/context/config.py 2020-02-06 11:43:03.000000000 +0100 +++ new/docker-py-4.2.1/docker/context/config.py 2020-06-02 16:15:59.000000000 +0200 @@ -73,8 +73,8 @@ return os.path.join(context_dir, "tls") -def get_context_host(path=None): - host = utils.parse_host(path, IS_WINDOWS_PLATFORM) +def get_context_host(path=None, tls=False): + host = utils.parse_host(path, IS_WINDOWS_PLATFORM, tls) if host == DEFAULT_UNIX_SOCKET: # remove http+ from default docker socket url return host.strip("http+") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-py-4.2.0/docker/context/context.py new/docker-py-4.2.1/docker/context/context.py --- old/docker-py-4.2.0/docker/context/context.py 2020-02-06 11:43:03.000000000 +0100 +++ new/docker-py-4.2.1/docker/context/context.py 2020-06-02 16:15:59.000000000 +0200 @@ -11,19 +11,20 @@ class Context: """A context.""" - def __init__(self, name, orchestrator="swarm", host=None, endpoints=None): + def __init__(self, name, orchestrator=None, host=None, endpoints=None, + tls=False): if not name: raise Exception("Name not provided") self.name = name self.orchestrator = orchestrator if not endpoints: default_endpoint = "docker" if ( - orchestrator == "swarm" + not orchestrator or orchestrator == "swarm" ) else orchestrator self.endpoints = { default_endpoint: { - "Host": get_context_host(host), - "SkipTLSVerify": False + "Host": get_context_host(host, tls), + "SkipTLSVerify": not tls } } else: @@ -44,7 +45,7 @@ self, name="docker", host=None, tls_cfg=None, skip_tls_verify=False, def_namespace=None): self.endpoints[name] = { - "Host": get_context_host(host), + "Host": get_context_host(host, not skip_tls_verify), "SkipTLSVerify": skip_tls_verify } if def_namespace: @@ -84,7 +85,8 @@ context {} : {}""".format(name, e)) return ( - metadata["Name"], metadata["Metadata"]["StackOrchestrator"], + metadata["Name"], + metadata["Metadata"].get("StackOrchestrator", None), metadata["Endpoints"]) return None, None, None @@ -161,7 +163,7 @@ @property def Host(self): - if self.orchestrator == "swarm": + if not self.orchestrator or self.orchestrator == "swarm": return self.endpoints["docker"]["Host"] return self.endpoints[self.orchestrator]["Host"] @@ -171,18 +173,19 @@ @property def Metadata(self): + meta = {} + if self.orchestrator: + meta = {"StackOrchestrator": self.orchestrator} return { "Name": self.name, - "Metadata": { - "StackOrchestrator": self.orchestrator - }, + "Metadata": meta, "Endpoints": self.endpoints } @property def TLSConfig(self): key = self.orchestrator - if key == "swarm": + if not key or key == "swarm": key = "docker" if key in self.tls_cfg.keys(): return self.tls_cfg[key] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-py-4.2.0/docker/version.py new/docker-py-4.2.1/docker/version.py --- old/docker-py-4.2.0/docker/version.py 2020-02-06 11:43:03.000000000 +0100 +++ new/docker-py-4.2.1/docker/version.py 2020-06-02 16:15:59.000000000 +0200 @@ -1,2 +1,2 @@ -version = "4.2.0" +version = "4.2.1" version_info = tuple([int(d) for d in version.split("-")[0].split(".")]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-py-4.2.0/docs/change-log.md new/docker-py-4.2.1/docs/change-log.md --- old/docker-py-4.2.0/docs/change-log.md 2020-02-06 11:43:03.000000000 +0100 +++ new/docker-py-4.2.1/docs/change-log.md 2020-06-02 16:15:59.000000000 +0200 @@ -1,6 +1,16 @@ Change log ========== +4.2.1 +----- + +[List of PRs / issues for this release](https://github.com/docker/docker-py/milestone/65?closed=1) + +### Features + +- Add option on when to use `tls` on Context constructor +- Make context orchestrator field optional + 4.2.0 ----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-py-4.2.0/tests/integration/api_container_test.py new/docker-py-4.2.1/tests/integration/api_container_test.py --- old/docker-py-4.2.0/tests/integration/api_container_test.py 2020-02-06 11:43:03.000000000 +0100 +++ new/docker-py-4.2.1/tests/integration/api_container_test.py 2020-06-02 16:15:59.000000000 +0200 @@ -273,11 +273,14 @@ def test_invalid_log_driver_raises_exception(self): log_config = docker.types.LogConfig( - type='asdf-nope', + type='asdf', config={} ) - expected_msg = "logger: no log driver named 'asdf-nope' is registered" + expected_msgs = [ + "logger: no log driver named 'asdf' is registered", + "looking up logging plugin asdf: plugin \"asdf\" not found", + ] with pytest.raises(docker.errors.APIError) as excinfo: # raises an internal server error 500 container = self.client.create_container( @@ -287,7 +290,7 @@ ) self.client.start(container) - assert excinfo.value.explanation == expected_msg + assert excinfo.value.explanation in expected_msgs def test_valid_no_log_driver_specified(self): log_config = docker.types.LogConfig( @@ -1102,6 +1105,8 @@ class ContainerTopTest(BaseAPIIntegrationTest): + @pytest.mark.xfail(reason='Output of docker top depends on host distro, ' + 'and is not formalized.') def test_top(self): container = self.client.create_container( TEST_IMG, ['sleep', '60'] @@ -1112,9 +1117,7 @@ self.client.start(container) res = self.client.top(container) if not IS_WINDOWS_PLATFORM: - assert res['Titles'] == [ - 'UID', 'PID', 'PPID', 'C', 'STIME', 'TTY', 'TIME', 'CMD' - ] + assert res['Titles'] == [u'PID', u'USER', u'TIME', u'COMMAND'] assert len(res['Processes']) == 1 assert res['Processes'][0][-1] == 'sleep 60' self.client.kill(container) @@ -1122,6 +1125,8 @@ @pytest.mark.skipif( IS_WINDOWS_PLATFORM, reason='No psargs support on windows' ) + @pytest.mark.xfail(reason='Output of docker top depends on host distro, ' + 'and is not formalized.') def test_top_with_psargs(self): container = self.client.create_container( TEST_IMG, ['sleep', '60']) @@ -1129,11 +1134,8 @@ self.tmp_containers.append(container) self.client.start(container) - res = self.client.top(container, 'waux') - assert res['Titles'] == [ - 'USER', 'PID', '%CPU', '%MEM', 'VSZ', 'RSS', - 'TTY', 'STAT', 'START', 'TIME', 'COMMAND' - ] + res = self.client.top(container, '-eopid,user') + assert res['Titles'] == [u'PID', u'USER'] assert len(res['Processes']) == 1 assert res['Processes'][0][10] == 'sleep 60' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-py-4.2.0/tests/integration/context_api_test.py new/docker-py-4.2.1/tests/integration/context_api_test.py --- old/docker-py-4.2.0/tests/integration/context_api_test.py 2020-02-06 11:43:03.000000000 +0100 +++ new/docker-py-4.2.1/tests/integration/context_api_test.py 2020-06-02 16:15:59.000000000 +0200 @@ -50,3 +50,10 @@ ContextAPI.remove_context("test") with pytest.raises(errors.ContextNotFound): ContextAPI.inspect_context("test") + + def test_load_context_without_orchestrator(self): + ContextAPI.create_context("test") + ctx = ContextAPI.get_context("test") + assert ctx + assert ctx.Name == "test" + assert ctx.Orchestrator is None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-py-4.2.0/tests/unit/context_test.py new/docker-py-4.2.1/tests/unit/context_test.py --- old/docker-py-4.2.0/tests/unit/context_test.py 2020-02-06 11:43:03.000000000 +0100 +++ new/docker-py-4.2.1/tests/unit/context_test.py 2020-06-02 16:15:59.000000000 +0200 @@ -37,6 +37,10 @@ def test_get_current_context(self): assert ContextAPI.get_current_context().Name == "default" + def test_https_host(self): + c = Context("test", host="tcp://testdomain:8080", tls=True) + assert c.Host == "https://testdomain:8080" + def test_context_inspect_without_params(self): ctx = ContextAPI.inspect_context() assert ctx["Name"] == "default"
