Description: Allow working with urllib3 2.0 The upgrade to Python 3.12 brings with it an upgrade to urllib3, which breaks this package. Upstream has fixed their code, and the fix is available in a later upstream version. This is that commit. . The original Git commit message follows: . deps: compatiblity with requests ≥ 2.29.0 and urllib3 2.x (#3116) . Requirements are the same, so it's still possible to use `urllib3 < 2` or `requests == 2.28.2` for example. Author: Felix Fontein Author: A. Karl Kornel Origin: upstream, https://github.com/docker/docker-py/commit/3178c8d48b7e7414d1f864ba1fe77139f4e923eb Bug: https://bugs.launchpad.net/ubuntu/+source/python-docker/+bug/2061929 Last-Update: 2024-04-17 --- This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ --- a/docker/transport/npipeconn.py +++ b/docker/transport/npipeconn.py @@ -5,17 +5,13 @@ from .. import constants from .npipesocket import NpipeSocket -import http.client as httplib - -try: - import requests.packages.urllib3 as urllib3 -except ImportError: - import urllib3 +import urllib3 +import urllib3.connection RecentlyUsedContainer = urllib3._collections.RecentlyUsedContainer -class NpipeHTTPConnection(httplib.HTTPConnection): +class NpipeHTTPConnection(urllib3.connection.HTTPConnection): def __init__(self, npipe_path, timeout=60): super().__init__( 'localhost', timeout=timeout --- a/docker/transport/sshconn.py +++ b/docker/transport/sshconn.py @@ -11,12 +11,8 @@ from docker.transport.basehttpadapter import BaseHTTPAdapter from .. import constants -import http.client as httplib - -try: - import requests.packages.urllib3 as urllib3 -except ImportError: - import urllib3 +import urllib3 +import urllib3.connection RecentlyUsedContainer = urllib3._collections.RecentlyUsedContainer @@ -100,7 +96,7 @@ self.proc.terminate() -class SSHConnection(httplib.HTTPConnection): +class SSHConnection(urllib3.connection.HTTPConnection): def __init__(self, ssh_transport=None, timeout=60, host=None): super().__init__( 'localhost', timeout=timeout --- a/docker/transport/ssladapter.py +++ b/docker/transport/ssladapter.py @@ -9,10 +9,7 @@ from docker.transport.basehttpadapter import BaseHTTPAdapter -try: - import requests.packages.urllib3 as urllib3 -except ImportError: - import urllib3 +import urllib3 PoolManager = urllib3.poolmanager.PoolManager --- a/docker/transport/unixconn.py +++ b/docker/transport/unixconn.py @@ -1,20 +1,17 @@ import requests.adapters import socket -import http.client as httplib from docker.transport.basehttpadapter import BaseHTTPAdapter from .. import constants -try: - import requests.packages.urllib3 as urllib3 -except ImportError: - import urllib3 +import urllib3 +import urllib3.connection RecentlyUsedContainer = urllib3._collections.RecentlyUsedContainer -class UnixHTTPConnection(httplib.HTTPConnection): +class UnixHTTPConnection(urllib3.connection.HTTPConnection): def __init__(self, base_url, unix_socket, timeout=60): super().__init__( @@ -30,12 +27,6 @@ sock.connect(self.unix_socket) self.sock = sock - def putheader(self, header, *values): - super().putheader(header, *values) - - def response_class(self, sock, *args, **kwargs): - return httplib.HTTPResponse(sock, *args, **kwargs) - class UnixHTTPConnectionPool(urllib3.connectionpool.HTTPConnectionPool): def __init__(self, base_url, socket_path, timeout=60, maxsize=10): --- a/docker/types/daemon.py +++ b/docker/types/daemon.py @@ -1,9 +1,6 @@ import socket -try: - import requests.packages.urllib3 as urllib3 -except ImportError: - import urllib3 +import urllib3 from ..errors import DockerException --- a/tests/unit/api_test.py +++ b/tests/unit/api_test.py @@ -16,9 +16,9 @@ import docker import pytest import requests +import urllib3 from docker.api import APIClient from docker.constants import DEFAULT_DOCKER_API_VERSION -from requests.packages import urllib3 from . import fake_api