- Add patch to fix tests fix-tests.patch

- Use pytest to execute the tests, same as the upstream
  - Fix import of pyOpenSSL shim from urllib3 for PKCS12 adapter

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-requests-toolbelt?expand=0&rev=14
This commit is contained in:
Tomáš Chvátal 2019-05-06 14:15:56 +00:00 committed by Git OBS Bridge
parent c0c12b1629
commit d8e3d5988c
3 changed files with 148 additions and 13 deletions

128
fix-tests.patch Normal file
View File

@ -0,0 +1,128 @@
From c4f918572751151eb3bfc7dfa94580b3e2867a9e Mon Sep 17 00:00:00 2001
From: Jon Dufresne <jon.dufresne@gmail.com>
Date: Sun, 3 Feb 2019 09:02:24 -0800
Subject: [PATCH] Fix unhandled exceptions from threads during tests
A queue.Queue() object was not always passed to SessionThread. In this
case, SessionThread._make_request() would raise an exception trying to
call methods on the expected object. Now, always pass a usable object to
SessionThread.
Previously appeared as:
Traceback (most recent call last):
File "/usr/lib64/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/usr/lib64/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "toolbelt/requests_toolbelt/threaded/thread.py", line 41, in _make_request
kwargs = self._jobs.get_nowait()
AttributeError: 'NoneType' object has no attribute 'get_nowait'
Exception in thread cd08fad6-d21d-41b0-921e-737a149b12be:
Traceback (most recent call last):
File "/usr/lib64/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/usr/lib64/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "toolbelt/requests_toolbelt/threaded/thread.py", line 41, in _make_request
kwargs = self._jobs.get_nowait()
AttributeError: 'NoneType' object has no attribute 'get_nowait'
Exception in thread 4fb72f0d-ba1c-4a78-97a2-4a7283ea01fe:
Traceback (most recent call last):
File "/usr/lib64/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/usr/lib64/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "toolbelt/requests_toolbelt/threaded/thread.py", line 41, in _make_request
kwargs = self._jobs.get_nowait()
AttributeError: 'NoneType' object has no attribute 'get_nowait'
Exception in thread 5f3711af-0c01-4821-9e25-8074bbbf769b:
Traceback (most recent call last):
File "/usr/lib64/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/usr/lib64/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "toolbelt/requests_toolbelt/threaded/thread.py", line 41, in _make_request
kwargs = self._jobs.get_nowait()
AttributeError: 'NoneType' object has no attribute 'get_nowait'
---
tests/threaded/test_pool.py | 15 ++++++++++-----
tests/threaded/test_thread.py | 5 ++++-
2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/tests/threaded/test_pool.py b/tests/threaded/test_pool.py
index b0653bb..b949dd8 100644
--- a/tests/threaded/test_pool.py
+++ b/tests/threaded/test_pool.py
@@ -26,32 +26,37 @@ def test_requires_positive_number_of_processes(self):
def test_number_of_processes_can_be_arbitrary(self):
"""Show that the number of processes can be set."""
- p = pool.Pool(None, num_processes=100)
+ job_queue = queue.Queue()
+ p = pool.Pool(job_queue, num_processes=100)
assert p._processes == 100
assert len(p._pool) == 100
- p = pool.Pool(None, num_processes=1)
+ job_queue = queue.Queue()
+ p = pool.Pool(job_queue, num_processes=1)
assert p._processes == 1
assert len(p._pool) == 1
def test_initializer_is_called(self):
"""Ensure that the initializer function is called."""
+ job_queue = queue.Queue()
initializer = mock.MagicMock()
- pool.Pool(None, num_processes=1, initializer=initializer)
+ pool.Pool(job_queue, num_processes=1, initializer=initializer)
assert initializer.called is True
initializer.assert_called_once_with(mock.ANY)
def test_auth_generator_is_called(self):
"""Ensure that the auth_generator function is called."""
+ job_queue = queue.Queue()
auth_generator = mock.MagicMock()
- pool.Pool(None, num_processes=1, auth_generator=auth_generator)
+ pool.Pool(job_queue, num_processes=1, auth_generator=auth_generator)
assert auth_generator.called is True
auth_generator.assert_called_once_with(mock.ANY)
def test_session_is_called(self):
"""Ensure that the session function is called."""
+ job_queue = queue.Queue()
session = mock.MagicMock()
- pool.Pool(None, num_processes=1, session=session)
+ pool.Pool(job_queue, num_processes=1, session=session)
assert session.called is True
session.assert_called_once_with()
diff --git a/tests/threaded/test_thread.py b/tests/threaded/test_thread.py
index bb92f7f..fd7e96b 100644
--- a/tests/threaded/test_thread.py
+++ b/tests/threaded/test_thread.py
@@ -19,6 +19,8 @@ def _make_mocks():
def _initialize_a_session_thread(session=None, job_queue=None,
response_queue=None, exception_queue=None):
+ if job_queue is None:
+ job_queue = queue.Queue()
with mock.patch.object(threading, 'Thread') as Thread:
thread_instance = mock.MagicMock()
Thread.return_value = thread_instance
@@ -52,10 +54,11 @@ def test_thread_initialization(self):
def test_is_alive_proxies_to_worker(self):
"""Test that we proxy the is_alive method to the Thread."""
+ job_queue = queue.Queue()
with mock.patch.object(threading, 'Thread') as Thread:
thread_instance = mock.MagicMock()
Thread.return_value = thread_instance
- st = thread.SessionThread(None, None, None, None)
+ st = thread.SessionThread(None, job_queue, None, None)
st.is_alive()
thread_instance.is_alive.assert_called_once_with()

