Hello community,

here is the log from the commit of package python-docker for openSUSE:Factory 
checked in at 2019-03-28 22:48:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-docker (Old)
 and      /work/SRC/openSUSE:Factory/.python-docker.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-docker"

Thu Mar 28 22:48:26 2019 rev:13 rq:688730 version:3.7.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-docker/python-docker.changes      
2019-03-10 09:37:35.564144382 +0100
+++ /work/SRC/openSUSE:Factory/.python-docker.new.25356/python-docker.changes   
2019-03-28 22:48:28.931056964 +0100
@@ -1,0 +2,8 @@
+Tue Mar 26 13:36:58 UTC 2019 - Tomáš Chvátal <[email protected]>
+
+- Update to 3.7.1:
+  * Set a different default number (which is now 9) for SSH pools
+  * Adds a BaseHTTPAdapter with a close method to ensure that the pools is 
clean on close()
+  * Makes SSHHTTPAdapter reopen a closed connection when needed like the others
+
+-------------------------------------------------------------------

Old:
----
  3.7.0.tar.gz

New:
----
  3.7.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-docker.spec ++++++
--- /var/tmp/diff_new_pack.3eTBpl/_old  2019-03-28 22:48:29.767056812 +0100
+++ /var/tmp/diff_new_pack.3eTBpl/_new  2019-03-28 22:48:29.771056811 +0100
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define oldpython python
 Name:           python-docker
-Version:        3.7.0
+Version:        3.7.1
 Release:        0
 Summary:        Docker API Client
 License:        Apache-2.0

++++++ 3.7.0.tar.gz -> 3.7.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/docker-py-3.7.0/docker/api/client.py 
new/docker-py-3.7.1/docker/api/client.py
--- old/docker-py-3.7.0/docker/api/client.py    2019-01-10 18:15:58.000000000 
+0100
+++ new/docker-py-3.7.1/docker/api/client.py    2019-03-20 13:49:36.000000000 
+0100
@@ -22,26 +22,26 @@
 from .. import auth
 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
+    DEFAULT_DOCKER_API_VERSION, MINIMUM_DOCKER_API_VERSION,
+    STREAM_HEADER_SIZE_BYTES, DEFAULT_NUM_POOLS_SSH, DEFAULT_NUM_POOLS
 )
 from ..errors import (
     DockerException, InvalidVersion, TLSParameterError,
     create_api_error_from_http_exception
 )
 from ..tls import TLSConfig
-from ..transport import SSLAdapter, UnixAdapter
+from ..transport import SSLHTTPAdapter, UnixHTTPAdapter
 from ..utils import utils, check_resource, update_headers, config
 from ..utils.socket import frames_iter, consume_socket_output, demux_adaptor
 from ..utils.json_stream import json_stream
 from ..utils.proxy import ProxyConfig
 try:
-    from ..transport import NpipeAdapter
+    from ..transport import NpipeHTTPAdapter
 except ImportError:
     pass
 
 try:
-    from ..transport import SSHAdapter
+    from ..transport import SSHHTTPAdapter
 except ImportError:
     pass
 
@@ -101,7 +101,7 @@
 
     def __init__(self, base_url=None, version=None,
                  timeout=DEFAULT_TIMEOUT_SECONDS, tls=False,
-                 user_agent=DEFAULT_USER_AGENT, num_pools=DEFAULT_NUM_POOLS,
+                 user_agent=DEFAULT_USER_AGENT, num_pools=None,
                  credstore_env=None):
         super(APIClient, self).__init__()
 
@@ -132,8 +132,12 @@
         base_url = utils.parse_host(
             base_url, IS_WINDOWS_PLATFORM, tls=bool(tls)
         )
+        # SSH has a different default for num_pools to all other adapters
+        num_pools = num_pools or DEFAULT_NUM_POOLS_SSH if \
+            base_url.startswith('ssh://') else DEFAULT_NUM_POOLS
+
         if base_url.startswith('http+unix://'):
-            self._custom_adapter = UnixAdapter(
+            self._custom_adapter = UnixHTTPAdapter(
                 base_url, timeout, pool_connections=num_pools
             )
             self.mount('http+docker://', self._custom_adapter)
@@ -147,7 +151,7 @@
                     'The npipe:// protocol is only supported on Windows'
                 )
             try:
