pyinfra/test/exploration_tests/partial_response_test.py
2022-04-27 13:41:48 +02:00

51 lines
1.5 KiB
Python

import json
from itertools import chain
from operator import methodcaller, itemgetter
from typing import Iterable
import pytest
import requests
from funcy import curry, rcompose, compose
from test.utils.server import bytes_to_string, string_to_bytes
def lift(fn):
return curry(map)(fn)
def send_partial_request(url, input_data: Iterable[bytes], metadata):
def pack(data: bytes):
package = {"data": bytes_to_string(data), "metadata": metadata}
package = json.dumps(package).encode()
return package
def post(data):
return requests.post(url, data=data)
pack_data_and_metadata_for_rest_transfer = lift(pack)
send_packages_to_analyzer_and_receive_responses = lift(post)
extract_data_from_responses = lift(compose(itemgetter("data"), methodcaller("json")))
flatten_buffered_payloads = chain.from_iterable
interpret_payloads = lift(string_to_bytes)
input_data_to_result_data = rcompose(
pack_data_and_metadata_for_rest_transfer,
send_packages_to_analyzer_and_receive_responses,
extract_data_from_responses,
flatten_buffered_payloads,
interpret_payloads,
)
return input_data_to_result_data((*input_data, b""))
@pytest.mark.parametrize("item_type", ["string"])
def test_sending_partial_request(url, data_items, metadata):
assert list(send_partial_request(f"{url}/process", data_items, metadata)) == [b"CONTENT"] * 7
@pytest.fixture
def metadata():
return {"idx": [1, 100, 101], "path": "asd/asd"}