-
-
Notifications
You must be signed in to change notification settings - Fork 984
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add workaround for httpretty incompatibility with requests and pyopenssl
See gabrielfalcao/HTTPretty#242 Patch based on mredar/harvester@228e9c3 Signed-off-by: Michal Čihař <michal@cihar.com>
- Loading branch information
Showing
2 changed files
with
47 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
# from : https://github.com/gabrielfalcao/HTTPretty/issues/242 | ||
from httpretty import HTTPretty as OriginalHTTPretty | ||
|
||
try: | ||
from requests.packages.urllib3.contrib.pyopenssl import inject_into_urllib3, extract_from_urllib3 | ||
pyopenssl_override = True | ||
except: | ||
pyopenssl_override = False | ||
|
||
|
||
class MyHTTPretty(OriginalHTTPretty): | ||
""" pyopenssl monkey-patches the default ssl_wrap_socket() function in the 'requests' library, | ||
but this can stop the HTTPretty socket monkey-patching from working for HTTPS requests. | ||
Our version extends the base HTTPretty enable() and disable() implementations to undo | ||
and redo the pyopenssl monkey-patching, respectively. | ||
""" | ||
|
||
@classmethod | ||
def enable(cls): | ||
OriginalHTTPretty.enable() | ||
if pyopenssl_override: | ||
# Take out the pyopenssl version - use the default implementation | ||
extract_from_urllib3() | ||
|
||
@classmethod | ||
def disable(cls): | ||
OriginalHTTPretty.disable() | ||
if pyopenssl_override: | ||
# Put the pyopenssl version back in place | ||
inject_into_urllib3() | ||
|
||
|
||
# Substitute in our version | ||
HTTPretty = MyHTTPretty | ||
|
||
import httpretty.core | ||
httpretty.core.httpretty = MyHTTPretty | ||
|
||
# May need to set other module-level attributes here, e.g. enable, reset etc, | ||
# depending on your needs | ||
import httpretty | ||
httpretty.httpretty = MyHTTPretty | ||
httpretty.register_uri = httpretty.register_uri |