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)
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
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'
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'
def test_register_type(registry): class TestProvider: pass payload.register_payload(Payload, TestProvider) p = payload.get_payload(TestProvider()) assert isinstance(p, Payload)
def test_register_type(registry) -> None: class TestProvider: pass payload.register_payload(Payload, TestProvider) p = payload.get_payload(TestProvider()) assert isinstance(p, Payload)
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)
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)
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)