Beispiel #1
0
    def __await__(self):
        response = yield from self._get_response().__await__()

        data = yield from response.read().__await__()

        response.release()

        if not data:
            return

        buffer = io.BytesIO(data)

        messages = protocol.unwrap_message_stream(buffer)

        trailers, _, message = next(messages)

        if trailers:
            self._trailers = protocol.unpack_trailers(message)
            return
        else:
            result = self._deserializer(message)

        try:
            trailers, _, message = next(messages)
        except StopIteration:
            pass
        else:
            if trailers:
                self._trailers = protocol.unpack_trailers(message)
            else:
                raise ValueError("UnaryUnary should only return a single message")

        protocol.raise_for_status(response.headers)

        return result
Beispiel #2
0
    async def __aiter__(self):
        response = await self._get_response()

        async for trailers, _, message in protocol.unwrap_message_stream_async(
            response.content
        ):
            if trailers:
                self._trailers = protocol.unpack_trailers(message)
                break
            else:
                yield self._deserializer(message)

        response.release()

        protocol.raise_for_status(response.headers, self._trailers)
Beispiel #3
0
    async def _get_response(self):
        if self._response is None:
            timeout = aiohttp.ClientTimeout(total=self._timeout)

            self._response = await self._session.post(
                self._url,
                data=protocol.wrap_message(
                    False, False, self._serializer(self._request)
                ),
                headers=dict(self._metadata),
                timeout=timeout,
            )

            protocol.raise_for_status(self._response.headers)

        return self._response
Beispiel #4
0
    async def read(self):
        response = await self._get_response()

        async for trailers, _, message in protocol.unwrap_message_stream_async(
            response.content
        ):
            if trailers:
                self._trailers = protocol.unpack_trailers(message)
                break
            else:
                return self._deserializer(message)

        response.release()

        protocol.raise_for_status(response.headers, self._trailers)

        return grpc.experimental.aio.EOF
Beispiel #5
0
    def __call__(self):
        self._response = self._session.request(
            "POST",
            self._url,
            body=protocol.wrap_message(False, False,
                                       self._serializer(self._request)),
            headers=dict(self._metadata),
            timeout=self._timeout,
        )

        buffer = io.BytesIO(self._response.data)

        messages = protocol.unwrap_message_stream(buffer)

        try:
            trailers, _, message = next(messages)
        except StopIteration:
            protocol.raise_for_status(self._response.headers)
            return

        if trailers:
            self._trailers = protocol.unpack_trailers(message)
        else:
            result = self._deserializer(message)

        try:
            trailers, _, message = next(messages)
        except StopIteration:
            pass
        else:
            if trailers:
                self._trailers = protocol.unpack_trailers(message)
            else:
                raise ValueError(
                    "UnaryUnary should only return a single message")

        protocol.raise_for_status(self._response.headers, self._trailers)

        return result
Beispiel #6
0
    def __iter__(self):
        self._response = self._session.request(
            "POST",
            self._url,
            body=protocol.wrap_message(False, False,
                                       self._serializer(self._request)),
            headers=dict(self._metadata),
            timeout=self._timeout,
            preload_content=False,
        )
        self._response.auto_close = False

        stream = io.BufferedReader(self._response, buffer_size=16384)

        for trailers, _, message in protocol.unwrap_message_stream(stream):
            if trailers:
                self._trailers = protocol.unpack_trailers(message)
                break
            else:
                yield self._deserializer(message)

        self._response.release_conn()

        protocol.raise_for_status(self._response.headers, self._trailers)