108 lines
3.3 KiB
Python
108 lines
3.3 KiB
Python
"""
|
|
Tests for whether the standard library hooks in ``future`` are compatible with
|
|
the ``requests`` package.
|
|
"""
|
|
|
|
from __future__ import absolute_import, unicode_literals, print_function
|
|
from future import standard_library
|
|
from future.tests.base import unittest, CodeHandler
|
|
import textwrap
|
|
import sys
|
|
import os
|
|
import io
|
|
|
|
|
|
# Don't import requests first. This avoids the problem we want to expose:
|
|
# with standard_library.suspend_hooks():
|
|
# try:
|
|
# import requests
|
|
# except ImportError:
|
|
# requests = None
|
|
|
|
|
|
class write_module(object):
|
|
"""
|
|
A context manager to streamline the tests. Creates a temp file for a
|
|
module designed to be imported by the ``with`` block, then removes it
|
|
afterwards.
|
|
"""
|
|
def __init__(self, code, tempdir):
|
|
self.code = code
|
|
self.tempdir = tempdir
|
|
|
|
def __enter__(self):
|
|
print('Creating {0}test_imports_future_stdlib.py ...'.format(self.tempdir))
|
|
with io.open(self.tempdir + 'test_imports_future_stdlib.py', 'wt',
|
|
encoding='utf-8') as f:
|
|
f.write(textwrap.dedent(self.code))
|
|
sys.path.insert(0, self.tempdir)
|
|
return self
|
|
|
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
"""
|
|
If an exception occurred, we leave the file for inspection.
|
|
"""
|
|
sys.path.remove(self.tempdir)
|
|
if exc_type is None:
|
|
# No exception occurred
|
|
os.remove(self.tempdir + 'test_imports_future_stdlib.py')
|
|
try:
|
|
os.remove(self.tempdir + 'test_imports_future_stdlib.pyc')
|
|
except OSError:
|
|
pass
|
|
|
|
|
|
class TestRequests(CodeHandler):
|
|
"""
|
|
This class tests whether the requests module conflicts with the
|
|
standard library import hooks, as in issue #19.
|
|
"""
|
|
def test_remove_hooks_then_requests(self):
|
|
code = """
|
|
from future import standard_library
|
|
standard_library.install_hooks()
|
|
|
|
import builtins
|
|
import http.client
|
|
import html.parser
|
|
"""
|
|
with write_module(code, self.tempdir):
|
|
import test_imports_future_stdlib
|
|
standard_library.remove_hooks()
|
|
try:
|
|
import requests
|
|
except ImportError:
|
|
print("Requests doesn't seem to be available. Skipping requests test ...")
|
|
else:
|
|
r = requests.get('http://google.com')
|
|
self.assertTrue(r)
|
|
self.assertTrue(True)
|
|
|
|
|
|
def test_requests_cm(self):
|
|
"""
|
|
Tests whether requests can be used importing standard_library modules
|
|
previously with the hooks context manager
|
|
"""
|
|
code = """
|
|
from future import standard_library
|
|
with standard_library.hooks():
|
|
import builtins
|
|
import html.parser
|
|
import http.client
|
|
"""
|
|
with write_module(code, self.tempdir):
|
|
import test_imports_future_stdlib
|
|
try:
|
|
import requests
|
|
except ImportError:
|
|
print("Requests doesn't seem to be available. Skipping requests test ...")
|
|
else:
|
|
r = requests.get('http://google.com')
|
|
self.assertTrue(r)
|
|
self.assertTrue(True)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|