improved 1 -> n test and explanation

This commit is contained in:
Matthias Bisping 2022-05-03 15:43:30 +02:00
parent ae39ccc8e2
commit 29fb0dda30
5 changed files with 16 additions and 13 deletions

View File

@ -89,7 +89,7 @@ def post_partial(url, data: Iterable[bytes], metadata: dict):
dispatch_http_method_left_and_forward_data_right,
send_data_with_method_to_analyzer,
extract_payload_from_responses,
flatten, # analysis may be 1 -> 1 or 1 -> n, so flatten
flatten, # each analysis call returns an iterable. Can be empty, singleton or multi item. Hence, flatten.
)
return input_data_to_result_data(data)

View File

@ -1,10 +1,11 @@
import pytest
from funcy import lmap
from pyinfra.rest import post_partial
from pyinfra.rest import post_partial, unpack
@pytest.mark.parametrize("batched", [True, False])
@pytest.mark.parametrize("item_type", ["pdf", "string", "image"])
def test_sending_partial_request(url, input_data_items, metadata, operation, target_data_items, server_process):
output = list(post_partial(f"{url}/process", input_data_items, metadata))
assert output == target_data_items
output = lmap(unpack, post_partial(f"{url}/process", input_data_items, metadata))
assert output == lmap(unpack, target_data_items)

View File

@ -37,7 +37,7 @@ def target_data_items(input_data_items, item_type, operation, metadata):
return expected
@pytest.fixture(params=[0, 1, 2, 5])
@pytest.fixture(params=[0, 1, 2, 5, 10])
def n_items(request):
return request.param
@ -50,10 +50,15 @@ def input_batch(n_items):
return np.random.random_sample(size=(n_items, 3, 30, 30))
@pytest.fixture(params=[1, 2, 5, 100])
def buffer_size(request):
return request.param
def images(n_items):
return lmap(compose(image_to_bytes, array_to_image), input_batch(n_items))
@pytest.fixture
def metadata():
return {"idx": [1, 100, 101], "path": "asd/asd"}
return {"dummy": True}

View File

@ -8,5 +8,6 @@ from test.utils.pdf import pdf_stream
def pdf():
pdf = fpdf.FPDF(unit="pt")
pdf.add_page()
pdf.add_page()
return pdf_stream(pdf)

View File

@ -65,8 +65,9 @@ def operation(item_type, batched):
return image_to_bytes(im.rotate(90)), metadata
def stream_pages(pdf: bytes, metadata):
for page in fitz.open(stream=pdf):
yield page.get_pixmap().tobytes("png"), metadata
for i, page in enumerate(fitz.open(stream=pdf)):
# yield page.get_pixmap().tobytes("png"), metadata
yield f"page_{i}".encode(), metadata
try:
return {"string": upper, "image": rotate, "pdf": stream_pages}[item_type]
@ -85,11 +86,6 @@ def batched(request):
return request.param
@pytest.fixture(params=[1, 3, 7, 100])
def buffer_size(request):
return request.param
@pytest.fixture
def host_and_port(host, port):
return {"host": host, "port": port}