pyinfra/test/exploration_tests/partial_response_test.py
Matthias Bisping 67c4bac4b7 sync
2022-04-27 17:45:48 +02:00

48 lines
1.4 KiB
Python

import logging
from itertools import chain
from operator import methodcaller, itemgetter
from typing import Iterable
import pytest
import requests
from funcy import curry, rcompose, compose, lmap, rpartial
from pyinfra.rest import pack
from test.utils.server import string_to_bytes
logger = logging.getLogger("PIL.PngImagePlugin")
logger.setLevel(logging.INFO)
def lift(fn):
return curry(map)(fn)
def post_partial(url, input_data: Iterable[bytes], metadata):
def post(data):
return requests.post(url, data=data)
pack_data_and_metadata_for_rest_transfer = lift(rpartial(pack, metadata))
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", "image"])
def test_sending_partial_request(url, data_items, metadata, operation, server_process):
expected = lmap(operation, data_items)
output = list(post_partial(f"{url}/process", data_items, metadata))
assert output == expected