def make_http_response( status=200, reason="OK", method="GET", url="/", headers=None, content=None ): """Return a minimal ClientResponse with fields used in tests.""" url = URL(url) headers = CIMultiDict(headers or {}) request_info = RequestInfo(url=url, method=method, headers=headers) response = ClientResponse( method, url, writer=None, continue100=None, timer=None, request_info=request_info, traces=(), loop=get_event_loop(), session=None, ) response.status = status response.reason = reason response._headers = headers if isinstance(content, io.IOBase): response.content = FakeStreamReader(content) elif content is not None: response.content = FakeStreamReader( io.BytesIO(json_dumps(content).encode("utf8")) ) response.headers["Content-Type"] = "application/json" return response
def build_response(self, method, url, params, data, headers): """""" try: if type(url) == URL: url = url.human_repr() # Check if we have to skip it if self.skip(url): return None, True # Go check see if response is in cassette if not data: data = {} if params: data.update(params) request = vcr.request.Request(method, url, data, headers) cassette = self.load_cassette(url) resp_json = cassette.play_response(request) except UnhandledHTTPRequestError: # Response not seen yet in cassette return None, False # Response was found in cassette cassette.play_counts = collections.Counter() # Create the response resp = ClientResponse( method, URL(url), request_info=Mock(), writer=Mock(), continue100=None, timer=TimerNoop(), traces=[], loop=Mock(), session=Mock(), ) # Replicate status code and reason resp.status = resp_json['status']['code'] resp.reason = resp_json['status']['message'] # Set headers and content resp._headers = CIMultiDict(resp_json['headers']) resp.content = StreamReader(Mock(), limit=DEFAULT_STREAM_LIMIT) # Get the data data = resp_json['body']['data'] resp.content.feed_data(data) resp.content.feed_eof() return resp, False
async def prepare_fake_response(url, *, method='GET', req_headers=None, resp_headers=None, resp_status=200, resp_reason='OK', resp_content=b''): resp = ClientResponse(method, URL(val=url), request_info=RequestInfo(url, method, req_headers or {})) resp._content = resp_content resp.status = resp_status resp.reason = resp_reason resp.headers = resp_headers or {} future = asyncio.Future() future.set_result(resp) return future