Update to 0.9.4 (#1572888)

This commit is contained in:
Miro Hrončok 2018-05-19 18:51:31 +02:00
parent 828c1fe8ee
commit 8f0183b722
4 changed files with 29 additions and 627 deletions

View File

@ -13,19 +13,19 @@ Addresses #316.
1 file changed, 2 insertions(+) 1 file changed, 2 insertions(+)
diff --git a/httpretty/core.py b/httpretty/core.py diff --git a/httpretty/core.py b/httpretty/core.py
index 34d1ed1..c408c38 100644 index 4f72678..25df1fd 100644
--- a/httpretty/core.py --- a/httpretty/core.py
+++ b/httpretty/core.py +++ b/httpretty/core.py
@@ -1189,6 +1189,7 @@ def httprettified(test): @@ -1580,6 +1580,7 @@ def httprettified(test):
if hasattr(klass, 'setUp')
else None) else None)
def new_setUp(self): def new_setUp(self):
+ httpretty.reset() + httpretty.reset()
httpretty.enable() httpretty.enable()
if use_addCleanup: if use_addCleanup:
self.addCleanup(httpretty.disable) self.addCleanup(httpretty.disable)
@@ -1202,6 +1203,7 @@ def httprettified(test): @@ -1594,6 +1595,7 @@ def httprettified(test):
else None)
def new_tearDown(self): def new_tearDown(self):
httpretty.disable() httpretty.disable()
+ httpretty.reset() + httpretty.reset()

View File

@ -1,31 +0,0 @@
From f642a108a5eb199665a39830f095073bd2406003 Mon Sep 17 00:00:00 2001
From: Shaform <shaform@gmail.com>
Date: Tue, 20 Dec 2016 20:26:36 +0800
Subject: [PATCH] fix test on python3
---
tests/functional/base.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/functional/base.py b/tests/functional/base.py
index b8355f0..6f143f6 100644
--- a/tests/functional/base.py
+++ b/tests/functional/base.py
@@ -37,7 +37,7 @@
from functools import wraps
from os.path import abspath, dirname, join
-from httpretty.core import POTENTIAL_HTTP_PORTS, old_socket
+from httpretty.core import POTENTIAL_HTTP_PORTS, old_socket, decode_utf8
def get_free_tcp_port():
@@ -63,7 +63,7 @@ def post(self, matched):
payload = dict(self.request.arguments)
self.write(json.dumps({
matched or 'index': payload,
- 'req_body': self.request.body,
+ 'req_body': decode_utf8(self.request.body),
'req_headers': dict(self.request.headers.items()),
}, indent=4))

View File

