diff --git a/python-urllib3-accept-header-for-proxy.patch b/python-urllib3-accept-header-for-proxy.patch new file mode 100644 index 0000000..8d89f27 --- /dev/null +++ b/python-urllib3-accept-header-for-proxy.patch @@ -0,0 +1,28 @@ +From ea36acfc8a997a19ba1ead58de0d1f01e9eb540f Mon Sep 17 00:00:00 2001 +From: kevin +Date: Thu, 30 Aug 2012 00:14:12 -0400 +Subject: [PATCH 1/4] Fix overwritten Accept header when proxy is used + +When a request specifies both an Accept header and a proxy server, the +Accept header value is overwritten. +--- + urllib3/poolmanager.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/urllib3/poolmanager.py b/urllib3/poolmanager.py +index 8f5b54c..7d7d6e4 100644 +--- a/urllib3/poolmanager.py ++++ b/urllib3/poolmanager.py +@@ -141,7 +141,8 @@ def _set_proxy_headers(self, headers=None): + headers = headers or {} + + # Same headers are curl passes for --proxy1.0 +- headers['Accept'] = '*/*' ++ if 'Accept' not in headers: ++ headers['Accept'] = '*/*' + headers['Proxy-Connection'] = 'Keep-Alive' + + return headers +-- +1.7.10 + diff --git a/python-urllib3-default-ssl-cert-validate-el5.patch b/python-urllib3-default-ssl-cert-validate-el5.patch new file mode 100644 index 0000000..39478bf --- /dev/null +++ b/python-urllib3-default-ssl-cert-validate-el5.patch @@ -0,0 +1,21 @@ +Author: Jamie Strandboge +Description: require SSL certificate validation by default by using + CERT_REQUIRED and using the system /etc/ssl/certs/ca-certificates.crt +Bug-Ubuntu: https://launchpad.net/bugs/1047054 +Modified for Fedora by Ralph Bean +Modified for EPEL5 by Erik johnson +Bug-Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=855320 + +Index: urllib3-1.5/urllib3/connectionpool.py +=================================================================== +--- urllib3-1.5.orig/urllib3/connectionpool.py ++++ urllib3-1.5/urllib3/connectionpool.py +@@ -504,7 +504,7 @@ class HTTPSConnectionPool(HTTPConnection + strict=False, timeout=None, maxsize=1, + block=False, headers=None, + key_file=None, cert_file=None, +- cert_reqs='CERT_NONE', ca_certs=None): ++ cert_reqs='CERT_REQUIRED', ca_certs='/etc/pki/tls/certs/ca-bundle.crt'): + + super(HTTPSConnectionPool, self).__init__(host, port, + strict, timeout, maxsize, diff --git a/python-urllib3-old-nose-compat.patch b/python-urllib3-old-nose-compat.patch deleted file mode 100644 index 986f9d7..0000000 --- a/python-urllib3-old-nose-compat.patch +++ /dev/null @@ -1,26 +0,0 @@ -From d1b64a6dc91bc9c350ac503febc34340c94c9066 Mon Sep 17 00:00:00 2001 -From: Ralph Bean -Date: Wed, 25 Sep 2013 13:28:37 -0400 -Subject: [PATCH 3/3] old nose compat - ---- - setup.cfg | 3 --- - 1 file changed, 3 deletions(-) - -diff --git a/setup.cfg b/setup.cfg -index 8f1fee7..a8b1d1d 100644 ---- a/setup.cfg -+++ b/setup.cfg -@@ -1,9 +1,6 @@ - [nosetests] --logging-clear-handlers = true - with-coverage = true - cover-package = urllib3 --cover-min-percentage = 100 --cover-erase = true - - [egg_info] - tag_build = --- -1.8.3.1 - diff --git a/python-urllib3-unbundle.patch b/python-urllib3-unbundle.patch index f0f11c7..1b5dd64 100644 --- a/python-urllib3-unbundle.patch +++ b/python-urllib3-unbundle.patch @@ -1,192 +1,162 @@ -diff -up ./dummyserver/handlers.py.orig ./dummyserver/handlers.py ---- ./dummyserver/handlers.py.orig 2014-04-21 01:19:35.209031172 -0700 -+++ ./dummyserver/handlers.py 2014-04-21 01:19:54.911126953 -0700 -@@ -190,7 +190,7 @@ def _parse_header(line): - """ - import tornado.httputil - import email.utils -- from urllib3.packages import six -+ import six - if not six.PY3: - line = line.encode('utf-8') - parts = tornado.httputil._parseparam(';' + line) -diff -up ./setup.py.orig ./setup.py ---- ./setup.py.orig 2014-04-21 00:58:19.713830394 -0700 -+++ ./setup.py 2014-04-21 01:30:40.966267728 -0700 -@@ -45,7 +45,6 @@ setup(name='urllib3', - url='http://urllib3.readthedocs.org/', - license='MIT', - packages=['urllib3', -- 'urllib3.packages', 'urllib3.packages.ssl_match_hostname', - 'urllib3.contrib', 'urllib3.util', - ], - requires=requirements, -diff -up ./test-requirements.txt.orig ./test-requirements.txt ---- ./test-requirements.txt.orig 2014-04-21 01:21:44.452659485 -0700 -+++ ./test-requirements.txt 2014-04-21 01:21:59.317731751 -0700 -@@ -2,3 +2,5 @@ nose==1.3 - mock==1.0.1 - tornado==3.1.1 - coverage==3.6 -+six -+backports.ssl_match_hostname -diff -up ./test/test_collections.py.orig ./test/test_collections.py ---- ./test/test_collections.py.orig 2014-04-21 00:58:40.569931786 -0700 -+++ ./test/test_collections.py 2014-04-21 01:18:59.041855346 -0700 -@@ -4,7 +4,7 @@ from urllib3._collections import ( - HTTPHeaderDict, - RecentlyUsedContainer as Container - ) --from urllib3.packages import six -+import six - xrange = six.moves.xrange - - -diff -up ./test/test_connectionpool.py.orig ./test/test_connectionpool.py ---- ./test/test_connectionpool.py.orig 2014-04-21 00:58:48.097968383 -0700 -+++ ./test/test_connectionpool.py 2014-04-21 01:18:48.335803299 -0700 -@@ -6,7 +6,14 @@ from urllib3.connectionpool import ( - HTTPConnectionPool, - ) - from urllib3.util import Timeout --from urllib3.packages.ssl_match_hostname import CertificateError -+try: -+ # python3.2+ -+ from ssl import CertificateError -+except ImportError: -+ # Older python where the backport from pypi is installed -+ from backports.ssl_match_hostname import CertificateError -+ -+ - from urllib3.exceptions import ( - ClosedPoolError, - EmptyPoolError, -diff -up ./test/test_fields.py.orig ./test/test_fields.py ---- ./test/test_fields.py.orig 2014-04-21 00:58:57.501014095 -0700 -+++ ./test/test_fields.py 2014-04-21 01:18:55.321837262 -0700 -@@ -1,7 +1,7 @@ - import unittest - - from urllib3.fields import guess_content_type, RequestField --from urllib3.packages.six import u -+from six import u - - - class TestRequestField(unittest.TestCase): -diff -up ./test/test_filepost.py.orig ./test/test_filepost.py ---- ./test/test_filepost.py.orig 2014-04-21 00:59:05.128051174 -0700 -+++ ./test/test_filepost.py 2014-04-21 01:18:52.414823129 -0700 -@@ -2,7 +2,7 @@ import unittest - - from urllib3.filepost import encode_multipart_formdata, iter_fields - from urllib3.fields import RequestField --from urllib3.packages.six import b, u -+from six import b, u - - - BOUNDARY = '!! test boundary !!' -diff -up ./urllib3/_collections.py.orig ./urllib3/_collections.py ---- ./urllib3/_collections.py.orig 2014-04-21 00:59:11.682083036 -0700 -+++ ./urllib3/_collections.py 2014-04-21 01:18:57.203846411 -0700 -@@ -19,8 +19,8 @@ except ImportError: # Platform-specific: +Index: urllib3-1.5/urllib3/_collections.py +=================================================================== +--- urllib3-1.5.orig/urllib3/_collections.py ++++ urllib3-1.5/urllib3/_collections.py +@@ -10,7 +10,10 @@ from threading import Lock try: # Python 2.7+ from collections import OrderedDict except ImportError: - from .packages.ordered_dict import OrderedDict --from .packages.six import itervalues -+ from ordered_dict import OrderedDict -+from six import itervalues ++ try: # backport package ++ from ordereddict import OrderedDict ++ except ImportError: ++ from .packages.ordered_dict import OrderedDict - __all__ = ['RecentlyUsedContainer', 'HTTPHeaderDict'] -diff -up ./urllib3/connectionpool.py.orig ./urllib3/connectionpool.py ---- ./urllib3/connectionpool.py.orig 2014-04-21 00:59:20.406125448 -0700 -+++ ./urllib3/connectionpool.py 2014-04-21 01:06:56.579343119 -0700 -@@ -31,8 +31,15 @@ from .exceptions import ( - ReadTimeoutError, - ProxyError, + __all__ = ['RecentlyUsedContainer'] +Index: urllib3-1.5/urllib3/connectionpool.py +=================================================================== +--- urllib3-1.5.orig/urllib3/connectionpool.py ++++ urllib3-1.5/urllib3/connectionpool.py +@@ -51,8 +51,20 @@ from .exceptions import ( + TimeoutError, ) --from .packages.ssl_match_hostname import CertificateError + +-from .packages.ssl_match_hostname import match_hostname, CertificateError -from .packages import six +try: + # python3.2+ + from ssl import match_hostname, CertificateError +except ImportError: -+ # Older python where the backport from pypi is installed -+ from backports.ssl_match_hostname import match_hostname, CertificateError -+import six -+ -+ - from .connection import ( - port_by_scheme, - DummyConnection, -diff -up ./urllib3/connection.py.orig ./urllib3/connection.py ---- ./urllib3/connection.py.orig 2014-04-21 01:14:17.899488582 -0700 -+++ ./urllib3/connection.py 2014-04-21 01:16:00.490987327 -0700 -@@ -38,8 +38,15 @@ except (ImportError, AttributeError): # - from .exceptions import ( - ConnectTimeoutError, - ) --from .packages.ssl_match_hostname import match_hostname --from .packages import six ++ try: ++ # Older python where the backport from pypi is installed ++ from backports.ssl_match_hostname import match_hostname, CertificateError ++ except ImportError: ++ # Other older python we use our bundled copy ++ from .packages.ssl_match_hostname import match_hostname, CertificateError +try: -+ # python3.2+ -+ from ssl import match_hostname, CertificateError ++ import six +except ImportError: -+ # Older python where the backport from pypi is installed -+ from backports.ssl_match_hostname import match_hostname, CertificateError -+ -+import six -+ - from .util import ( - assert_fingerprint, - resolve_cert_reqs, -diff -up ./urllib3/fields.py.orig ./urllib3/fields.py ---- ./urllib3/fields.py.orig 2014-04-21 00:59:31.661180164 -0700 -+++ ./urllib3/fields.py 2014-04-21 01:09:04.310964082 -0700 -@@ -7,7 +7,7 @@ - import email.utils - import mimetypes - --from .packages import six -+import six ++ from .packages import six - def guess_content_type(filename, default='application/octet-stream'): -diff -up ./urllib3/filepost.py.orig ./urllib3/filepost.py ---- ./urllib3/filepost.py.orig 2014-04-21 00:59:39.538218457 -0700 -+++ ./urllib3/filepost.py 2014-04-21 01:08:14.138720171 -0700 -@@ -10,8 +10,8 @@ import mimetypes + xrange = six.moves.xrange +Index: urllib3-1.5/urllib3/filepost.py +=================================================================== +--- urllib3-1.5.orig/urllib3/filepost.py ++++ urllib3-1.5/urllib3/filepost.py +@@ -10,8 +10,12 @@ import mimetypes from uuid import uuid4 from io import BytesIO -from .packages import six -from .packages.six import b -+import six -+from six import b - from .fields import RequestField ++try: ++ import six ++ from six import b ++except ImportError: ++ from .packages import six ++ from .packages.six import b writer = codecs.lookup('utf-8')[3] -diff -up ./urllib3/response.py.orig ./urllib3/response.py ---- ./urllib3/response.py.orig 2014-04-21 00:59:47.622257758 -0700 -+++ ./urllib3/response.py 2014-04-21 01:09:15.423018103 -0700 -@@ -11,7 +11,7 @@ import io - from ._collections import HTTPHeaderDict +Index: urllib3-1.5/urllib3/response.py +=================================================================== +--- urllib3-1.5.orig/urllib3/response.py ++++ urllib3-1.5/urllib3/response.py +@@ -11,7 +11,10 @@ import zlib + from io import BytesIO + from .exceptions import DecodeError --from .packages.six import string_types as basestring, binary_type -+from six import string_types as basestring, binary_type - from .util import is_fp_closed +-from .packages.six import string_types as basestring ++try: ++ from six import string_types as basestring ++except ImportError: ++ from .packages.six import string_types as basestring -diff -up ./urllib3/util/request.py.orig ./urllib3/util/request.py ---- ./urllib3/util/request.py.orig 2014-04-21 01:10:59.339523289 -0700 -+++ ./urllib3/util/request.py 2014-04-21 01:12:02.663831138 -0700 -@@ -1,6 +1,6 @@ - from base64 import b64encode + log = logging.getLogger(__name__) +Index: urllib3-1.5/urllib3/util.py +=================================================================== +--- urllib3-1.5.orig/urllib3/util.py ++++ urllib3-1.5/urllib3/util.py +@@ -18,7 +18,10 @@ except ImportError: # `poll` doesn't exi + except ImportError: # `select` doesn't exist on AppEngine. + select = False --from ..packages import six -+import six +-from .packages import six ++try: ++ import six ++except ImporError: ++ from .packages import six + from .exceptions import LocationParseError - ACCEPT_ENCODING = 'gzip,deflate' +Index: urllib3-1.5/test/test_collections.py +=================================================================== +--- urllib3-1.5.orig/test/test_collections.py ++++ urllib3-1.5/test/test_collections.py +@@ -1,7 +1,10 @@ + import unittest + + from urllib3._collections import RecentlyUsedContainer as Container +-from urllib3.packages import six ++try: ++ import six ++except ImportError: ++ from urllib3.packages import six + xrange = six.moves.xrange + + +Index: urllib3-1.5/test/test_connectionpool.py +=================================================================== +--- urllib3-1.5.orig/test/test_connectionpool.py ++++ urllib3-1.5/test/test_connectionpool.py +@@ -1,7 +1,16 @@ + import unittest + + from urllib3.connectionpool import connection_from_url, HTTPConnectionPool +-from urllib3.packages.ssl_match_hostname import CertificateError ++try: ++ # python3.2+ ++ from ssl import CertificateError ++except ImportError: ++ try: ++ # Older python where the backport from pypi is installed ++ from backports.ssl_match_hostname import CertificateError ++ except ImportError: ++ # Other older python we use our bundled copy ++ from urllib3.packages.ssl_match_hostname import CertificateError + from urllib3.exceptions import ( + ClosedPoolError, + EmptyPoolError, +Index: urllib3-1.5/test/test_filepost.py +=================================================================== +--- urllib3-1.5.orig/test/test_filepost.py ++++ urllib3-1.5/test/test_filepost.py +@@ -1,7 +1,10 @@ + import unittest + + from urllib3.filepost import encode_multipart_formdata, iter_fields +-from urllib3.packages.six import b, u ++try: ++ from six import b, u ++except ImportError: ++ from urllib3.packages.six import b, u + + + BOUNDARY = '!! test boundary !!' +Index: urllib3-1.5/setup.py +=================================================================== +--- urllib3-1.5.orig/setup.py ++++ urllib3-1.5/setup.py +@@ -44,8 +44,7 @@ setup(name='urllib3', + author_email='andrey.petrov@shazow.net', + url='http://urllib3.readthedocs.org/', + license='MIT', +- packages=['urllib3', 'dummyserver', 'urllib3.packages', +- 'urllib3.packages.ssl_match_hostname', ++ packages=['urllib3', 'dummyserver', 'urllib3', + ], + requires=requirements, + tests_require=tests_requirements, diff --git a/python-urllib3.spec b/python-urllib3.spec index 07c50d2..ba5bbc1 100644 --- a/python-urllib3.spec +++ b/python-urllib3.spec @@ -1,68 +1,58 @@ -%if 0%{?fedora} -%global with_python3 1 -%else -%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print (get_python_lib())")} -%endif +%global __python2 /usr/bin/python2.6 +%global python2_sitelib %(%{__python2} -c "from distutils.sysconfig import get_python_lib; print (get_python_lib())") %global srcname urllib3 -Name: python-%{srcname} -Version: 1.8.2 -Release: 4%{?dist} +Name: python-urllib3 +Version: 1.5 +Release: 8%{?dist} Summary: Python HTTP library with thread-safe connection pooling and file post +Group: Development/Languages License: MIT URL: http://urllib3.readthedocs.org/ Source0: http://pypi.python.org/packages/source/u/%{srcname}/%{srcname}-%{version}.tar.gz +# Patch to change default behaviour to check SSL certs for validity +# https://bugzilla.redhat.com/show_bug.cgi?id=855320 +# https://bugzilla.redhat.com/show_bug.cgi?id=1124060 +Patch0: python-urllib3-default-ssl-cert-validate-el5.patch + ### TODO: Send this to upstream urllib3 # make all imports of things in packages try system copies first -Patch0: python-urllib3-unbundle.patch +Patch1: python-urllib3-unbundle.patch -# Remove logging-clear-handlers from setup.cfg because it's not available in RHEL6's nose -Patch100: python-urllib3-old-nose-compat.patch +# Fix accept header when behind a proxy +#https://github.com/shazow/urllib3/pull/93 +#https://github.com/shazow/urllib3/pull/93.patch +Patch2: python-urllib3-accept-header-for-proxy.patch +BuildRoot: %{_tmppath}/%{srcname}-%{version}-%{release}-root-%(%{__id_u} -n) BuildArch: noarch -Requires: ca-certificates -Requires: python-six - -Requires: python-backports-ssl_match_hostname -%if 0%{?rhel} && 0%{?rhel} <= 6 -BuildRequires: python-ordereddict -Requires: python-ordereddict -%endif - -BuildRequires: python2-devel -# For unittests -BuildRequires: python-nose -BuildRequires: python-mock -BuildRequires: python-six -BuildRequires: python-tornado -BuildRequires: python-backports-ssl_match_hostname - -%if 0%{?with_python3} -BuildRequires: python3-devel -# For unittests -BuildRequires: python3-nose -BuildRequires: python3-mock -BuildRequires: python3-six -BuildRequires: python3-tornado -%endif # with_python3 +BuildRequires: python26-devel +BuildRequires: python26-distribute +BuildRequires: python26-ordereddict +Requires: openssl +Requires: python26 +Requires: python26-backports-ssl_match_hostname +Requires: python26-ordereddict +Requires: python26-six %description Python HTTP module with connection pooling and file POST abilities. -%if 0%{?with_python3} -%package -n python3-%{srcname} -Requires: ca-certificates -Requires: python3-six -# Note: Will not run with python3 < 3.2 (unless python3-backports-ssl_match_hostname is created) -Summary: Python3 HTTP library with thread-safe connection pooling and file post -%description -n python3-%{srcname} -Python3 HTTP module with connection pooling and file POST abilities. -%endif # with_python3 +%package -n python26-%{srcname} +Summary: Python HTTP library with thread-safe connection pooling and file post +Group: Development/Languages +Requires: openssl +Requires: python26 +Requires: python26-backports-ssl_match_hostname +Requires: python26-ordereddict +Requires: python26-six +%description -n python26-%{srcname} +Python HTTP module with connection pooling and file POST abilities. %prep %setup -q -n %{srcname}-%{version} @@ -70,96 +60,30 @@ Python3 HTTP module with connection pooling and file POST abilities. rm -rf urllib3/packages/ %patch0 -p1 -%if 0%{?rhel} && 0%{?rhel} <= 6 -%patch100 -p1 -%endif - -%if 0%{?with_python3} -rm -rf %{py3dir} -cp -a . %{py3dir} -%endif # with_python3 +%patch1 -p1 +%patch2 -p1 %build -%{__python} setup.py build - -%if 0%{?with_python3} -pushd %{py3dir} -%{__python3} setup.py build -popd -%endif # with_python3 +%{__python2} setup.py build %install rm -rf %{buildroot} -%{__python} setup.py install --skip-build --root %{buildroot} +%{__python2} setup.py install --skip-build --root %{buildroot} -# dummyserver is part of the unittest framework -rm -rf %{buildroot}%{python_sitelib}/dummyserver - -%if 0%{?with_python3} -pushd %{py3dir} -%{__python3} setup.py install --skip-build --root %{buildroot} - -# dummyserver is part of the unittest framework -rm -rf %{buildroot}%{python3_sitelib}/dummyserver -popd -%endif # with_python3 - -%check -nosetests - -%if 0%{?with_python3} -pushd %{py3dir} -nosetests-%{python3_version} -popd -%endif # with_python3 - -%files -%{!?_licensedir:%global license %%doc} -%license LICENSE.txt -%doc CHANGES.rst README.rst CONTRIBUTORS.txt -# For noarch packages: sitelib -%{python_sitelib}/* - -%if 0%{?with_python3} -%files -n python3-%{srcname} -%{!?_licensedir:%global license %%doc} -%license LICENSE.txt -# For noarch packages: sitelib -%{python3_sitelib}/* -%endif # with_python3 +%clean +rm -rf %{buildroot} + +%files -n python26-%{srcname} +%defattr(-,root,root,-) +%doc CHANGES.rst LICENSE.txt README.rst CONTRIBUTORS.txt +%{python2_sitelib}/* %changelog -* Mon Aug 4 2014 Tom Callaway - 1.8.2-4 -- fix license handling +* Thu Jul 24 2014 Erik Johnson - 1.5-8 +- Initial EL5 build -* Sun Jun 08 2014 Fedora Release Engineering - 1.8.2-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Wed May 14 2014 Bohuslav Kabrda - 1.8.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Changes/Python_3.4 - -* Mon Apr 21 2014 Arun S A G - 1.8.2-1 -- Update to latest upstream version - -* Mon Oct 28 2013 Ralph Bean - 1.7.1-2 -- Update patch to find ca_certs in the correct location. - -* Wed Sep 25 2013 Ralph Bean - 1.7.1-1 -- Latest upstream with support for a new timeout class and py3.4. - -* Wed Aug 28 2013 Ralph Bean - 1.7-3 -- Bump release again, just to push an unpaired update. - -* Mon Aug 26 2013 Ralph Bean - 1.7-2 -- Bump release to pair an update with python-requests. - -* Thu Aug 22 2013 Ralph Bean - 1.7-1 -- Update to latest upstream. -- Removed the accept-header proxy patch which is included in upstream now. -- Removed py2.6 compat patch which is included in upstream now. - -* Sun Aug 04 2013 Fedora Release Engineering - 1.5-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild +* Mon Oct 28 2013 Ralph Bean - 1.5-7 +- Update patch to find ca_certs in the correct place. * Tue Jun 11 2013 Toshio Kuratomi - 1.5-6 - Fix Requires of python-ordereddict to only apply to RHEL diff --git a/sources b/sources index c2fd220..24f2a19 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -52f7513335dfd0943082cbb7400d693e urllib3-1.8.2.tar.gz +3ee4b375a095bb6098f1ed75f8058e48 urllib3-1.5.tar.gz