예제 #1
0
파일: store.py 프로젝트: onna/cassettedeck
    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
예제 #2
0
    def build_response(self):
        if isinstance(self.exception, Exception):
            raise self.exception
        self.resp = ClientResponse(self.method, URL(self.url))
        # we need to initialize headers manually
        self.resp.headers = CIMultiDict({hdrs.CONTENT_TYPE: self.content_type})
        if self.headers:
            self.resp.headers.update(self.headers)
        self.resp.status = self.status
        self.resp.content = StreamReader()
        self.resp.content.feed_data(self.body)
        self.resp.content.feed_eof()

        return self.resp
예제 #3
0
    def build_response(self, method: str, url: str, payload: str, *,
                       session: ClientSession, status: int) -> ClientResponse:
        response = session._response_class(
            method,
            URL(url),
            request_info=self.mock_module.Mock(),
            writer=self.mock_module.Mock(),
            continue100=None,
            timer=TimerNoop(),
            traces=[],
            loop=session.loop,
            session=session)
        response._headers = CIMultiDictProxy(
            CIMultiDict({'Content-Type': 'application/json'}))
        response.status = status
        if status >= 400:
            response.reason = payload

        response.content = StreamReader(ResponseHandler(session.loop))
        response.content.feed_data(str.encode(payload))
        response.content.feed_eof()
        return response
예제 #4
0
파일: utils.py 프로젝트: gholcomb/buildly
 def content(self):
     protocol = Mock(_reading_paused=False)
     stream = StreamReader(protocol)
     stream.feed_data(self.body)
     stream.feed_eof()
     return stream
예제 #5
0
 def stream_reader_factory():
     return StreamReader()
예제 #6
0
 def stream_reader_factory(
         loop: 'Optional[asyncio.AbstractEventLoop]' = None):
     protocol = ResponseHandler(loop=loop)
     return StreamReader(protocol)
예제 #7
0
    async def build_response(self,
                             session,
                             method,
                             url,
                             params=None,
                             data=None,
                             headers=None,
                             *args,
                             **kwargs):
        self.requests.append({
            'method': method,
            'url': url,
            'params': params,
            'data': data,
            'headers': headers
        })
        url = URL(url)
        url_parts = [p.split('?')[-1] for p in url.parts]

        if data is None and 'json' in kwargs:
            data = json.dumps(kwargs['json'])
        resp = ClientResponse(
            method,
            url,
            request_info=Mock(),
            writer=Mock(),
            continue100=None,
            timer=TimerNoop(),
            traces=[],
            loop=Mock(),
            session=Mock(),
        )
        func_name = '_'.join(url_parts[-2:])
        func = None
        if hasattr(self, func_name):
            func = getattr(self, func_name)
        else:
            func_name = url_parts[-1]
            if hasattr(self, func_name):
                func = getattr(self, func_name)

        if func is not None:
            status, data, ct = await func(params or url.query, data, headers)
            resp.status = status
        else:
            print(f'Method {func_name} not implemented')
            resp.status = 200
            if method.lower() == 'patch':
                resp.status = 204
            ct = 'application/json'
            data = '{}'

        resp._headers = CIMultiDict({hdrs.CONTENT_TYPE: ct})
        loop = asyncio.get_event_loop()
        protocol = Mock(_reading_paused=False)
        resp.content = StreamReader(protocol,
                                    loop=loop,
                                    limit=DEFAULT_STREAM_LIMIT)
        if isinstance(data, str):
            data = data.encode('utf8')
        resp.content.feed_data(data)
        resp.content.feed_eof()
        self.responses.append(resp)
        return resp
예제 #8
0
파일: compat.py 프로젝트: orf/aioresponses
 def stream_reader_factory():
     protocol = ResponseHandler()
     return StreamReader(protocol)
예제 #9
0
 def stream_reader_factory(loop=None):
     return StreamReader()
예제 #10
0
 def stream_reader():
     return StreamReader()