From e2c2602a24520a58dcb50e3774afb6c5bfe24e11 Mon Sep 17 00:00:00 2001 From: Ralph Bean Date: Feb 28 2013 14:56:18 +0000 Subject: Initial import (#907688) --- diff --git a/.gitignore b/.gitignore index e69de29..052920f 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +/urllib3-1.5.tar.gz diff --git a/python-urllib3-default-ssl-cert-validate.patch b/python-urllib3-default-ssl-cert-validate.patch new file mode 100644 index 0000000..2455459 --- /dev/null +++ b/python-urllib3-default-ssl-cert-validate.patch @@ -0,0 +1,20 @@ +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 +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/ssl/certs/ca-certificates.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 new file mode 100644 index 0000000..e76dda5 --- /dev/null +++ b/python-urllib3-old-nose-compat.patch @@ -0,0 +1,10 @@ +Index: urllib3-1.5/setup.cfg +=================================================================== +--- urllib3-1.5.orig/setup.cfg ++++ urllib3-1.5/setup.cfg +@@ -1,5 +1,4 @@ + [nosetests] +-logging-clear-handlers = true + with-coverage = true + cover-package = urllib3 + diff --git a/python-urllib3-py2.6-compat.patch b/python-urllib3-py2.6-compat.patch new file mode 100644 index 0000000..afcb355 --- /dev/null +++ b/python-urllib3-py2.6-compat.patch @@ -0,0 +1,89 @@ +Index: urllib3-1.5/test/test_collections.py +=================================================================== +--- urllib3-1.5.orig/test/test_collections.py ++++ urllib3-1.5/test/test_collections.py +@@ -122,9 +122,11 @@ class TestLRUContainer(unittest.TestCase + def test_iter(self): + d = Container() + +- with self.assertRaises(NotImplementedError): ++ def to_test(): + for i in d: + self.fail("Iteration shouldn't be implemented.") + ++ self.assertRaises(NotImplementedError, to_test) ++ + if __name__ == '__main__': + unittest.main() +Index: urllib3-1.5/test/test_connectionpool.py +=================================================================== +--- urllib3-1.5.orig/test/test_connectionpool.py ++++ urllib3-1.5/test/test_connectionpool.py +@@ -98,8 +98,7 @@ class TestConnectionPool(unittest.TestCa + + def _test(exception, expect): + pool._make_request = lambda *args, **kwargs: _raise(exception) +- with self.assertRaises(expect): +- pool.request('GET', '/') ++ self.assertRaises(expect, pool.request, 'GET', '/') + + self.assertEqual(pool.pool.qsize(), POOL_SIZE) + +@@ -114,15 +113,13 @@ class TestConnectionPool(unittest.TestCa + # MaxRetryError, not EmptyPoolError + # See: https://github.com/shazow/urllib3/issues/76 + pool._make_request = lambda *args, **kwargs: _raise(HTTPException) +- with self.assertRaises(MaxRetryError): +- pool.request('GET', '/', retries=1, pool_timeout=0.01) ++ self.assertRaises(MaxRetryError, pool.request, 'GET', '/', retries=1, pool_timeout=0.01) + self.assertEqual(pool.pool.qsize(), POOL_SIZE) + + def test_assert_same_host(self): + c = connection_from_url('http://google.com:80') + +- with self.assertRaises(HostChangedError): +- c.request('GET', 'http://yahoo.com:80', assert_same_host=True) ++ self.assertRaises(HostChangedError, c.request, 'GET', 'http://yahoo.com:80', assert_same_host=True) + + def test_pool_close(self): + pool = connection_from_url('http://google.com:80') +@@ -139,16 +136,13 @@ class TestConnectionPool(unittest.TestCa + pool.close() + self.assertEqual(pool.pool, None) + +- with self.assertRaises(ClosedPoolError): +- pool._get_conn() ++ self.assertRaises(ClosedPoolError, pool._get_conn) + + pool._put_conn(conn3) + +- with self.assertRaises(ClosedPoolError): +- pool._get_conn() ++ self.assertRaises(ClosedPoolError, pool._get_conn) + +- with self.assertRaises(Empty): +- old_pool_queue.get(block=False) ++ self.assertRaises(Empty, old_pool_queue.get, block=False) + + + if __name__ == '__main__': +Index: urllib3-1.5/test/test_poolmanager.py +=================================================================== +--- urllib3-1.5.orig/test/test_poolmanager.py ++++ urllib3-1.5/test/test_poolmanager.py +@@ -54,13 +54,11 @@ class TestPoolManager(unittest.TestCase) + p.clear() + self.assertEqual(len(p.pools), 0) + +- with self.assertRaises(ClosedPoolError): +- conn_pool._get_conn() ++ self.assertRaises(ClosedPoolError, conn_pool._get_conn) + + conn_pool._put_conn(conn) + +- with self.assertRaises(ClosedPoolError): +- conn_pool._get_conn() ++ self.assertRaises(ClosedPoolError, conn_pool._get_conn) + + self.assertEqual(len(p.pools), 0) + diff --git a/python-urllib3-unbundle.patch b/python-urllib3-unbundle.patch new file mode 100644 index 0000000..4d74260 --- /dev/null +++ b/python-urllib3-unbundle.patch @@ -0,0 +1,136 @@ +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 ++ try: # backport package ++ from ordereddict import OrderedDict ++ except ImportError: ++ from .packages.ordered_dict import OrderedDict + + + __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,14 @@ from .exceptions import ( + TimeoutError, + ) + +-from .packages.ssl_match_hostname import match_hostname, CertificateError +-from .packages import six ++try: ++ from backports.ssl_match_hostname import match_hostname, CertificateError ++except ImportError: ++ from .packages.ssl_match_hostname import match_hostname, CertificateError ++try: ++ import six ++except ImportError: ++ from .packages import six + + + 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 ++try: ++ import six ++ from six import b ++except ImportError: ++ from .packages import six ++ from .packages.six import b + + writer = codecs.lookup('utf-8')[3] + +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 ++try: ++ from six import string_types as basestring ++except ImportError: ++ from .packages.six import string_types as basestring + + + 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 ++try: ++ import six ++except ImporError: ++ from .packages import six + from .exceptions import LocationParseError + + +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,10 @@ + import unittest + + from urllib3.connectionpool import connection_from_url, HTTPConnectionPool +-from urllib3.packages.ssl_match_hostname import CertificateError ++try: ++ from backports.ssl_match_hostname import CertificateError ++except ImportError: ++ 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 !!' diff --git a/python-urllib3.spec b/python-urllib3.spec new file mode 100644 index 0000000..00e96f5 --- /dev/null +++ b/python-urllib3.spec @@ -0,0 +1,149 @@ +%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 srcname urllib3 + +Name: python-%{srcname} +Version: 1.5 +Release: 3%{?dist} +Summary: Python HTTP library with thread-safe connection pooling and file post + +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 +Patch0: python-urllib3-default-ssl-cert-validate.patch +### TODO: Send this to upstream urllib3 +# make all imports of things in packages try system copies first +Patch1: python-urllib3-unbundle.patch +### TODO: Send this upstream +# Compatibility with python-2.6's unittest +Patch2: python-urllib3-py2.6-compat.patch +# Remove logging-clear-handlers from setup.cfg because it's not available in RHEL6's nose +Patch100: python-urllib3-old-nose-compat.patch + +BuildArch: noarch + +Requires: ca-certificates +Requires: python-six + +### TODO: In review https://bugzilla.redhat.com/show_bug.cgi?id=885013 +# Requires: python-backports-ssl_match_hostname +%if 0%{?rhel} <= 6 +BuildRequires: python-ordereddict +Requires: python-ordereddict +%endif + +BuildRequires: python2-devel +# For unittests +BuildRequires: python-nose +BuildRequires: python-six +BuildRequires: python-tornado + +%if 0%{?with_python3} +BuildRequires: python3-devel +# For unittests +BuildRequires: python3-nose +BuildRequires: python3-six +BuildRequires: python3-tornado +%endif # with_python3 + +%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 + + +%prep +%setup -q -n %{srcname}-%{version} + +### TODO: unbundle everything in packages/: +# Need: +# ssl_match_hostname https://bugzilla.redhat.com/show_bug.cgi?id=885013 +# rm -rf urllib3/packages/ +rm -rf urllib3/packages/six* +rm -rf urllib3/packages/ordered_dict* + +%patch0 -p1 +%patch1 -p1 +%if 0%{?rhel} && 0%{?rhel} <= 6 +%patch100 -p1 +%patch2 -p1 +%endif + +%if 0%{?with_python3} +rm -rf %{py3dir} +cp -a . %{py3dir} +%endif # with_python3 + +%build +%{__python} setup.py build + +%if 0%{?with_python3} +pushd %{py3dir} +%{__python3} setup.py build +popd +%endif # with_python3 + +%install +rm -rf %{buildroot} +%{__python} 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 +%doc CHANGES.rst LICENSE.txt README.rst CONTRIBUTORS.txt +# For noarch packages: sitelib +%{python_sitelib}/* + +%if 0%{?with_python3} +%files -n python3-%{srcname} +%doc LICENSE.txt +# For noarch packages: sitelib +%{python3_sitelib}/* +%endif # with_python3 + +%changelog +* Wed Feb 27 2013 Ralph Bean - 1.5-3 +- Renamed patches to python-urllib3-* +- Fixed ssl check patch to use the correct cert path for Fedora. +- Included dependency on ca-certificates +- Cosmetic indentation changes to the .spec file. + +* Tue Feb 5 2013 Toshio Kuratomi - 1.5-2 +- python3-tornado BR and run all unittests on python3 + +* Mon Feb 04 2013 Toshio Kuratomi 1.5-1 +- Initial fedora build. + diff --git a/sources b/sources index e69de29..24f2a19 100644 --- a/sources +++ b/sources @@ -0,0 +1 @@ +3ee4b375a095bb6098f1ed75f8058e48 urllib3-1.5.tar.gz