@ -1,528 +0,0 @@
diff --git a/.gitignore b/.gitignore
index f465139..761556d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@ _public/
tests/functional/fixtures/recording-*.json
#*
*#*
+.idea/
diff --git a/development.txt b/development.txt
index 6b7a5a4..5a8ff32 100644
--- a/development.txt
+++ b/development.txt
@@ -6,9 +6,9 @@ mock==1.3.0
nose==1.3.7
nose-randomly==1.2.0
rednose==0.4.3
-requests==2.8.1
+requests[security]==2.11.1
sure==1.2.24
-urllib3==1.12
+urllib3==1.19
tornado==4.3
coverage==4.0.3
Sphinx==1.3.3
diff --git a/httpretty/core.py b/httpretty/core.py
index 34d1ed1..8ece7fe 100644
--- a/httpretty/core.py
+++ b/httpretty/core.py
@@ -30,6 +30,7 @@ import codecs
import inspect
import socket
import functools
+from functools import partial
import itertools
import warnings
import traceback
@@ -38,7 +39,6 @@ import contextlib
import threading
import tempfile
-
from .compat import (
PY3,
StringIO,
@@ -99,17 +99,16 @@ try: # pragma: no cover
if not PY3:
old_sslwrap_simple = ssl.sslwrap_simple
old_sslsocket = ssl.SSLSocket
+ #old_sslcontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
except ImportError: # pragma: no cover
ssl = None
-# used to handle error caused by ndg-httpsclient
-try: # pragma: no cover
- from requests.packages.urllib3.contrib.pyopenssl import inject_into_urllib3, extract_from_urllib3
- pyopenssl_override = True
-except ImportError: # pragma: no cover
- pyopenssl_override = False
-
+try:
+ import requests.packages.urllib3.connection as requests_urllib3_connection
+ old_requests_ssl_wrap_socket = requests_urllib3_connection.ssl_wrap_socket
+except ImportError:
+ requests_urllib3_connection = None
DEFAULT_HTTP_PORTS = frozenset([80])
POTENTIAL_HTTP_PORTS = set(DEFAULT_HTTP_PORTS)
@@ -298,6 +297,7 @@ class fakesock(object):
self.truesock = (old_socket(family, type, protocol)
if httpretty.allow_net_connect
else None)
+ self._connected_truesock = False
self._closed = True
self.fd = FakeSockFile()
self.fd.socket = _sock or self
@@ -354,10 +354,16 @@ class fakesock(object):
self.is_http = self._port in ports_to_check
if not self.is_http:
- if self.truesock:
+ if self.truesock and not self._connected_truesock:
self.truesock.connect(self._address)
+ self._connected_truesock = True
else:
raise UnmockedError()
+ elif self.truesock is not None and not self._connected_truesock:
+ matcher = httpretty.match_http_address(self._host, self._port)
+ if matcher is None:
+ self.truesock.connect(self._address)
+ self._connected_truesock = True
def fileno(self):
if self.truesock:
@@ -365,9 +371,9 @@ class fakesock(object):
return self.fd.fileno()
def close(self):
- if not (self.is_http and self._closed):
- if self.truesock:
- self.truesock.close()
+ if self._connected_truesock:
+ self.truesock.close()
+ self._connected_truesock = False
self._closed = True
def makefile(self, mode='r', bufsize=-1):
@@ -404,22 +410,27 @@ class fakesock(object):
buffer so that HTTPretty can return it accordingly when
necessary.
"""
-
if not self.truesock:
raise UnmockedError()
if not self.is_http:
return self.truesock.sendall(data, *args, **kw)
- self.truesock.connect(self._address)
+ if self._address[1] == 443 and old_sslsocket:
+ sock = old_sslsocket(self.truesock)
+ else:
+ sock = self.truesock
+
+ if not self._connected_truesock:
+ sock.connect(self._address)
- self.truesock.setblocking(1)
- self.truesock.sendall(data, *args, **kw)
+ sock.setblocking(1)
+ sock.sendall(data, *args, **kw)
should_continue = True
while should_continue:
try:
- received = self.truesock.recv(self._bufsize)
+ received = sock.recv(self._bufsize)
self.fd.write(received)
should_continue = bool(received.strip())
@@ -544,8 +555,17 @@ class fakesock(object):
return getattr(self.truesock, name)
-def fake_wrap_socket(s, *args, **kw):
- return s
+def fake_wrap_socket(orig_wrap_socket_fn, sock, *args, **kw):
+ server_hostname = kw.get('server_hostname')
+ if server_hostname is not None:
+ matcher = httpretty.match_https_hostname(server_hostname)
+ if matcher is None:
+ return orig_wrap_socket_fn(
+ sock,
+ *args,
+ **kw
+ )
+ return sock
def create_fake_connection(
@@ -937,6 +957,53 @@ class httpretty(HttpBaseClass):
return (None, [])
@classmethod
+ def match_https_hostname(cls, hostname):
+ items = sorted(
+ cls._entries.items(),
+ key=lambda matcher_entries: matcher_entries[0].priority,
+ reverse=True,
+ )
+ for matcher, value in items:
+ if matcher.info is None:
+ pattern_with_port = "https://{0}:".format(hostname)
+ pattern_without_port = "https://{0}/".format(hostname)
+ for pattern in [pattern_with_port, pattern_without_port]:
+ if matcher.regex.search(pattern) is not None \
+ or matcher.regex.pattern.startswith(pattern):
+ return matcher
+
+ elif matcher.info.hostname == hostname:
+ return matcher
+ return None
+
+ @classmethod
+ def match_http_address(cls, hostname, port):
+ items = sorted(
+ cls._entries.items(),
+ key=lambda matcher_entries: matcher_entries[0].priority,
+ reverse=True,
+ )
+ for matcher, value in items:
+ if matcher.info is None:
+ if port in POTENTIAL_HTTPS_PORTS:
+ scheme = 'https://'
+ else:
+ scheme = 'http://'
+
+ pattern_without_port = "{0}{1}/".format(scheme, hostname)
+ pattern_with_port = "{0}{1}:{2}/".format(scheme, hostname, port)
+ for pattern in [pattern_with_port, pattern_without_port]:
+ if matcher.regex.search(pattern_without_port) is not None \
+ or matcher.regex.pattern.startswith(pattern):
+ return matcher
+
+ elif matcher.info.hostname == hostname \
+ and matcher.info.port == port:
+ return matcher
+
+ return None
+
+ @classmethod
@contextlib.contextmanager
def record(cls, filename, indentation=4, encoding='utf-8'):
try:
@@ -1112,9 +1179,11 @@ class httpretty(HttpBaseClass):
ssl.sslwrap_simple = old_sslwrap_simple
ssl.__dict__['sslwrap_simple'] = old_sslwrap_simple
- if pyopenssl_override:
- # Replace PyOpenSSL Monkeypatching
- inject_into_urllib3()
+ if requests_urllib3_connection is not None:
+ requests_urllib3_connection.ssl_wrap_socket = \
+ old_requests_ssl_wrap_socket
+ requests_urllib3_connection.__dict__['ssl_wrap_socket'] = \
+ old_requests_ssl_wrap_socket
@classmethod
def is_enabled(cls):
@@ -1152,19 +1221,22 @@ class httpretty(HttpBaseClass):
socks.__dict__['socksocket'] = fakesock.socket
if ssl:
- ssl.wrap_socket = fake_wrap_socket
+ new_wrap = partial(fake_wrap_socket, old_ssl_wrap_socket)
+ ssl.wrap_socket = new_wrap
ssl.SSLSocket = FakeSSLSocket
- ssl.__dict__['wrap_socket'] = fake_wrap_socket
+ ssl.__dict__['wrap_socket'] = new_wrap
ssl.__dict__['SSLSocket'] = FakeSSLSocket
if not PY3:
- ssl.sslwrap_simple = fake_wrap_socket
- ssl.__dict__['sslwrap_simple'] = fake_wrap_socket
+ ssl.sslwrap_simple = new_wrap
+ ssl.__dict__['sslwrap_simple'] = new_wrap
+
+ if requests_urllib3_connection is not None:
+ new_wrap = partial(fake_wrap_socket, old_requests_ssl_wrap_socket)
+ requests_urllib3_connection.ssl_wrap_socket = new_wrap
+ requests_urllib3_connection.__dict__['ssl_wrap_socket'] = new_wrap
- if pyopenssl_override:
- # Remove PyOpenSSL monkeypatch - use the default implementation
- extract_from_urllib3()
class httprettized(object):
diff --git a/test-requirements.txt b/test-requirements.txt
index bda473e..46f1062 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -1,4 +1,4 @@
--r dev.txt
+-r development.txt
httplib2==0.9
requests==2.5.1
tornado==4.0.2
diff --git a/tests/functional/test_requests.py b/tests/functional/test_requests.py
index 4e2063e..91baefd 100644
--- a/tests/functional/test_requests.py
+++ b/tests/functional/test_requests.py
@@ -37,7 +37,7 @@ from httpretty import HTTPretty, httprettified
from httpretty.compat import text_type
from httpretty.core import decode_utf8
-from .base import FIXTURE_FILE, use_tornado_server
+from tests.functional.base import FIXTURE_FILE, use_tornado_server
from tornado import version as tornado_version
try:
@@ -567,7 +567,12 @@ def test_httpretty_provides_easy_access_to_querystrings_with_regexes():
})
+try:
+ from unittest import skip
+except ImportError:
+ from unittest2 import skip
@httprettified
+@skip
def test_httpretty_allows_to_chose_if_querystring_should_be_matched():
"HTTPretty should provide a way to not match regexes that have a different querystring"
@@ -580,13 +582,9 @@ def test_httpretty_allows_to_chose_if_querystring_should_be_matched():
response = requests.get('https://example.org/what/')
expect(response.text).to.equal('Nudge, nudge, wink, wink. Know what I mean?')
- try:
- requests.get('https://example.org/what/?flying=coconuts')
- raised = False
- except requests.ConnectionError:
- raised = True
- assert raised is True
+ response = requests.get('https://example.org/what/?flying=coconuts')
+ expect(response.text).to.not_be.equal('Nudge, nudge, wink, wink. Know what I mean?')
@httprettified
diff --git a/tests/pyopenssl/test_mock.py b/tests/pyopenssl/test_mock.py
index 1de759a..cfa5143 100644
--- a/tests/pyopenssl/test_mock.py
+++ b/tests/pyopenssl/test_mock.py
@@ -31,19 +31,10 @@ import requests
from httpretty import HTTPretty, httprettified
from sure import expect
-from requests.packages.urllib3.contrib.pyopenssl import inject_into_urllib3, extract_from_urllib3
-
@httprettified
def test_httpretty_overrides_when_pyopenssl_installed():
('HTTPretty should remove PyOpenSSLs urllib3 mock if it is installed')
-
- # When we run Httpretty with PyOpenSSL and ndg-httpsclient installed
- from httpretty.core import pyopenssl_override
-
- # Then we override pyopenssl
- pyopenssl_override.should.be.true
-
# And HTTPretty works successfully
HTTPretty.register_uri(HTTPretty.GET, "https://yipit.com/",
body="Find the best daily deals")
@@ -53,20 +44,3 @@ def test_httpretty_overrides_when_pyopenssl_installed():
expect(HTTPretty.last_request.method).to.equal('GET')
expect(HTTPretty.last_request.path).to.equal('/')
-
-@httprettified
-def test_httpretty_fails_when_pyopenssl_is_not_replaced():
- ('HTTPretty should fail if PyOpenSSL is installed and we do not remove the monkey patch')
-
- # When we don't replace the PyOpenSSL monkeypatch
- inject_into_urllib3()
-
- # And we use HTTPretty on as ssl site
- HTTPretty.register_uri(HTTPretty.GET, "https://yipit.com/",
- body="Find the best daily deals")
-
- # Then we get an SSL error
- requests.get.when.called_with('https://yipit.com').should.throw(requests.exceptions.SSLError)
-
- # Undo injection after test
- extract_from_urllib3()
\ No newline at end of file
diff --git a/tests/unit/test_core.py b/tests/unit/test_core.py
index e28404f..b87d2aa 100644
--- a/tests/unit/test_core.py
+++ b/tests/unit/test_core.py
@@ -263,6 +263,7 @@ def test_fakesock_socket_close(old_socket):
# Given a fake socket instance that is synthetically open
socket = fakesock.socket()
socket._closed = False
+ socket._connected_truesock = True
# When I close it
socket.close()
diff --git a/tests/unit/test_fakesocket.py b/tests/unit/test_fakesocket.py
new file mode 100644
index 0000000..8b84d99
--- /dev/null
+++ b/tests/unit/test_fakesocket.py
@@ -0,0 +1,72 @@
+# #!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# <HTTPretty - HTTP client mock for Python>
+# Copyright (C) <2011-2012> Gabriel Falcão <gabriel@nacaolivre.org>
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+
+import functools
+import socket
+
+import mock
+
+
+class FakeSocket(socket.socket):
+ """
+ Just an editable socket factory
+ It allows mock to patch readonly functions
+ """
+ connect = sendall = lambda *args, **kw: None
+
+
+fake_socket_interupter_flag = {}
+
+def recv(flag, size):
+ """
+ Two pass recv implementation
+
+ This implementation will for the first time send something that is smaller than
+ the asked size passed in argument.
+ Any further call will just raise RuntimeError
+ """
+ if 'was_here' in flag:
+ raise RuntimeError('Already sent everything')
+ else:
+ flag['was_here'] = None
+ return 'a'* (size - 1)
+
+recv = functools.partial(recv, fake_socket_interupter_flag)
+
+@mock.patch('httpretty.old_socket', new=FakeSocket)
+def _test_shorten_response():
+ u"HTTPretty shouldn't try to read from server when communication is over"
+ from sure import expect
+ import httpretty
+
+ fakesocket = httpretty.fakesock.socket(socket.AF_INET,
+ socket.SOCK_STREAM)
+ with mock.patch.object(fakesocket.truesock, 'recv', recv):
+ fakesocket.connect(('localhost', 80))
+ fakesocket._true_sendall('WHATEVER')
+ expect(fakesocket.fd.read()).to.equal(
+ 'a' * (httpretty.socket_buffer_size - 1))
diff --git a/tests/unit/test_passthrough.py b/tests/unit/test_passthrough.py
new file mode 100644
index 0000000..1162638
--- /dev/null
+++ b/tests/unit/test_passthrough.py
@@ -0,0 +1,74 @@
+# #!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# <HTTPretty - HTTP client mock for Python>
+# Copyright (C) <2011-2012> Gabriel Falcão <gabriel@nacaolivre.org>
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+import requests
+from sure import expect
+
+from httpretty import (
+ HTTPretty,
+ httprettified,
+)
+
+
+@httprettified
+def test_http_passthrough():
+ url = 'http://ip4.me/'
+ response1 = requests.get(url)
+
+ HTTPretty.enable()
+ HTTPretty.register_uri(HTTPretty.GET, 'http://google.com/', body="Not Google")
+
+ response2 = requests.get('http://google.com/')
+ expect(response2.content).to.equal(b'Not Google')
+
+ response3 = requests.get(url)
+ expect(response3.content).to.equal(response1.content)
+
+ HTTPretty.disable()
+
+ response4 = requests.get(url)
+ expect(response4.content).to.equal(response1.content)
+
+
+@httprettified
+def test_https_passthrough():
+ url = 'https://www.cloudflare.com/ips-v4'
+
+ response1 = requests.get(url)
+
+ HTTPretty.enable()
+ HTTPretty.register_uri(HTTPretty.GET, 'http://google.com/', body="Not Google")
+
+ response2 = requests.get('http://google.com/')
+ expect(response2.content).to.equal(b'Not Google')
+
+ response3 = requests.get(url)
+ expect(response3.content).to.equal(response1.content)
+
+ HTTPretty.disable()
+
+ response4 = requests.get(url)
+ expect(response4.content).to.equal(response1.content)

View File

@ -7,46 +7,24 @@
%global github_name HTTPretty %global github_name HTTPretty
%global modname httpretty %global modname httpretty
# define these only if actually building from a GH snapshot not a release tarball # define these only if actually building from a GH snapshot not a release tarball
%global github_commit 70af1f8cf925ef50cb5e72212fb0aa46e1451dc3 #global github_commit 70af1f8cf925ef50cb5e72212fb0aa46e1451dc3
%global shortcommit %(c=%{github_commit}; echo ${c:0:7}) #global shortcommit %%(c=%%{github_commit}; echo ${c:0:7})
%global github_date 20161011 #global github_date 20161011
%global run_tests 1 %global run_tests 1
Name: python-httpretty Name: python-httpretty
Version: 0.8.14 Version: 0.9.4
# If github_date is defined, assume a post-release snapshot # If github_date is defined, assume a post-release snapshot
Release: 8%{?github_date:.%{github_date}git%{shortcommit}}%{?dist} Release: 1%{?github_date:.%{github_date}git%{shortcommit}}%{?dist}
Summary: HTTP request mock tool for Python Summary: HTTP request mock tool for Python
License: MIT License: MIT
URL: http://falcao.it/HTTPretty/ URL: http://falcao.it/HTTPretty/
Source0: https://github.com/%{github_owner}/%{github_name}/archive/%{github_commit}/%{github_name}-%{shortcommit}.tar.gz Source0: https://files.pythonhosted.org/packages/source/h/httpretty/httpretty-%{version}.tar.gz
# Alternative for building from a release tarball # Alternative for building from a github snapshot
#Source0: https://files.pythonhosted.org/packages/source/h/httpretty/httpretty-%{version}.tar.gz #Source0: https://github.com/%{github_owner}/%{github_name}/archive/%{github_commit}/%{github_name}-%{shortcommit}.tar.gz
# Fix HTTPS with recent openssl
# This is https://github.com/gabrielfalcao/HTTPretty/pull/313
# Squashed by checking the PR branch out from git and doing:
# git diff master > pr313.patch (because just getting 313.patch from github
# results in a patch that doesn't apply)
# I edited the patch to apply several fixes:
# 1. Rename the `_socket` arg of the `fake_wrap_socket` function to `sock`
# (as otherwise it breaks due to urllib3 calling `wrap_socket` with the
# socket arg named as `sock`)
# 2. In test_passthrough.py, correct the type of the expected response
# (requests `Response.content` is a bytestring, not a string)
# 3. Remove the addition of `test_httpretty_should_passthrough_for_ssl`,
# as it requires a remote trip
# 4. Use {0} ({1}, {2}...) in format strings, not just {}, as {} doesn't
# work in Python 2.6 (EPEL 6)
# 5. Try importing skip from unittest2 if it's not available from unittest
# (Python 2.6 unittest didn't have it)
# I've noted all these issues in comments on the PR
Patch0: pr313.patch
# Fix tests with Python 3
Patch1: https://github.com/gabrielfalcao/HTTPretty/pull/314.patch
# Avoid unnecessary remote access requirement (note: test only actually # Avoid unnecessary remote access requirement (note: test only actually
# does a remote connection after PR #313) # does a remote connection after PR #313)
@ -88,7 +66,7 @@ Don't worry, HTTPretty is here for you.
%package -n python2-httpretty %package -n python2-httpretty
Summary: %summary Summary: %summary
Requires: python2-urllib3 Requires: python2-six
%{?python_provide:%python_provide python2-httpretty} %{?python_provide:%python_provide python2-httpretty}
%description -n python2-httpretty %_description %description -n python2-httpretty %_description
@ -96,7 +74,7 @@ Requires: python2-urllib3
%if 0%{?with_python3} %if 0%{?with_python3}
%package -n python3-httpretty %package -n python3-httpretty
Summary: HTTP request mock tool for Python 3 Summary: HTTP request mock tool for Python 3
Requires: python3-urllib3 Requires: python3-six
BuildRequires: python3-devel BuildRequires: python3-devel
BuildRequires: python3-setuptools BuildRequires: python3-setuptools
@ -118,28 +96,14 @@ Don't worry, HTTPretty is here for you.
%endif %endif
%prep %prep
%autosetup -n %{github_name}-%{github_commit} -p1 %autosetup -n httpretty-%{version} -p1
# Alternative for building from a release tarball # Alternative for building from commit tarball
#autosetup -n httpretty-%{version} -p1 #autosetup -n %%{github_name}-%%{github_commit} -p1
# un-pin requirements # nose plugins we don't have yet
sed -i -e 's/==.*//g' development.txt test-requirements.txt requirements.txt sed -i 's/^with-randomly = 1$//' setup.cfg
sed -i -e 's/requests\[security\]/requests/g' development.txt sed -i 's/^rednose = 1$//' setup.cfg
# remove some 'requirements' that aren't actually needed just for us to run tests
sed -i -e '/^coverage/d' development.txt test-requirements.txt
sed -i -r -e '/^(S|s)phinx/d' development.txt
sed -i -e '/^rednose/d' development.txt
sed -i -e '/^nose-randomly/d' development.txt
sed -i -e '/^flake8/d' development.txt
sed -i -e '/^ipdb/d' development.txt
# These tests require a remote roundtrip, so remove them
rm tests/unit/test_passthrough.py
%if 0%{?with_python3}
rm -rf %{py3dir}
cp -a . %{py3dir}
%endif
%build %build
# setup.py contains non-ASCII characters; in Koji build environment # setup.py contains non-ASCII characters; in Koji build environment
@ -147,9 +111,7 @@ cp -a . %{py3dir}
LANG=en_US.UTF-8 %py2_build LANG=en_US.UTF-8 %py2_build
%if 0%{?with_python3} %if 0%{?with_python3}
pushd %{py3dir}
LANG=en_US.UTF-8 %py3_build LANG=en_US.UTF-8 %py3_build
popd
%endif %endif
%install %install
@ -157,33 +119,29 @@ rm -rf $RPM_BUILD_ROOT
LANG=en_US.UTF-8 %py2_install LANG=en_US.UTF-8 %py2_install
%if 0%{?with_python3} %if 0%{?with_python3}
pushd %{py3dir}
LANG=en_US.UTF-8 %py3_install LANG=en_US.UTF-8 %py3_install
popd
%endif %endif
%check %check
%if %{run_tests} %if %{run_tests}
LANG=en_US.UTF-8 %{__python2} setup.py test LANG=en_US.UTF-8 %{__python2} -m nose -v
%if 0%{?with_python3} %if 0%{?with_python3}
pushd %{py3dir} LANG=en_US.UTF-8 %{__python3} -m nose -v
LANG=en_US.UTF-8 %{__python3} setup.py test
popd
%endif %endif
%endif %endif
%files -n python2-httpretty %files -n python2-httpretty
%doc README.md %doc README.rst
%license COPYING %license COPYING
%{python_sitelib}/httpretty %{python_sitelib}/httpretty
%{python_sitelib}/httpretty-%{version}-py2.?.egg-info %{python_sitelib}/httpretty-%{version}-py2.?.egg-info
%if 0%{?with_python3} %if 0%{?with_python3}
%files -n python3-httpretty %files -n python3-httpretty
%doc README.md %doc README.rst
%license COPYING %license COPYING
%{python3_sitelib}/httpretty %{python3_sitelib}/httpretty
%{python3_sitelib}/httpretty-%{version}-py3.?.egg-info %{python3_sitelib}/httpretty-%{version}-py3.?.egg-info
@ -191,6 +149,9 @@ popd
%changelog %changelog
* Sat May 19 2018 Miro Hrončok <mhroncok@redhat.com> - 0.9.4-1
- Update to 0.9.4 (#1572888)
* Wed Feb 21 2018 Iryna Shcherbina <ishcherb@redhat.com> - 0.8.14-8.20161011git70af1f8 * Wed Feb 21 2018 Iryna Shcherbina <ishcherb@redhat.com> - 0.8.14-8.20161011git70af1f8
- Update Python 2 dependency declarations to new packaging standards - Update Python 2 dependency declarations to new packaging standards
(See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3)