View File

@ -1,8 +1,14 @@
-------------------------------------------------------------------
Mon May 6 14:06:37 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
- Add patch to fix tests fix-tests.patch
- Use pytest to execute the tests, same as the upstream
------------------------------------------------------------------- -------------------------------------------------------------------
Thu Apr 25 19:57:47 UTC 2019 - Dirk Mueller <dmueller@suse.com> Thu Apr 25 19:57:47 UTC 2019 - Dirk Mueller <dmueller@suse.com>
- update to 0.9.1: - update to 0.9.1:
- Fix import of pyOpenSSL shim from urllib3 for PKCS12 adapter - Fix import of pyOpenSSL shim from urllib3 for PKCS12 adapter
- Add X509 Adapter that can handle PKCS12 - Add X509 Adapter that can handle PKCS12
- Add stateless solution for streaming files by MultipartEncoder from one host to another (in chunks) - Add stateless solution for streaming files by MultipartEncoder from one host to another (in chunks)
- Update link to example - Update link to example

View File

@ -23,21 +23,21 @@ Release: 0
Summary: A utility belt for advanced users of python3-requests Summary: A utility belt for advanced users of python3-requests
License: Apache-2.0 License: Apache-2.0
Group: Development/Languages/Python Group: Development/Languages/Python
Url: https://toolbelt.readthedocs.org URL: https://github.com/requests/toolbelt
Source: https://files.pythonhosted.org/packages/source/r/requests-toolbelt/requests-toolbelt-%{version}.tar.gz Source: https://files.pythonhosted.org/packages/source/r/requests-toolbelt/requests-toolbelt-%{version}.tar.gz
BuildRequires: %{python_module requests >= 2.0.1} Patch0: fix-tests.patch
BuildRequires: %{python_module requests >= 2.12.2}
BuildRequires: %{python_module setuptools} BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires: python-requests >= 2.12.2
BuildArch: noarch
# SECTION test requirements # SECTION test requirements
BuildRequires: %{python_module betamax} BuildRequires: %{python_module betamax >= 0.5.0}
BuildRequires: %{python_module mock} BuildRequires: %{python_module mock}
BuildRequires: %{python_module pyOpenSSL} BuildRequires: %{python_module pyOpenSSL}
BuildRequires: %{python_module pytest} BuildRequires: %{python_module pytest}
# /SECTION # /SECTION
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires: python-requests >= 2.0.1
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildArch: noarch
%python_subpackages %python_subpackages
%description %description
@ -48,19 +48,20 @@ some idiosyncracies prevent effective or sane testing on that version.
%prep %prep
%setup -q -n requests-toolbelt-%{version} %setup -q -n requests-toolbelt-%{version}
%patch0 -p1
rm -rf requests_toolbelt.egg-info rm -rf requests_toolbelt.egg-info
# requires network access
rm -v tests/test_multipart_encoder.py
%build %build
%python_build %python_build
%install %install
%python_install %python_install
%python_expand %fdupes -s %{buildroot}%{$python_sitelib} %python_expand %fdupes %{buildroot}%{$python_sitelib}
%check %check
# requires network access %pytest
rm -v tests/test_multipart_encoder.py
%python_exec setup.py test
%files %{python_files} %files %{python_files}
%license LICENSE %license LICENSE