-                self._custom_adapter = NpipeAdapter(
+                self._custom_adapter = NpipeHTTPAdapter(
                     base_url, timeout, pool_connections=num_pools
                 )
             except NameError:
@@ -158,7 +162,7 @@
             self.base_url = 'http+docker://localnpipe'
         elif base_url.startswith('ssh://'):
             try:
-                self._custom_adapter = SSHAdapter(
+                self._custom_adapter = SSHHTTPAdapter(
                     base_url, timeout, pool_connections=num_pools
                 )
             except NameError:
@@ -173,7 +177,8 @@
             if isinstance(tls, TLSConfig):
                 tls.configure_client(self)
             elif tls:
-                self._custom_adapter = SSLAdapter(pool_connections=num_pools)
+                self._custom_adapter = SSLHTTPAdapter(
+                    pool_connections=num_pools)
                 self.mount('https://', self._custom_adapter)
             self.base_url = base_url
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/docker-py-3.7.0/docker/constants.py 
new/docker-py-3.7.1/docker/constants.py
--- old/docker-py-3.7.0/docker/constants.py     2019-01-10 18:15:58.000000000 
+0100
+++ new/docker-py-3.7.1/docker/constants.py     2019-03-20 13:49:36.000000000 
+0100
@@ -18,4 +18,10 @@
 
 DEFAULT_USER_AGENT = "docker-sdk-python/{0}".format(version)
 DEFAULT_NUM_POOLS = 25
+
+# The OpenSSH server default value for MaxSessions is 10 which means we can
+# use up to 9, leaving the final session for the underlying SSH connection.
+# For more details see: https://github.com/docker/docker-py/issues/2246
+DEFAULT_NUM_POOLS_SSH = 9
+
 DEFAULT_DATA_CHUNK_SIZE = 1024 * 2048
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/docker-py-3.7.0/docker/tls.py 
new/docker-py-3.7.1/docker/tls.py
--- old/docker-py-3.7.0/docker/tls.py   2019-01-10 18:15:58.000000000 +0100
+++ new/docker-py-3.7.1/docker/tls.py   2019-03-20 13:49:36.000000000 +0100
@@ -2,7 +2,7 @@
 import ssl
 
 from . import errors
-from .transport import SSLAdapter
+from .transport import SSLHTTPAdapter
 
 
 class TLSConfig(object):
@@ -105,7 +105,7 @@
         if self.cert:
             client.cert = self.cert
 
-        client.mount('https://', SSLAdapter(
+        client.mount('https://', SSLHTTPAdapter(
             ssl_version=self.ssl_version,
             assert_hostname=self.assert_hostname,
             assert_fingerprint=self.assert_fingerprint,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/docker-py-3.7.0/docker/transport/__init__.py 
new/docker-py-3.7.1/docker/transport/__init__.py
--- old/docker-py-3.7.0/docker/transport/__init__.py    2019-01-10 
18:15:58.000000000 +0100
+++ new/docker-py-3.7.1/docker/transport/__init__.py    2019-03-20 
13:49:36.000000000 +0100
@@ -1,13 +1,13 @@
 # flake8: noqa
-from .unixconn import UnixAdapter
-from .ssladapter import SSLAdapter
+from .unixconn import UnixHTTPAdapter
+from .ssladapter import SSLHTTPAdapter
 try:
-    from .npipeconn import NpipeAdapter
+    from .npipeconn import NpipeHTTPAdapter
     from .npipesocket import NpipeSocket
 except ImportError:
     pass
 
 try:
-    from .sshconn import SSHAdapter
+    from .sshconn import SSHHTTPAdapter
 except ImportError:
     pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/docker-py-3.7.0/docker/transport/basehttpadapter.py 
new/docker-py-3.7.1/docker/transport/basehttpadapter.py
--- old/docker-py-3.7.0/docker/transport/basehttpadapter.py     1970-01-01 
01:00:00.000000000 +0100
+++ new/docker-py-3.7.1/docker/transport/basehttpadapter.py     2019-03-20 
13:49:36.000000000 +0100
@@ -0,0 +1,8 @@
+import requests.adapters
+
+
+class BaseHTTPAdapter(requests.adapters.HTTPAdapter):
+    def close(self):
+        super(BaseHTTPAdapter, self).close()
+        if hasattr(self, 'pools'):
+            self.pools.clear()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/docker-py-3.7.0/docker/transport/npipeconn.py 
new/docker-py-3.7.1/docker/transport/npipeconn.py
--- old/docker-py-3.7.0/docker/transport/npipeconn.py   2019-01-10 
18:15:58.000000000 +0100
+++ new/docker-py-3.7.1/docker/transport/npipeconn.py   2019-03-20 
13:49:36.000000000 +0100
@@ -1,6 +1,7 @@
 import six
 import requests.adapters
 
+from docker.transport.basehttpadapter import BaseHTTPAdapter
 from .. import constants
 from .npipesocket import NpipeSocket
 
@@ -68,7 +69,7 @@
         return conn or self._new_conn()
 
 
-class NpipeAdapter(requests.adapters.HTTPAdapter):
+class NpipeHTTPAdapter(BaseHTTPAdapter):
 
     __attrs__ = requests.adapters.HTTPAdapter.__attrs__ + ['npipe_path',
                                                            'pools',
@@ -81,7 +82,7 @@
         self.pools = RecentlyUsedContainer(
             pool_connections, dispose_func=lambda p: p.close()
         )
-        super(NpipeAdapter, self).__init__()
+        super(NpipeHTTPAdapter, self).__init__()
 
     def get_connection(self, url, proxies=None):
         with self.pools.lock:
@@ -103,6 +104,3 @@
         # anyway, we simply return the path URL directly.
         # See also: https://github.com/docker/docker-sdk-python/issues/811
         return request.path_url
-
-    def close(self):
-        self.pools.clear()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/docker-py-3.7.0/docker/transport/sshconn.py 
new/docker-py-3.7.1/docker/transport/sshconn.py
--- old/docker-py-3.7.0/docker/transport/sshconn.py     2019-01-10 
18:15:58.000000000 +0100
+++ new/docker-py-3.7.1/docker/transport/sshconn.py     2019-03-20 
13:49:36.000000000 +0100
@@ -2,6 +2,7 @@
 import requests.adapters
 import six
 
+from docker.transport.basehttpadapter import BaseHTTPAdapter
 from .. import constants
 
 if six.PY3:
@@ -68,7 +69,7 @@
         return conn or self._new_conn()
 
 
-class SSHAdapter(requests.adapters.HTTPAdapter):
+class SSHHTTPAdapter(BaseHTTPAdapter):
 
     __attrs__ = requests.adapters.HTTPAdapter.__attrs__ + [
         'pools', 'timeout', 'ssh_client',
@@ -79,15 +80,19 @@
         self.ssh_client = paramiko.SSHClient()
         self.ssh_client.load_system_host_keys()
 
-        parsed = six.moves.urllib_parse.urlparse(base_url)
-        self.ssh_client.connect(
-            parsed.hostname, parsed.port, parsed.username,
-        )
+        self.base_url = base_url
+        self._connect()
         self.timeout = timeout
         self.pools = RecentlyUsedContainer(
             pool_connections, dispose_func=lambda p: p.close()
         )
-        super(SSHAdapter, self).__init__()
+        super(SSHHTTPAdapter, self).__init__()
+
+    def _connect(self):
+        parsed = six.moves.urllib_parse.urlparse(self.base_url)
+        self.ssh_client.connect(
+            parsed.hostname, parsed.port, parsed.username,
+        )
 
     def get_connection(self, url, proxies=None):
         with self.pools.lock:
@@ -95,6 +100,10 @@
             if pool:
                 return pool
 
+            # Connection is closed try a reconnect
+            if not self.ssh_client.get_transport():
+                self._connect()
+
             pool = SSHConnectionPool(
                 self.ssh_client, self.timeout
             )
@@ -103,5 +112,5 @@
         return pool
 
     def close(self):
-        self.pools.clear()
+        super(SSHHTTPAdapter, self).close()
         self.ssh_client.close()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/docker-py-3.7.0/docker/transport/ssladapter.py 
new/docker-py-3.7.1/docker/transport/ssladapter.py
--- old/docker-py-3.7.0/docker/transport/ssladapter.py  2019-01-10 
18:15:58.000000000 +0100
+++ new/docker-py-3.7.1/docker/transport/ssladapter.py  2019-03-20 
13:49:36.000000000 +0100
@@ -7,6 +7,8 @@
 from distutils.version import StrictVersion
 from requests.adapters import HTTPAdapter
 
+from docker.transport.basehttpadapter import BaseHTTPAdapter
+
 try:
     import requests.packages.urllib3 as urllib3
 except ImportError:
@@ -22,7 +24,7 @@
     urllib3.connection.match_hostname = match_hostname
 
 
-class SSLAdapter(HTTPAdapter):
+class SSLHTTPAdapter(BaseHTTPAdapter):
     '''An HTTPS Transport Adapter that uses an arbitrary SSL version.'''
 
     __attrs__ = HTTPAdapter.__attrs__ + ['assert_fingerprint',
@@ -34,7 +36,7 @@
         self.ssl_version = ssl_version
         self.assert_hostname = assert_hostname
         self.assert_fingerprint = assert_fingerprint
-        super(SSLAdapter, self).__init__(**kwargs)
+        super(SSLHTTPAdapter, self).__init__(**kwargs)
 
     def init_poolmanager(self, connections, maxsize, block=False):
         kwargs = {
@@ -57,7 +59,7 @@
 
         But we still need to take care of when there is a proxy poolmanager
         """
-        conn = super(SSLAdapter, self).get_connection(*args, **kwargs)
+        conn = super(SSLHTTPAdapter, self).get_connection(*args, **kwargs)
         if conn.assert_hostname != self.assert_hostname:
             conn.assert_hostname = self.assert_hostname
         return conn
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/docker-py-3.7.0/docker/transport/unixconn.py 
new/docker-py-3.7.1/docker/transport/unixconn.py
--- old/docker-py-3.7.0/docker/transport/unixconn.py    2019-01-10 
18:15:58.000000000 +0100
+++ new/docker-py-3.7.1/docker/transport/unixconn.py    2019-03-20 
13:49:36.000000000 +0100
@@ -3,6 +3,7 @@
 import socket
 from six.moves import http_client as httplib
 
+from docker.transport.basehttpadapter import BaseHTTPAdapter
 from .. import constants
 
 try:
@@ -69,7 +70,7 @@
         )
 
 
-class UnixAdapter(requests.adapters.HTTPAdapter):
+class UnixHTTPAdapter(BaseHTTPAdapter):
 
     __attrs__ = requests.adapters.HTTPAdapter.__attrs__ + ['pools',
                                                            'socket_path',
@@ -85,7 +86,7 @@
         self.pools = RecentlyUsedContainer(
             pool_connections, dispose_func=lambda p: p.close()
         )
-        super(UnixAdapter, self).__init__()
+        super(UnixHTTPAdapter, self).__init__()
 
     def get_connection(self, url, proxies=None):
         with self.pools.lock:
@@ -107,6 +108,3 @@
         # anyway, we simply return the path URL directly.
         # See also: https://github.com/docker/docker-py/issues/811
         return request.path_url
-
-    def close(self):
-        self.pools.clear()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/docker-py-3.7.0/docker/version.py 
new/docker-py-3.7.1/docker/version.py
--- old/docker-py-3.7.0/docker/version.py       2019-01-10 18:15:58.000000000 
+0100
+++ new/docker-py-3.7.1/docker/version.py       2019-03-20 13:49:36.000000000 
+0100
@@ -1,2 +1,2 @@
-version = "3.7.0"
+version = "3.7.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-3.7.0/docs/change-log.md 
new/docker-py-3.7.1/docs/change-log.md
--- old/docker-py-3.7.0/docs/change-log.md      2019-01-10 18:15:58.000000000 
+0100
+++ new/docker-py-3.7.1/docs/change-log.md      2019-03-20 13:49:36.000000000 
+0100
@@ -1,6 +1,19 @@
 Change log
 ==========
 
+3.7.1
+-----
+
+[List of PRs / issues for this 
release](https://github.com/docker/docker-py/milestone/58?closed=1)
+
+### Bugfixes
+
+* Set a different default number (which is now 9) for SSH pools
+* Adds a BaseHTTPAdapter with a close method to ensure that the
+pools is clean on close()
+* Makes SSHHTTPAdapter reopen a closed connection when needed
+like the others
+
 3.7.0
 -----
 


Reply via email to