Unvendor responses, move back to upstream.

This commit is contained in:
Steve Pulec 2018-04-05 16:57:43 -04:00
commit cd1c6d3e6c
19 changed files with 79 additions and 1388 deletions

View file

@ -9,7 +9,7 @@ import re
import six
from moto import settings
from moto.packages.responses import responses
import responses
from moto.packages.httpretty import HTTPretty
from .utils import (
convert_httpretty_response,
@ -124,31 +124,90 @@ RESPONSES_METHODS = [responses.GET, responses.DELETE, responses.HEAD,
responses.OPTIONS, responses.PATCH, responses.POST, responses.PUT]
class ResponsesMockAWS(BaseMockAWS):
class CallbackResponse(responses.CallbackResponse):
'''
Need to subclass so we can change a couple things
'''
def get_response(self, request):
'''
Need to override this so we can pass decode_content=False
'''
headers = self.get_headers()
result = self.callback(request)
if isinstance(result, Exception):
raise result
status, r_headers, body = result
body = responses._handle_body(body)
headers.update(r_headers)
return responses.HTTPResponse(
status=status,
reason=six.moves.http_client.responses.get(status),
body=body,
headers=headers,
preload_content=False,
# Need to not decode_content to mimic requests
decode_content=False,
)
def _url_matches(self, url, other, match_querystring=False):
'''
Need to override this so we can fix querystrings breaking regex matching
'''
if not match_querystring:
other = other.split('?', 1)[0]
if responses._is_string(url):
if responses._has_unicode(url):
url = responses._clean_unicode(url)
if not isinstance(other, six.text_type):
other = other.encode('ascii').decode('utf8')
return self._url_matches_strict(url, other)
elif isinstance(url, responses.Pattern) and url.match(other):
return True
else:
return False
botocore_mock = responses.RequestsMock(assert_all_requests_are_fired=False, target='botocore.vendored.requests.adapters.HTTPAdapter.send')
class ResponsesMockAWS(BaseMockAWS):
def reset(self):
botocore_mock.reset()
responses.reset()
def enable_patching(self):
botocore_mock.start()
responses.start()
for method in RESPONSES_METHODS:
for backend in self.backends_for_urls.values():
for key, value in backend.urls.items():
responses.add_callback(
method=method,
url=re.compile(key),
callback=convert_flask_to_responses_response(value),
responses.add(
CallbackResponse(
method=method,
url=re.compile(key),
callback=convert_flask_to_responses_response(value),
stream=True,
match_querystring=False,
)
)
botocore_mock.add(
CallbackResponse(
method=method,
url=re.compile(key),
callback=convert_flask_to_responses_response(value),
stream=True,
match_querystring=False,
)
)
for pattern in responses.mock._urls:
pattern['stream'] = True
def disable_patching(self):
try:
responses.stop()
except AttributeError:
pass
responses.reset()
botocore_mock.stop()
responses.stop()
MockAWS = ResponsesMockAWS