Ejemplo n.º 1
0
    def post_protobuf(self, url, protobuf_msg, data=None, **kwargs):
        """客户端POST请求protobuf版,会自动加上一些参数和头部

        :param url: URL
        :param protobuf_msg: protobuf message,一般是XXXReqIdl
        :param data: body其他参数
        :return: 同aiohttp的post
        :raise aiohttp.ClientResponseError: HTTP请求失败
        :raise aiohttp.ClientConnectionError: 连接失败
        """
        data = {key: value if isinstance(value, str) else str(value)
                for key, value in data.items()
                } if data is not None else {}
        self.__add_sign(data)

        with MultipartWriter('form-data') as mp:
            # MultipartWriter好像有BUG,append之后header就不能改了...
            for key, value in data.items():
                part = get_payload(str(value), headers={})
                part.set_content_disposition('form-data', name=key)
                mp.append_payload(part)
            part = get_payload(protobuf_msg.SerializeToString(), headers={})
            part.set_content_disposition('form-data', name='data', filename='file')
            mp.append_payload(part)

            return self._session.post(url, data=mp, headers={'x_bd_data_type': 'protobuf'},
                                      **kwargs)
Ejemplo n.º 2
0
def telegram_encoder(content, *args, **kwargs):
    try:
        return dumps(content, cls=TelegramJsonEncoder)
    except ContainsFileError:
        pass

    formatter = TelegramModelFormatterIter(content)

    kwargs['endpoint_desc']['stream_request'] = True

    mp = MultipartWriter('form-data')

    for field, value in formatter:
        content_dispositon = {'name': field}
        if isinstance(value, FileModel):
            part = get_payload(value.stream, headers=CIMultiDict())
            if value.name:
                content_dispositon['filename'] = value.name
            if value.mime_type:
                part.headers[CONTENT_TYPE] = value.mime_type
        else:
            part = get_payload(str(value), headers=CIMultiDict())

        part.set_content_disposition("form-data", **content_dispositon)
        mp.append_payload(part)

    try:
        kwargs['request_params']['headers'].update(mp.headers)
    except KeyError:
        kwargs['request_params']['headers'] = mp.headers

    return mp
Ejemplo n.º 3
0
 def test_append_part(self, writer) -> None:
     part = payload.get_payload(
         'test', headers={CONTENT_TYPE: 'text/plain'})
     writer.append(part, {CONTENT_TYPE: 'test/passed'})
     assert 1 == len(writer)
     part = writer._parts[0][0]
     assert part.headers[CONTENT_TYPE] == 'test/passed'
Ejemplo n.º 4
0
 def test_append_part(self, writer):
     part = payload.get_payload(
         'test', headers={CONTENT_TYPE: 'text/plain'})
     writer.append(part, {CONTENT_TYPE: 'test/passed'})
     assert 1 == len(writer)
     part = writer._parts[0][0]
     assert part.headers[CONTENT_TYPE] == 'test/passed'
Ejemplo n.º 5
0
def test_register_type(registry):
    class TestProvider:
        pass

    payload.register_payload(Payload, TestProvider)
    p = payload.get_payload(TestProvider())
    assert isinstance(p, Payload)
Ejemplo n.º 6
0
def test_register_type(registry) -> None:
    class TestProvider:
        pass

    payload.register_payload(Payload, TestProvider)
    p = payload.get_payload(TestProvider())
    assert isinstance(p, Payload)
Ejemplo n.º 7
0
 def test_append_part(self, writer: Any) -> None:
     part = payload.get_payload("test",
                                headers={CONTENT_TYPE: "text/plain"})
     writer.append(part, {CONTENT_TYPE: "test/passed"})
     assert 1 == len(writer)
     part = writer._parts[0][0]
     assert part.headers[CONTENT_TYPE] == "test/passed"
def function1023(function332):
    class Class57:
        pass

    payload.register_payload(Class409, Class57)
    var674 = payload.get_payload(Class57())
    assert isinstance(var674, Class409)
Ejemplo n.º 9
0
async def test_stream_reader_long_lines(loop) -> None:
    DATA = b'0' * 1024**3

    stream = streams.StreamReader(mock.Mock(), loop=loop)
    stream.feed_data(DATA)
    stream.feed_eof()
    body = payload.get_payload(stream)

    writer = mock.Mock()
    writer.write.return_value = loop.create_future()
    writer.write.return_value.set_result(None)
    await body.write(writer)
    writer.write.assert_called_once_with(mock.ANY)
    (chunk, ), _ = writer.write.call_args
    assert len(chunk) == len(DATA)
Ejemplo n.º 10
0
async def test_stream_reader_long_lines(loop):
    DATA = b'0' * 1024 ** 3

    stream = streams.StreamReader(mock.Mock(), loop=loop)
    stream.feed_data(DATA)
    stream.feed_eof()
    body = payload.get_payload(stream)

    writer = mock.Mock()
    writer.write.return_value = loop.create_future()
    writer.write.return_value.set_result(None)
    await body.write(writer)
    writer.write.assert_called_once_with(mock.ANY)
    (chunk,), _ = writer.write.call_args
    assert len(chunk) == len(DATA)