From 861730e385b82c4f9f97984f8c0529657d0e97bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ianar=C3=A9=20S=C3=A9vi?= Date: Mon, 21 Sep 2026 18:07:25 +0200 Subject: [PATCH 1/3] :sparkles: add error response rst output --- CHANGELOG.md | 1 - mindee/v2/mindee_http/mindee_api_v2.py | 2 +- mindee/v2/parsing/error/error_response.py | 32 ++++++++++-- tests/input/test_apply_page_options.py | 38 +++++++------- tests/input/test_compression.py | 50 +++++++++---------- tests/input/test_fix_pdf.py | 8 +-- tests/input/test_inputs.py | 16 +++--- tests/utils.py | 20 ++++---- tests/v1/api/test_async_response.py | 8 ++- tests/v1/api/test_feedback_response.py | 4 +- tests/v1/api/test_response.py | 15 +++--- tests/v1/extraction/test_image_extractor.py | 6 +-- .../test_invoice_splitter_auto_extraction.py | 11 ++-- .../test_multi_receipts_extractor.py | 15 ++---- tests/v1/extraction/test_pdf_extractor.py | 12 ++--- tests/v1/extras/test_extras_integration.py | 6 +-- tests/v1/extras/test_full_text_ocr.py | 6 +-- tests/v1/mindee_http/test_error.py | 14 +++--- tests/v1/parsing/common/test_ocr.py | 6 +-- .../barcode_reader/test_barcode_reader_v1.py | 4 +- .../test_barcode_reader_v1_regression.py | 6 +-- tests/v1/product/cropper/test_cropper_v1.py | 4 +- .../cropper/test_cropper_v1_regression.py | 6 +-- tests/v1/product/custom/test_custom_v1.py | 20 +++----- .../custom/test_custom_v1_line_items.py | 6 +-- tests/v1/product/custom/test_custom_v1_v2.py | 20 +++----- .../test_financial_document_v1.py | 4 +- .../test_financial_document_v1_regression.py | 9 ++-- .../test_bank_account_details_v1.py | 4 +- ...test_bank_account_details_v1_regression.py | 9 ++-- .../test_bank_account_details_v2.py | 4 +- ...test_bank_account_details_v2_regression.py | 9 ++-- .../fr/carte_grise/test_carte_grise_v1.py | 4 +- .../test_carte_grise_v1_regression.py | 6 +-- .../v1/product/fr/id_card/test_id_card_v1.py | 4 +- .../fr/id_card/test_id_card_v1_regression.py | 6 +-- .../v1/product/fr/id_card/test_id_card_v2.py | 4 +- .../fr/id_card/test_id_card_v2_regression.py | 6 +-- .../v1/product/generated/test_generated_v1.py | 31 ++++-------- .../test_international_id_v2.py | 4 +- tests/v1/product/invoice/test_invoice_v4.py | 4 +- .../invoice/test_invoice_v4_regression.py | 6 +-- .../test_invoice_splitter_v1.py | 4 +- .../test_invoice_splitter_v1_regression.py | 6 +-- .../test_multi_receipts_detector_v1.py | 4 +- ...t_multi_receipts_detector_v1_regression.py | 6 +-- tests/v1/product/passport/test_passport_v1.py | 4 +- .../passport/test_passport_v1_regression.py | 6 +-- tests/v1/product/receipt/test_receipt_v5.py | 4 +- .../receipt/test_receipt_v5_regression.py | 6 +-- .../us/bank_check/test_bank_check_v1.py | 4 +- .../test_bank_check_v1_regression.py | 6 +-- tests/v1/test_cli.py | 14 +++--- tests/v1/test_client.py | 42 +++++++--------- tests/v1/workflows/test_workflow.py | 4 +- .../v1/workflows/test_workflow_integration.py | 4 +- .../v2/file_operations/test_crop_operation.py | 10 ++-- .../test_crop_operation_integration.py | 10 ++-- .../file_operations/test_split_operation.py | 12 ++--- .../test_split_operation_integration.py | 8 +-- tests/v2/input/test_inference_parameters.py | 4 +- tests/v2/input/test_local_response.py | 4 +- tests/v2/parsing/test_error_response.py | 21 ++++++++ .../parsing/test_failed_inference_response.py | 4 +- tests/v2/parsing/test_job_response.py | 4 +- .../test_classification_integration.py | 6 +-- .../v2/product/crop/test_crop_integration.py | 4 +- .../extraction/test_extraction_response.py | 4 +- tests/v2/product/ocr/test_ocr_integration.py | 4 +- .../product/split/test_split_integration.py | 4 +- tests/v2/product/utils.py | 6 +-- tests/v2/search/test_model_search.py | 4 +- tests/v2/search/test_rag_document_search.py | 4 +- tests/v2/test_cli.py | 7 +-- tests/v2/test_client.py | 37 ++++++++------ tests/v2/test_client_integration.py | 25 ++++------ 76 files changed, 373 insertions(+), 373 deletions(-) create mode 100644 tests/v2/parsing/test_error_response.py diff --git a/CHANGELOG.md b/CHANGELOG.md index f09cd573..e43a5548 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,6 @@ * :sparkles: add simple fields typed accessors * :sparkles: allow passing a webhook to the CLI * :recycle: update internals and bump dependencies - ### Fixes * :bug: :boom: rework extraction methods * :bug: :boom: harmonize Crop and Split diff --git a/mindee/v2/mindee_http/mindee_api_v2.py b/mindee/v2/mindee_http/mindee_api_v2.py index 3378f65e..0bce8226 100644 --- a/mindee/v2/mindee_http/mindee_api_v2.py +++ b/mindee/v2/mindee_http/mindee_api_v2.py @@ -228,7 +228,7 @@ def req_get_search_models( self, name: str | None, model_type: str | None ) -> SearchResponse: """ - Deprecated. Use `search` instead. + Deprecated. Use `req_search` instead. """ get_caller: Callable if self.http_client is None or self.http_client.is_closed: diff --git a/mindee/v2/parsing/error/error_response.py b/mindee/v2/parsing/error/error_response.py index 351f1339..26b16476 100644 --- a/mindee/v2/parsing/error/error_response.py +++ b/mindee/v2/parsing/error/error_response.py @@ -1,8 +1,9 @@ +from mindee.parsing.common import CommonResponse from mindee.parsing.common.string_dict import StringDict from mindee.v2.parsing.error.error_item import ErrorItem -class ErrorResponse: +class ErrorResponse(CommonResponse): """Error response detailing a problem. The format adheres to RFC 9457.""" status: int @@ -17,6 +18,7 @@ class ErrorResponse: """A list of explicit error details.""" def __init__(self, raw_response: StringDict): + super().__init__(raw_response) self.status = raw_response["status"] self.detail = raw_response["detail"] self.title = raw_response["title"] @@ -26,5 +28,29 @@ def __init__(self, raw_response: StringDict): except KeyError: self.errors = [] - def __str__(self): - return f"HTTP {self.status} - {self.title} :: {self.code} - {self.detail}" + def __str__(self) -> str: + """To make the error prettier to display.""" + + result = [ + "Error Details", + "=============", + f":HTTP Status: {self.status}", + f":Title: {self.title}", + f":Code: {self.code}", + f":Detail: {self.detail}", + ] + + if self.errors: + result.append("") + result.append("Error Items") + result.append("-----------") + + for i, error in enumerate(self.errors): + result.append(f"**Error {i + 1}:**") + result.append(f" :Pointer: {getattr(error, 'pointer', '')}") + result.append(f" :Detail: {getattr(error, 'detail', '')}") + + if i < len(self.errors) - 1: + result.append("") + + return "\n".join(result) + "\n" diff --git a/tests/input/test_apply_page_options.py b/tests/input/test_apply_page_options.py index 8053b1c7..54edb43a 100644 --- a/tests/input/test_apply_page_options.py +++ b/tests/input/test_apply_page_options.py @@ -11,7 +11,7 @@ PathInput, ) from mindee.input.page_options import KEEP_ONLY, REMOVE, PageOptions -from tests.utils import FILE_TYPES_DIR, V1_PRODUCT_DATA_DIR +from tests.utils import FILE_TYPES_PATH, V1_PRODUCT_PATH pdfium = pytest.importorskip("pypdfium2") @@ -22,7 +22,9 @@ def _assert_page_options(input_source: LocalInputSource, numb_pages: int): # I.e., each page is read and rendered as a rasterized image. # These images are then compared as raw byte sequences. cut_pdf = pdfium.PdfDocument(input_source.file_object) - pdf = pdfium.PdfDocument(FILE_TYPES_DIR / "pdf" / f"multipage_cut-{numb_pages}.pdf") + pdf = pdfium.PdfDocument( + FILE_TYPES_PATH / "pdf" / f"multipage_cut-{numb_pages}.pdf" + ) for idx in range(len(pdf)): pdf_page = pdf.get_page(idx) pdf_page_render = pdfium.PdfPage.render(pdf_page) @@ -35,14 +37,14 @@ def _assert_page_options(input_source: LocalInputSource, numb_pages: int): def test_pdf_reconstruct_ok(): - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "multipage.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "multipage.pdf") input_source.process_pdf(behavior=KEEP_ONLY, on_min_pages=2, page_indexes=range(5)) assert isinstance(input_source.file_object, io.BytesIO) @pytest.mark.parametrize("numb_pages", [1, 2, 3]) def test_process_pdf_cut_n_pages(numb_pages: int): - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "multipage.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "multipage.pdf") assert input_source.page_count == 12 input_source.process_pdf( behavior=KEEP_ONLY, on_min_pages=2, page_indexes=[0, -2, -1][:numb_pages] @@ -53,7 +55,7 @@ def test_process_pdf_cut_n_pages(numb_pages: int): @pytest.mark.parametrize("numb_pages", [1, 2, 3]) def test_apply_pages_pdf_cut_n_pages(numb_pages: int): - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "multipage.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "multipage.pdf") assert input_source.page_count == 12 input_source.apply_page_options( PageOptions(on_min_pages=2, page_indexes=[0, -2, -1][:numb_pages]) @@ -63,7 +65,7 @@ def test_apply_pages_pdf_cut_n_pages(numb_pages: int): def test_pdf_keep_5_first_pages(): - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "multipage.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "multipage.pdf") assert input_source.page_count == 12 input_source.process_pdf( behavior=KEEP_ONLY, on_min_pages=2, page_indexes=[0, 1, 2, 3, 4] @@ -72,7 +74,7 @@ def test_pdf_keep_5_first_pages(): def test_pdf_keep_invalid_pages(): - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "multipage.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "multipage.pdf") assert input_source.page_count == 12 input_source.process_pdf( behavior=KEEP_ONLY, on_min_pages=2, page_indexes=[0, 1, 17] @@ -81,7 +83,7 @@ def test_pdf_keep_invalid_pages(): def test_pdf_remove_5_last_pages(): - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "multipage.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "multipage.pdf") assert input_source.is_pdf() is True input_source.process_pdf( behavior=REMOVE, on_min_pages=2, page_indexes=[-5, -4, -3, -2, -1] @@ -90,7 +92,7 @@ def test_pdf_remove_5_last_pages(): def test_pdf_remove_5_first_pages(): - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "multipage.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "multipage.pdf") assert input_source.is_pdf() is True input_source.process_pdf( behavior=REMOVE, on_min_pages=2, page_indexes=list(range(5)) @@ -99,14 +101,14 @@ def test_pdf_remove_5_first_pages(): def test_pdf_remove_invalid_pages(): - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "multipage.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "multipage.pdf") assert input_source.is_pdf() is True input_source.process_pdf(behavior=REMOVE, on_min_pages=2, page_indexes=[16]) assert input_source.page_count == 12 def test_pdf_keep_no_pages(): - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "multipage.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "multipage.pdf") assert input_source.is_pdf() is True # empty page indexes with pytest.raises(RuntimeError): @@ -119,7 +121,7 @@ def test_pdf_keep_no_pages(): def test_pdf_remove_all_pages(): - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "multipage.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "multipage.pdf") assert input_source.is_pdf() is True with pytest.raises(RuntimeError): input_source.process_pdf( @@ -128,7 +130,7 @@ def test_pdf_remove_all_pages(): def test_pdf_input_from_file(): - with open(FILE_TYPES_DIR / "pdf" / "multipage.pdf", "rb") as fp: + with open(FILE_TYPES_PATH / "pdf" / "multipage.pdf", "rb") as fp: input_source = FileInput(fp) assert input_source.is_pdf() is True input_source.process_pdf(behavior=KEEP_ONLY, on_min_pages=2, page_indexes=[0]) @@ -136,7 +138,7 @@ def test_pdf_input_from_file(): def test_pdf_input_from_base64(): - with open(V1_PRODUCT_DATA_DIR / "invoices" / "invoice_10p.txt") as fp: + with open(V1_PRODUCT_PATH / "invoices" / "invoice_10p.txt") as fp: input_source = Base64Input(fp.read(), filename="invoice_10p.pdf") assert input_source.is_pdf() is True input_source.process_pdf(behavior=KEEP_ONLY, on_min_pages=2, page_indexes=[0]) @@ -144,7 +146,7 @@ def test_pdf_input_from_base64(): def test_pdf_input_from_bytes(): - with open(V1_PRODUCT_DATA_DIR / "invoices" / "invoice_10p.pdf", "rb") as fp: + with open(V1_PRODUCT_PATH / "invoices" / "invoice_10p.pdf", "rb") as fp: input_source = BytesInput(fp.read(), filename="invoice_10p.pdf") assert input_source.is_pdf() is True input_source.process_pdf(behavior=KEEP_ONLY, on_min_pages=2, page_indexes=[0]) @@ -152,13 +154,13 @@ def test_pdf_input_from_bytes(): def test_pdf_blank_check(): - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "blank.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "blank.pdf") with pytest.raises(MindeeError): input_source.process_pdf(behavior=KEEP_ONLY, on_min_pages=2, page_indexes=[0]) - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "blank_1.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "blank_1.pdf") with pytest.raises(MindeeError): input_source.process_pdf(behavior=KEEP_ONLY, on_min_pages=2, page_indexes=[0]) - input_not_blank = PathInput(FILE_TYPES_DIR / "pdf" / "not_blank_image_only.pdf") + input_not_blank = PathInput(FILE_TYPES_PATH / "pdf" / "not_blank_image_only.pdf") assert input_not_blank.page_count == 1 diff --git a/tests/input/test_compression.py b/tests/input/test_compression.py index 5f9a941e..6eb690a1 100644 --- a/tests/input/test_compression.py +++ b/tests/input/test_compression.py @@ -11,28 +11,28 @@ from mindee.pdf.pdf_compressor import compress_pdf from mindee.pdf.pdf_utils import extract_text_from_pdf from tests.utils import ( - FILE_TYPES_DIR, - OUTPUT_DIR, - V1_DATA_DIR, - V1_PRODUCT_DATA_DIR, + FILE_TYPES_PATH, + OUTPUT_PATH, + V1_PRODUCT_PATH, + V1_RESOURCE_PATH, cleanup_output_files, ) Image = pytest.importorskip("PIL.Image") -RECEIPT_PATH = FILE_TYPES_DIR / "receipt.jpg" +RECEIPT_PATH = FILE_TYPES_PATH / "receipt.jpg" def test_image_quality_compress_from_input_source(): receipt_input = PathInput(RECEIPT_PATH) receipt_input.compress(40) - with open(OUTPUT_DIR / "compress_indirect.jpg", "wb") as f: + with open(OUTPUT_PATH / "compress_indirect.jpg", "wb") as f: f.write(receipt_input.file_object.read()) receipt_input.file_object.seek(0) initial_file_stats = os.stat(RECEIPT_PATH) - rendered_file_stats = os.stat(OUTPUT_DIR / "compress_indirect.jpg") + rendered_file_stats = os.stat(OUTPUT_PATH / "compress_indirect.jpg") assert rendered_file_stats.st_size < initial_file_stats.st_size @@ -54,11 +54,11 @@ def test_image_quality_compresses_from_compressor(): "compress1.jpg", ] for i, compressed in enumerate(compresses): - with open(OUTPUT_DIR / file_names[i], "wb") as f: + with open(OUTPUT_PATH / file_names[i], "wb") as f: f.write(compressed) initial_file_stats = os.stat(RECEIPT_PATH) - rendered_file_stats = [os.stat(OUTPUT_DIR / file_name) for file_name in file_names] + rendered_file_stats = [os.stat(OUTPUT_PATH / file_name) for file_name in file_names] assert initial_file_stats.st_size < rendered_file_stats[0].st_size assert initial_file_stats.st_size < rendered_file_stats[1].st_size @@ -71,12 +71,12 @@ def test_image_resize_from_input_source(): image_resize_input = PathInput(RECEIPT_PATH) image_resize_input.compress(75, 250, 1000) - with open(OUTPUT_DIR / "resize_indirect.jpg", "wb") as f: + with open(OUTPUT_PATH / "resize_indirect.jpg", "wb") as f: f.write(image_resize_input.file_object.read()) image_resize_input.file_object.seek(0) initial_file_stats = os.stat(RECEIPT_PATH) - rendered_file_stats = os.stat(OUTPUT_DIR / "resize_indirect.jpg") + rendered_file_stats = os.stat(OUTPUT_PATH / "resize_indirect.jpg") assert rendered_file_stats.st_size < initial_file_stats.st_size image = Image.open(image_resize_input.file_object) @@ -101,11 +101,11 @@ def test_image_resize_from_compressor(): "resizenullx250.jpg", ] for i, resized in enumerate(resizes): - with open(OUTPUT_DIR / file_names[i], "wb") as f: + with open(OUTPUT_PATH / file_names[i], "wb") as f: f.write(resized) initial_file_stats = os.stat(RECEIPT_PATH) - rendered_file_stats = [os.stat(OUTPUT_DIR / file_name) for file_name in file_names] + rendered_file_stats = [os.stat(OUTPUT_PATH / file_name) for file_name in file_names] assert initial_file_stats.st_size > rendered_file_stats[0].st_size assert rendered_file_stats[0].st_size > rendered_file_stats[1].st_size @@ -114,8 +114,8 @@ def test_image_resize_from_compressor(): def test_pdf_input_has_text(): - has_source_text_path = FILE_TYPES_DIR / "pdf" / "multipage.pdf" - has_no_source_text_path = FILE_TYPES_DIR / "pdf" / "blank_1.pdf" + has_source_text_path = FILE_TYPES_PATH / "pdf" / "multipage.pdf" + has_no_source_text_path = FILE_TYPES_PATH / "pdf" / "blank_1.pdf" has_no_source_text_since_its_image_path = RECEIPT_PATH has_source_text_input = PathInput(has_source_text_path) @@ -131,24 +131,24 @@ def test_pdf_input_has_text(): def test_pdf_compress_from_input_source(): pdf_resize_input = PathInput( - V1_DATA_DIR / "products" / "invoice_splitter" / "default_sample.pdf" + V1_RESOURCE_PATH / "products" / "invoice_splitter" / "default_sample.pdf" ) compressed_pdf = compress_pdf(pdf_resize_input.file_object, 75, True) - with open(OUTPUT_DIR / "resize_indirect.pdf", "wb") as f: + with open(OUTPUT_PATH / "resize_indirect.pdf", "wb") as f: f.write(compressed_pdf) initial_file_stats = os.stat( - V1_DATA_DIR / "products/invoice_splitter/default_sample.pdf" + V1_RESOURCE_PATH / "products/invoice_splitter/default_sample.pdf" ) - rendered_file_stats = os.stat(OUTPUT_DIR / "resize_indirect.pdf") + rendered_file_stats = os.stat(OUTPUT_PATH / "resize_indirect.pdf") assert rendered_file_stats.st_size < initial_file_stats.st_size def test_pdf_compress_from_compressor(): pdf_resize_input = PathInput( - V1_DATA_DIR / "products" / "invoice_splitter" / "default_sample.pdf" + V1_RESOURCE_PATH / "products" / "invoice_splitter" / "default_sample.pdf" ) resizes = [] qualities = [85, 75, 50, 10] @@ -163,13 +163,13 @@ def test_pdf_compress_from_compressor(): "compress10.pdf", ] for [i, resized] in enumerate(resizes): - with open(OUTPUT_DIR / file_names[i], "wb") as f: + with open(OUTPUT_PATH / file_names[i], "wb") as f: f.write(resized) initial_file_stats = os.stat( - V1_PRODUCT_DATA_DIR / "invoice_splitter" / "default_sample.pdf" + V1_PRODUCT_PATH / "invoice_splitter" / "default_sample.pdf" ) - rendered_file_stats = [os.stat(OUTPUT_DIR / file_name) for file_name in file_names] + rendered_file_stats = [os.stat(OUTPUT_PATH / file_name) for file_name in file_names] assert initial_file_stats.st_size > rendered_file_stats[0].st_size assert rendered_file_stats[0].st_size > rendered_file_stats[1].st_size @@ -178,7 +178,7 @@ def test_pdf_compress_from_compressor(): def test_pdf_compress_with_text_keeps_text(): - initial_with_text = PathInput(FILE_TYPES_DIR / "pdf" / "multipage.pdf") + initial_with_text = PathInput(FILE_TYPES_PATH / "pdf" / "multipage.pdf") compressed_with_text = compress_pdf(initial_with_text.file_object, 100, True, False) @@ -200,7 +200,7 @@ def test_pdf_compress_with_text_keeps_text(): def test_pdf_compress_with_text_does_not_compress(): - initial_with_text = PathInput(FILE_TYPES_DIR / "pdf" / "multipage.pdf") + initial_with_text = PathInput(FILE_TYPES_PATH / "pdf" / "multipage.pdf") compressed_with_text = compress_pdf(initial_with_text.file_object, 50) diff --git a/tests/input/test_fix_pdf.py b/tests/input/test_fix_pdf.py index ba258872..13f6e70f 100644 --- a/tests/input/test_fix_pdf.py +++ b/tests/input/test_fix_pdf.py @@ -2,23 +2,23 @@ from mindee import PathInput from mindee.error import MimeTypeError -from tests.utils import FILE_TYPES_DIR +from tests.utils import FILE_TYPES_PATH @pytest.mark.pypdfium2 def test_broken_unfixable_pdf(): - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "broken_unfixable.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "broken_unfixable.pdf") with pytest.raises(MimeTypeError): input_source.fix_pdf() @pytest.mark.pypdfium2 def test_broken_fixable_pdf(): - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "broken_fixable.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "broken_fixable.pdf") input_source.fix_pdf() assert input_source.page_count == 1 def test_broken_fixable_invoice_pdf(): - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "broken_invoice.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "broken_invoice.pdf") input_source.fix_pdf() diff --git a/tests/input/test_inputs.py b/tests/input/test_inputs.py index e4d97c72..72aa8660 100644 --- a/tests/input/test_inputs.py +++ b/tests/input/test_inputs.py @@ -12,11 +12,11 @@ PathInput, URLInputSource, ) -from tests.utils import FILE_TYPES_DIR +from tests.utils import FILE_TYPES_PATH def test_pdf_read_contents(): - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "multipage.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "multipage.pdf") contents = input_source.read_contents(close_file=False) assert contents[0] == "multipage.pdf" assert isinstance(contents[1], bytes) @@ -36,7 +36,7 @@ def test_pdf_read_contents(): ], ) def test_pdf_input_from_path(filename, page_count): - input_source = PathInput(FILE_TYPES_DIR / "pdf" / filename) + input_source = PathInput(FILE_TYPES_PATH / "pdf" / filename) assert input_source.file_mimetype == "application/pdf" assert input_source.is_pdf() is True assert input_source.page_count == page_count @@ -70,14 +70,14 @@ def _assert_image(input_source: LocalInputSource, mimetype: str) -> None: @pytest.mark.pypdfium2 @pytest.mark.parametrize(("filename", "mimetype"), TEST_IMAGES) def test_image_input_from_path(filename, mimetype): - input_source = PathInput(FILE_TYPES_DIR / filename) + input_source = PathInput(FILE_TYPES_PATH / filename) _assert_image(input_source, mimetype) @pytest.mark.pypdfium2 @pytest.mark.parametrize(("filename", "mimetype"), TEST_IMAGES) def test_image_input_from_file(filename, mimetype): - with open(FILE_TYPES_DIR / filename, "rb") as fp: + with open(FILE_TYPES_PATH / filename, "rb") as fp: input_source = FileInput(fp) _assert_image(input_source, mimetype) @@ -85,14 +85,14 @@ def test_image_input_from_file(filename, mimetype): @pytest.mark.pypdfium2 @pytest.mark.parametrize(("filename", "mimetype"), TEST_IMAGES) def test_image_input_from_bytes(filename, mimetype): - with open(FILE_TYPES_DIR / filename, "rb") as file_bytes: + with open(FILE_TYPES_PATH / filename, "rb") as file_bytes: input_source = BytesInput(file_bytes.read(), filename=filename) _assert_image(input_source, mimetype) @pytest.mark.pypdfium2 def test_image_input_from_base64(): - with open(FILE_TYPES_DIR / "receipt.txt") as fp: + with open(FILE_TYPES_PATH / "receipt.txt") as fp: input_source = Base64Input(fp.read(), filename="receipt.jpg") _assert_image(input_source, mimetype="image/jpeg") @@ -100,4 +100,4 @@ def test_image_input_from_base64(): @pytest.mark.pypdfium2 def test_txt_input_from_path(): with pytest.raises(MimeTypeError): - PathInput(FILE_TYPES_DIR / "receipt.txt") + PathInput(FILE_TYPES_PATH / "receipt.txt") diff --git a/tests/utils.py b/tests/utils.py index 31226686..360cc6f8 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -8,17 +8,17 @@ REQUEST_TIMEOUT_ENV_NAME, ) -ROOT_DATA_DIR = Path(__file__).parent / "data" -FILE_TYPES_DIR = ROOT_DATA_DIR / "file_types" -OUTPUT_DIR = ROOT_DATA_DIR / "output" +RESOURCE_PATH = Path(__file__).parent / "data" +FILE_TYPES_PATH = RESOURCE_PATH / "file_types" +OUTPUT_PATH = RESOURCE_PATH / "output" -V1_DATA_DIR = ROOT_DATA_DIR / "v1" -V1_ERROR_DATA_DIR = V1_DATA_DIR / "errors" -V1_PRODUCT_DATA_DIR = V1_DATA_DIR / "products" -V1_EXTRAS_DIR = V1_DATA_DIR / "extras" +V1_RESOURCE_PATH = RESOURCE_PATH / "v1" +V1_ERROR_PATH = V1_RESOURCE_PATH / "errors" +V1_PRODUCT_PATH = V1_RESOURCE_PATH / "products" +V1_EXTRAS_PATH = V1_RESOURCE_PATH / "extras" -V2_DATA_DIR = ROOT_DATA_DIR / "v2" -V2_PRODUCT_DATA_DIR = V2_DATA_DIR / "products" +V2_RESOURCE_PATH = RESOURCE_PATH / "v2" +V2_PRODUCT_PATH = V2_RESOURCE_PATH / "products" def clear_envvars(monkeypatch) -> None: @@ -50,6 +50,6 @@ def levenshtein_ratio(ref_str: str, target_str: str) -> float: def cleanup_output_files(created_files): for file_path in created_files: - full_path = OUTPUT_DIR / file_path + full_path = OUTPUT_PATH / file_path if full_path.exists(): os.remove(full_path) diff --git a/tests/v1/api/test_async_response.py b/tests/v1/api/test_async_response.py index 8830f223..4fa2756c 100644 --- a/tests/v1/api/test_async_response.py +++ b/tests/v1/api/test_async_response.py @@ -9,9 +9,9 @@ from mindee.v1.parsing.common import RequestStatus from mindee.v1.parsing.common.async_predict_response import AsyncPredictResponse from mindee.v1.product.invoice_splitter.invoice_splitter_v1 import InvoiceSplitterV1 -from tests.utils import V1_DATA_DIR, V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH, V1_RESOURCE_PATH -ASYNC_DIR = V1_DATA_DIR / "async" +ASYNC_DIR = V1_RESOURCE_PATH / "async" FILE_PATH_POST_SUCCESS = ASYNC_DIR / "post_success.json" FILE_PATH_POST_FAIL = ASYNC_DIR / "post_fail_forbidden.json" @@ -41,9 +41,7 @@ def content(self) -> str: @pytest.fixture def dummy_file_input() -> PathInput: - file_input = PathInput( - V1_PRODUCT_DATA_DIR / "invoice_splitter" / "default_sample.pdf" - ) + file_input = PathInput(V1_PRODUCT_PATH / "invoice_splitter" / "default_sample.pdf") return file_input diff --git a/tests/v1/api/test_feedback_response.py b/tests/v1/api/test_feedback_response.py index e9331ace..e65e9266 100644 --- a/tests/v1/api/test_feedback_response.py +++ b/tests/v1/api/test_feedback_response.py @@ -1,12 +1,12 @@ import json from mindee.v1.parsing.common.feedback_response import FeedbackResponse -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH def test_empty_feedback_response(): with open( - V1_PRODUCT_DATA_DIR / "invoices" / "feedback_response" / "empty.json" + V1_PRODUCT_PATH / "invoices" / "feedback_response" / "empty.json" ) as json_file: response = json.load(json_file) feedback_response = FeedbackResponse(response) diff --git a/tests/v1/api/test_response.py b/tests/v1/api/test_response.py index 6371e0a0..6cb2f386 100644 --- a/tests/v1/api/test_response.py +++ b/tests/v1/api/test_response.py @@ -16,12 +16,12 @@ from mindee.v1.product.passport.passport_v1_document import PassportV1Document from mindee.v1.product.receipt.receipt_v5 import ReceiptV5 from mindee.v1.product.receipt.receipt_v5_document import ReceiptV5Document -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH def test_invoice_receipt_v5(): with open( - V1_PRODUCT_DATA_DIR / "invoices" / "response_v4" / "complete.json" + V1_PRODUCT_PATH / "invoices" / "response_v4" / "complete.json" ) as json_file: response = json.load(json_file) parsed_response = PredictResponse(InvoiceV4, response) @@ -33,7 +33,7 @@ def test_invoice_receipt_v5(): def test_response_receipt_v5(): with open( - V1_PRODUCT_DATA_DIR / "expense_receipts" / "response_v5" / "complete.json" + V1_PRODUCT_PATH / "expense_receipts" / "response_v5" / "complete.json" ) as json_file: response = json.load(json_file) parsed_response = PredictResponse(ReceiptV5, response) @@ -45,10 +45,7 @@ def test_response_receipt_v5(): def test_response_financial_doc_with_receipt(): with open( - V1_PRODUCT_DATA_DIR - / "financial_document" - / "response_v1" - / "complete_receipt.json" + V1_PRODUCT_PATH / "financial_document" / "response_v1" / "complete_receipt.json" ) as json_file: response = json.load(json_file) parsed_response = PredictResponse(FinancialDocumentV1, response) @@ -62,7 +59,7 @@ def test_response_financial_doc_with_receipt(): def test_response_passport_v1(): with open( - V1_PRODUCT_DATA_DIR / "passport" / "response_v1" / "complete.json" + V1_PRODUCT_PATH / "passport" / "response_v1" / "complete.json" ) as json_file: response = json.load(json_file) parsed_response = PredictResponse(PassportV1, response) @@ -75,7 +72,7 @@ def test_response_passport_v1(): def test_response_fr_idcard_v2(): with open( - V1_PRODUCT_DATA_DIR / "idcard_fr" / "response_v2" / "complete.json" + V1_PRODUCT_PATH / "idcard_fr" / "response_v2" / "complete.json" ) as json_file: response = json.load(json_file) parsed_response = PredictResponse(IdCardV2, response) diff --git a/tests/v1/extraction/test_image_extractor.py b/tests/v1/extraction/test_image_extractor.py index b63435ba..104d6adc 100644 --- a/tests/v1/extraction/test_image_extractor.py +++ b/tests/v1/extraction/test_image_extractor.py @@ -7,19 +7,19 @@ from mindee.image.image_extractor import extract_multiple_images_from_source from mindee.input.path_input import PathInput from mindee.v1.product.barcode_reader import BarcodeReaderV1 -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH Image = pytest.importorskip("PIL.Image") @pytest.fixture def barcode_path(): - return V1_PRODUCT_DATA_DIR / "barcode_reader" / "default_sample.jpg" + return V1_PRODUCT_PATH / "barcode_reader" / "default_sample.jpg" @pytest.fixture def barcode_json_path(): - return V1_PRODUCT_DATA_DIR / "barcode_reader" / "response_v1" / "complete.json" + return V1_PRODUCT_PATH / "barcode_reader" / "response_v1" / "complete.json" def test_barcode_image_extraction(barcode_path, barcode_json_path): diff --git a/tests/v1/extraction/test_invoice_splitter_auto_extraction.py b/tests/v1/extraction/test_invoice_splitter_auto_extraction.py index 1cea24c2..213bd0ba 100644 --- a/tests/v1/extraction/test_invoice_splitter_auto_extraction.py +++ b/tests/v1/extraction/test_invoice_splitter_auto_extraction.py @@ -8,13 +8,13 @@ from mindee.v1.pdf.pdf_extractor import PDFExtractor from mindee.v1.product.invoice.invoice_v4 import InvoiceV4 from mindee.v1.product.invoice_splitter.invoice_splitter_v1 import InvoiceSplitterV1 -from tests.utils import V1_PRODUCT_DATA_DIR, levenshtein_ratio +from tests.utils import V1_PRODUCT_PATH, levenshtein_ratio from tests.v1.product import get_id, get_version @pytest.fixture def invoice_splitter_5p_path(): - return V1_PRODUCT_DATA_DIR / "invoice_splitter" / "invoice_5p.pdf" + return V1_PRODUCT_PATH / "invoice_splitter" / "invoice_5p.pdf" def prepare_invoice_return(rst_file_path: Path, invoice_prediction: Document): @@ -33,7 +33,7 @@ def prepare_invoice_return(rst_file_path: Path, invoice_prediction: Document): def test_pdf_should_extract_invoices_strict(): client = Client() invoice_splitter_input = PathInput( - V1_PRODUCT_DATA_DIR / "invoice_splitter" / "default_sample.pdf" + V1_PRODUCT_PATH / "invoice_splitter" / "default_sample.pdf" ) response = client.enqueue_and_parse( InvoiceSplitterV1, invoice_splitter_input, close_file=False @@ -61,10 +61,7 @@ def test_pdf_should_extract_invoices_strict(): invoice_0 = client.parse(InvoiceV4, extracted_pdfs_not_strict[0].as_input_source()) test_string_rst_invoice_0 = prepare_invoice_return( - V1_PRODUCT_DATA_DIR - / "invoices" - / "response_v4" - / "summary_full_invoice_p1.rst", + V1_PRODUCT_PATH / "invoices" / "response_v4" / "summary_full_invoice_p1.rst", invoice_0.document, ) assert levenshtein_ratio(test_string_rst_invoice_0, str(invoice_0.document)) >= 0.97 diff --git a/tests/v1/extraction/test_multi_receipts_extractor.py b/tests/v1/extraction/test_multi_receipts_extractor.py index 06fd0184..518e9039 100644 --- a/tests/v1/extraction/test_multi_receipts_extractor.py +++ b/tests/v1/extraction/test_multi_receipts_extractor.py @@ -9,35 +9,30 @@ from mindee.v1.product.multi_receipts_detector.multi_receipts_detector_v1 import ( MultiReceiptsDetectorV1, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH Image = pytest.importorskip("PIL.Image") @pytest.fixture def multi_receipts_single_page_path(): - return V1_PRODUCT_DATA_DIR / "multi_receipts_detector" / "default_sample.jpg" + return V1_PRODUCT_PATH / "multi_receipts_detector" / "default_sample.jpg" @pytest.fixture def multi_receipts_single_page_json_path(): - return ( - V1_PRODUCT_DATA_DIR - / "multi_receipts_detector" - / "response_v1" - / "complete.json" - ) + return V1_PRODUCT_PATH / "multi_receipts_detector" / "response_v1" / "complete.json" @pytest.fixture def multi_receipts_multi_page_path(): - return V1_PRODUCT_DATA_DIR / "multi_receipts_detector" / "multipage_sample.pdf" + return V1_PRODUCT_PATH / "multi_receipts_detector" / "multipage_sample.pdf" @pytest.fixture def multi_receipts_multi_page_json_path(): return ( - V1_PRODUCT_DATA_DIR + V1_PRODUCT_PATH / "multi_receipts_detector" / "response_v1" / "multipage_sample.json" diff --git a/tests/v1/extraction/test_pdf_extractor.py b/tests/v1/extraction/test_pdf_extractor.py index 112c56ec..b47be0b4 100644 --- a/tests/v1/extraction/test_pdf_extractor.py +++ b/tests/v1/extraction/test_pdf_extractor.py @@ -8,24 +8,24 @@ from mindee.v1.product.invoice_splitter.invoice_splitter_v1_document import ( InvoiceSplitterV1Document, ) -from tests.utils import OUTPUT_DIR, V1_PRODUCT_DATA_DIR +from tests.utils import OUTPUT_PATH, V1_PRODUCT_PATH @pytest.fixture def invoice_default_sample_path(): - return V1_PRODUCT_DATA_DIR / "invoices" / "default_sample.jpg" + return V1_PRODUCT_PATH / "invoices" / "default_sample.jpg" @pytest.fixture def invoice_splitter_5p_path(): - return V1_PRODUCT_DATA_DIR / "invoice_splitter" / "invoice_5p.pdf" + return V1_PRODUCT_PATH / "invoice_splitter" / "invoice_5p.pdf" @pytest.fixture def loaded_prediction(): dummy_client = Client("dummy_key") loaded_prediction_path = ( - V1_PRODUCT_DATA_DIR / "invoice_splitter" / "response_v1" / "complete.json" + V1_PRODUCT_PATH / "invoice_splitter" / "response_v1" / "complete.json" ) input_response = LocalResponse(loaded_prediction_path) response = dummy_client.load_prediction(InvoiceSplitterV1, input_response) @@ -43,8 +43,8 @@ def test_image_should_extract_pdf(invoice_default_sample_path): assert extracted_pdf.page_count == 1 assert extracted_pdf.page_indexes == [0] assert extracted_pdf.filename == "default_sample_pages-001-001.pdf" - extracted_pdf.write_to_file(OUTPUT_DIR) - assert (OUTPUT_DIR / extracted_pdf.filename).exists() + extracted_pdf.write_to_file(OUTPUT_PATH) + assert (OUTPUT_PATH / extracted_pdf.filename).exists() @pytest.mark.pillow diff --git a/tests/v1/extras/test_extras_integration.py b/tests/v1/extras/test_extras_integration.py index 6986c696..e8972935 100644 --- a/tests/v1/extras/test_extras_integration.py +++ b/tests/v1/extras/test_extras_integration.py @@ -4,7 +4,7 @@ from mindee.v1.client import Client from mindee.v1.product.international_id import InternationalIdV2 from mindee.v1.product.invoice.invoice_v4 import InvoiceV4 -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH @pytest.fixture @@ -16,7 +16,7 @@ def client(): @pytest.mark.integration def test_send_cropper_extra(client): sample = PathInput( - V1_PRODUCT_DATA_DIR / "invoices" / "default_sample.jpg", + V1_PRODUCT_PATH / "invoices" / "default_sample.jpg", ) response = client.parse(InvoiceV4, sample, cropper=True) assert response.document.inference.pages[0].extras.cropper @@ -25,7 +25,7 @@ def test_send_cropper_extra(client): @pytest.mark.integration def test_send_full_text_ocr_extra(client): sample = PathInput( - V1_PRODUCT_DATA_DIR / "international_id" / "default_sample.jpg", + V1_PRODUCT_PATH / "international_id" / "default_sample.jpg", ) response = client.enqueue_and_parse(InternationalIdV2, sample, full_text=True) assert response.document.extras.full_text_ocr diff --git a/tests/v1/extras/test_full_text_ocr.py b/tests/v1/extras/test_full_text_ocr.py index 7f1b717a..d78cf5d6 100644 --- a/tests/v1/extras/test_full_text_ocr.py +++ b/tests/v1/extras/test_full_text_ocr.py @@ -4,19 +4,19 @@ from mindee.v1.parsing.common.async_predict_response import AsyncPredictResponse from mindee.v1.product.international_id import InternationalIdV2 -from tests.utils import V1_EXTRAS_DIR +from tests.utils import V1_EXTRAS_PATH @pytest.fixture def load_document(): - with open(V1_EXTRAS_DIR / "full_text_ocr/complete.json") as file: + with open(V1_EXTRAS_PATH / "full_text_ocr/complete.json") as file: prediction_data = json.load(file) return AsyncPredictResponse(InternationalIdV2, prediction_data).document def test_get_full_text_ocr_result(load_document): - expected_text = (V1_EXTRAS_DIR / "full_text_ocr/full_text_ocr.txt").read_text() + expected_text = (V1_EXTRAS_PATH / "full_text_ocr/full_text_ocr.txt").read_text() full_text_ocr = load_document.extras.full_text_ocr diff --git a/tests/v1/mindee_http/test_error.py b/tests/v1/mindee_http/test_error.py index 055d4c4f..1a32efcf 100644 --- a/tests/v1/mindee_http/test_error.py +++ b/tests/v1/mindee_http/test_error.py @@ -10,7 +10,7 @@ from mindee.input.path_input import PathInput from mindee.v1 import product from mindee.v1.client import Client -from tests.utils import FILE_TYPES_DIR, V1_ERROR_DATA_DIR, clear_envvars, dummy_envvars +from tests.utils import FILE_TYPES_PATH, V1_ERROR_PATH, clear_envvars, dummy_envvars @pytest.fixture @@ -27,7 +27,7 @@ def dummy_client(monkeypatch) -> Client: @pytest.fixture def dummy_file() -> PathInput: - return PathInput(FILE_TYPES_DIR / "pdf" / "blank.pdf") + return PathInput(FILE_TYPES_PATH / "pdf" / "blank.pdf") def test_http_client_error(dummy_client: Client, dummy_file: PathInput): @@ -53,7 +53,7 @@ def test_http_enqueue_and_parse_client_error( def test_http_400_error(): - with open(V1_ERROR_DATA_DIR / "error_400_no_details.json") as e: + with open(V1_ERROR_PATH / "error_400_no_details.json") as e: error_obj = json.load(e) error_obj["status_code"] = 400 error_400 = handle_error("dummy-url", error_obj) @@ -66,7 +66,7 @@ def test_http_400_error(): def test_http_401_error(): - with open(V1_ERROR_DATA_DIR / "error_401_invalid_token.json") as e: + with open(V1_ERROR_PATH / "error_401_invalid_token.json") as e: error_obj = json.load(e) error_obj["status_code"] = 401 error_401 = handle_error("dummy-url", error_obj) @@ -79,7 +79,7 @@ def test_http_401_error(): def test_http_429_error(): - with open(V1_ERROR_DATA_DIR / "error_429_too_many_requests.json") as e: + with open(V1_ERROR_PATH / "error_429_too_many_requests.json") as e: error_obj = json.load(e) error_obj["status_code"] = 429 error_429 = handle_error("dummy-url", error_obj) @@ -92,7 +92,7 @@ def test_http_429_error(): def test_http_500_error(): - with open(V1_ERROR_DATA_DIR / "error_500_inference_fail.json") as e: + with open(V1_ERROR_PATH / "error_500_inference_fail.json") as e: error_obj = json.load(e) error_obj["status_code"] = 500 error_500 = handle_error("dummy-url", error_obj) @@ -105,7 +105,7 @@ def test_http_500_error(): def test_http_500_html_error(): - with open(V1_ERROR_DATA_DIR / "error_50x.html") as e: + with open(V1_ERROR_PATH / "error_50x.html") as e: error_ref_contents = e.read() error_500 = handle_error("dummy-url", error_ref_contents) with pytest.raises(MindeeHTTPServerError): diff --git a/tests/v1/parsing/common/test_ocr.py b/tests/v1/parsing/common/test_ocr.py index 3e693903..b38903bf 100644 --- a/tests/v1/parsing/common/test_ocr.py +++ b/tests/v1/parsing/common/test_ocr.py @@ -1,13 +1,13 @@ import json from mindee.v1.parsing.common import OCR -from tests.utils import V1_DATA_DIR +from tests.utils import V1_RESOURCE_PATH def test_response(): - with open(V1_DATA_DIR / "extras" / "ocr" / "complete.json") as json_file: + with open(V1_RESOURCE_PATH / "extras" / "ocr" / "complete.json") as json_file: json_data = json.load(json_file) - with open(V1_DATA_DIR / "extras" / "ocr" / "ocr.txt") as file_handle: + with open(V1_RESOURCE_PATH / "extras" / "ocr" / "ocr.txt") as file_handle: expected_text = file_handle.read() ocr = OCR(json_data["document"]["ocr"]) assert str(ocr) == expected_text diff --git a/tests/v1/product/barcode_reader/test_barcode_reader_v1.py b/tests/v1/product/barcode_reader/test_barcode_reader_v1.py index a326a031..3af7cfa3 100644 --- a/tests/v1/product/barcode_reader/test_barcode_reader_v1.py +++ b/tests/v1/product/barcode_reader/test_barcode_reader_v1.py @@ -8,9 +8,9 @@ from mindee.v1.product.barcode_reader.barcode_reader_v1_document import ( BarcodeReaderV1Document, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH -RESPONSE_DIR = V1_PRODUCT_DATA_DIR / "barcode_reader" / "response_v1" +RESPONSE_DIR = V1_PRODUCT_PATH / "barcode_reader" / "response_v1" BarcodeReaderV1DocumentType = Document[ BarcodeReaderV1Document, diff --git a/tests/v1/product/barcode_reader/test_barcode_reader_v1_regression.py b/tests/v1/product/barcode_reader/test_barcode_reader_v1_regression.py index 22a67061..5f3df286 100644 --- a/tests/v1/product/barcode_reader/test_barcode_reader_v1_regression.py +++ b/tests/v1/product/barcode_reader/test_barcode_reader_v1_regression.py @@ -3,7 +3,7 @@ from mindee import PathInput from mindee.v1.client import Client from mindee.v1.product.barcode_reader import BarcodeReaderV1 -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH from tests.v1.product import get_id, get_version @@ -11,13 +11,13 @@ def test_default_sample(): client = Client() with open( - V1_PRODUCT_DATA_DIR / "barcode_reader" / "response_v1" / "default_sample.rst", + V1_PRODUCT_PATH / "barcode_reader" / "response_v1" / "default_sample.rst", encoding="utf-8", ) as rst_file: rst_ref = rst_file.read() sample = PathInput( - V1_PRODUCT_DATA_DIR / "barcode_reader" / "default_sample.jpg", + V1_PRODUCT_PATH / "barcode_reader" / "default_sample.jpg", ) response = client.parse(BarcodeReaderV1, sample) doc_response = response.document diff --git a/tests/v1/product/cropper/test_cropper_v1.py b/tests/v1/product/cropper/test_cropper_v1.py index 493ab9e1..58550486 100644 --- a/tests/v1/product/cropper/test_cropper_v1.py +++ b/tests/v1/product/cropper/test_cropper_v1.py @@ -11,9 +11,9 @@ from mindee.v1.product.cropper.cropper_v1_page import ( CropperV1Page, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH -RESPONSE_DIR = V1_PRODUCT_DATA_DIR / "cropper" / "response_v1" +RESPONSE_DIR = V1_PRODUCT_PATH / "cropper" / "response_v1" CropperV1DocumentType = Document[ CropperV1Document, diff --git a/tests/v1/product/cropper/test_cropper_v1_regression.py b/tests/v1/product/cropper/test_cropper_v1_regression.py index ffee6eab..e9d378c7 100644 --- a/tests/v1/product/cropper/test_cropper_v1_regression.py +++ b/tests/v1/product/cropper/test_cropper_v1_regression.py @@ -3,7 +3,7 @@ from mindee import PathInput from mindee.v1.client import Client from mindee.v1.product.cropper.cropper_v1 import CropperV1 -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH from tests.v1.product import get_id, get_version @@ -11,13 +11,13 @@ def test_default_sample(): client = Client() with open( - V1_PRODUCT_DATA_DIR / "cropper" / "response_v1" / "default_sample.rst", + V1_PRODUCT_PATH / "cropper" / "response_v1" / "default_sample.rst", encoding="utf-8", ) as rst_file: rst_ref = rst_file.read() sample = PathInput( - V1_PRODUCT_DATA_DIR / "cropper" / "default_sample.jpg", + V1_PRODUCT_PATH / "cropper" / "default_sample.jpg", ) response = client.parse(CropperV1, sample) doc_response = response.document diff --git a/tests/v1/product/custom/test_custom_v1.py b/tests/v1/product/custom/test_custom_v1.py index 4a11c9ce..0c9317e7 100644 --- a/tests/v1/product/custom/test_custom_v1.py +++ b/tests/v1/product/custom/test_custom_v1.py @@ -9,13 +9,13 @@ from mindee.v1.product.custom.custom_v1 import CustomV1 from mindee.v1.product.custom.custom_v1_document import CustomV1Document from mindee.v1.product.custom.custom_v1_page import CustomV1Page -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH @pytest.fixture def custom_v1_complete_doc() -> Document[CustomV1Document, Page[CustomV1Page]]: with open( - V1_PRODUCT_DATA_DIR / "custom" / "response_v1" / "complete.json" + V1_PRODUCT_PATH / "custom" / "response_v1" / "complete.json" ) as json_file: json_data = json.load(json_file) return Document(CustomV1, json_data["document"]) @@ -23,9 +23,7 @@ def custom_v1_complete_doc() -> Document[CustomV1Document, Page[CustomV1Page]]: @pytest.fixture def custom_v1_empty_doc() -> Document[CustomV1Document, Page[CustomV1Page]]: - with open( - V1_PRODUCT_DATA_DIR / "custom" / "response_v1" / "empty.json" - ) as json_file: + with open(V1_PRODUCT_PATH / "custom" / "response_v1" / "empty.json") as json_file: json_data = json.load(json_file) return Document(CustomV1, json_data["document"]) @@ -34,7 +32,7 @@ def custom_v1_empty_doc() -> Document[CustomV1Document, Page[CustomV1Page]]: @pytest.fixture def custom_v1_complete_page_0() -> Page[CustomV1Page]: with open( - V1_PRODUCT_DATA_DIR / "custom" / "response_v1" / "complete.json" + V1_PRODUCT_PATH / "custom" / "response_v1" / "complete.json" ) as json_file: json_data = json.load(json_file) @@ -44,7 +42,7 @@ def custom_v1_complete_page_0() -> Page[CustomV1Page]: @pytest.fixture def custom_v1_complete_page_1() -> Page[CustomV1Page]: with open( - V1_PRODUCT_DATA_DIR / "custom" / "response_v1" / "complete.json" + V1_PRODUCT_PATH / "custom" / "response_v1" / "complete.json" ) as json_file: json_data = json.load(json_file) @@ -68,9 +66,7 @@ def test_empty_doc(custom_v1_empty_doc) -> None: def test_complete_doc(custom_v1_complete_doc) -> None: document_prediction: CustomV1Document = custom_v1_complete_doc.inference.prediction - with open( - V1_PRODUCT_DATA_DIR / "custom" / "response_v1" / "summary_full.rst" - ) as doc: + with open(V1_PRODUCT_PATH / "custom" / "response_v1" / "summary_full.rst") as doc: doc_str = doc.read() for field_name, field in document_prediction.fields.items(): assert len(field_name) > 0 @@ -96,7 +92,7 @@ def test_complete_doc(custom_v1_complete_doc) -> None: def test_complete_page_0(custom_v1_complete_page_0): page_0_prediction = custom_v1_complete_page_0.prediction with open( - V1_PRODUCT_DATA_DIR / "custom" / "response_v1" / "summary_page0.rst" + V1_PRODUCT_PATH / "custom" / "response_v1" / "summary_page0.rst" ) as page0: page_0_str = page0.read() assert custom_v1_complete_page_0.orientation.value == 0 @@ -112,7 +108,7 @@ def test_complete_page_0(custom_v1_complete_page_0): def test_complete_page_1(custom_v1_complete_page_1): page_1_prediction = custom_v1_complete_page_1.prediction with open( - V1_PRODUCT_DATA_DIR / "custom" / "response_v1" / "summary_page1.rst" + V1_PRODUCT_PATH / "custom" / "response_v1" / "summary_page1.rst" ) as page1: page_1_str = page1.read() assert custom_v1_complete_page_1.orientation.value == 0 diff --git a/tests/v1/product/custom/test_custom_v1_line_items.py b/tests/v1/product/custom/test_custom_v1_line_items.py index 31da6fb8..cc3af839 100644 --- a/tests/v1/product/custom/test_custom_v1_line_items.py +++ b/tests/v1/product/custom/test_custom_v1_line_items.py @@ -6,7 +6,7 @@ from mindee.v1.parsing.common.page import Page from mindee.v1.product.custom.custom_v1 import CustomV1 from mindee.v1.product.custom.custom_v1_page import CustomV1Page -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH @pytest.mark.lineitems @@ -26,7 +26,7 @@ def do_tests(line_items): @pytest.mark.lineitems def test_single_table_01(): json_data_path = ( - V1_PRODUCT_DATA_DIR + V1_PRODUCT_PATH / "custom" / "response_v1" / "line_items" @@ -52,7 +52,7 @@ def test_single_table_01(): @pytest.mark.lineitems def test_single_table_02(): json_data_path = ( - V1_PRODUCT_DATA_DIR + V1_PRODUCT_PATH / "custom" / "response_v2" / "line_items" diff --git a/tests/v1/product/custom/test_custom_v1_v2.py b/tests/v1/product/custom/test_custom_v1_v2.py index 00ee54cc..37ff8933 100644 --- a/tests/v1/product/custom/test_custom_v1_v2.py +++ b/tests/v1/product/custom/test_custom_v1_v2.py @@ -9,13 +9,13 @@ from mindee.v1.product.custom.custom_v1 import CustomV1 from mindee.v1.product.custom.custom_v1_document import CustomV1Document from mindee.v1.product.custom.custom_v1_page import CustomV1Page -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH @pytest.fixture def custom_v1_complete_doc() -> Document[CustomV1Document, Page[CustomV1Page]]: with open( - V1_PRODUCT_DATA_DIR / "custom" / "response_v2" / "complete.json" + V1_PRODUCT_PATH / "custom" / "response_v2" / "complete.json" ) as json_file: json_data = json.load(json_file) return Document(CustomV1, json_data["document"]) @@ -23,9 +23,7 @@ def custom_v1_complete_doc() -> Document[CustomV1Document, Page[CustomV1Page]]: @pytest.fixture def custom_v1_empty_doc() -> Document[CustomV1Document, Page[CustomV1Page]]: - with open( - V1_PRODUCT_DATA_DIR / "custom" / "response_v2" / "empty.json" - ) as json_file: + with open(V1_PRODUCT_PATH / "custom" / "response_v2" / "empty.json") as json_file: json_data = json.load(json_file) return Document(CustomV1, json_data["document"]) @@ -34,7 +32,7 @@ def custom_v1_empty_doc() -> Document[CustomV1Document, Page[CustomV1Page]]: @pytest.fixture def custom_v1_complete_page_0() -> Page[CustomV1Page]: with open( - V1_PRODUCT_DATA_DIR / "custom" / "response_v2" / "complete.json" + V1_PRODUCT_PATH / "custom" / "response_v2" / "complete.json" ) as json_file: json_data = json.load(json_file) @@ -44,7 +42,7 @@ def custom_v1_complete_page_0() -> Page[CustomV1Page]: @pytest.fixture def custom_v1_complete_page_1() -> Page[CustomV1Page]: with open( - V1_PRODUCT_DATA_DIR / "custom" / "response_v2" / "complete.json" + V1_PRODUCT_PATH / "custom" / "response_v2" / "complete.json" ) as json_file: json_data = json.load(json_file) @@ -68,9 +66,7 @@ def test_empty_doc(custom_v1_empty_doc) -> None: def test_complete_doc(custom_v1_complete_doc) -> None: document_prediction: CustomV1Document = custom_v1_complete_doc.inference.prediction - with open( - V1_PRODUCT_DATA_DIR / "custom" / "response_v2" / "summary_full.rst" - ) as doc: + with open(V1_PRODUCT_PATH / "custom" / "response_v2" / "summary_full.rst") as doc: doc_str = doc.read() for field_name, field in document_prediction.fields.items(): assert len(field_name) > 0 @@ -96,7 +92,7 @@ def test_complete_doc(custom_v1_complete_doc) -> None: def test_complete_page_0(custom_v1_complete_page_0): page_0_prediction = custom_v1_complete_page_0.prediction with open( - V1_PRODUCT_DATA_DIR / "custom" / "response_v2" / "summary_page0.rst" + V1_PRODUCT_PATH / "custom" / "response_v2" / "summary_page0.rst" ) as page0: page_0_str = page0.read() assert custom_v1_complete_page_0.orientation.value == 0 @@ -112,7 +108,7 @@ def test_complete_page_0(custom_v1_complete_page_0): def test_complete_page_1(custom_v1_complete_page_1): page_1_prediction = custom_v1_complete_page_1.prediction with open( - V1_PRODUCT_DATA_DIR / "custom" / "response_v2" / "summary_page1.rst" + V1_PRODUCT_PATH / "custom" / "response_v2" / "summary_page1.rst" ) as page1: page_1_str = page1.read() assert custom_v1_complete_page_1.orientation.value == 0 diff --git a/tests/v1/product/financial_document/test_financial_document_v1.py b/tests/v1/product/financial_document/test_financial_document_v1.py index aa3d33d0..b355a409 100644 --- a/tests/v1/product/financial_document/test_financial_document_v1.py +++ b/tests/v1/product/financial_document/test_financial_document_v1.py @@ -10,9 +10,9 @@ from mindee.v1.product.financial_document.financial_document_v1_document import ( FinancialDocumentV1Document, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH -RESPONSE_DIR = V1_PRODUCT_DATA_DIR / "financial_document" / "response_v1" +RESPONSE_DIR = V1_PRODUCT_PATH / "financial_document" / "response_v1" FinancialDocumentV1DocumentType = Document[ FinancialDocumentV1Document, diff --git a/tests/v1/product/financial_document/test_financial_document_v1_regression.py b/tests/v1/product/financial_document/test_financial_document_v1_regression.py index 49851621..06e5e7a3 100644 --- a/tests/v1/product/financial_document/test_financial_document_v1_regression.py +++ b/tests/v1/product/financial_document/test_financial_document_v1_regression.py @@ -5,7 +5,7 @@ from mindee.v1.product.financial_document.financial_document_v1 import ( FinancialDocumentV1, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH from tests.v1.product import get_id, get_version @@ -13,16 +13,13 @@ def test_default_sample(): client = Client() with open( - V1_PRODUCT_DATA_DIR - / "financial_document" - / "response_v1" - / "default_sample.rst", + V1_PRODUCT_PATH / "financial_document" / "response_v1" / "default_sample.rst", encoding="utf-8", ) as rst_file: rst_ref = rst_file.read() sample = PathInput( - V1_PRODUCT_DATA_DIR / "financial_document" / "default_sample.jpg", + V1_PRODUCT_PATH / "financial_document" / "default_sample.jpg", ) response = client.parse(FinancialDocumentV1, sample) doc_response = response.document diff --git a/tests/v1/product/fr/bank_account_details/test_bank_account_details_v1.py b/tests/v1/product/fr/bank_account_details/test_bank_account_details_v1.py index c1511a25..b19d2490 100644 --- a/tests/v1/product/fr/bank_account_details/test_bank_account_details_v1.py +++ b/tests/v1/product/fr/bank_account_details/test_bank_account_details_v1.py @@ -10,9 +10,9 @@ from mindee.v1.product.fr.bank_account_details.bank_account_details_v1_document import ( BankAccountDetailsV1Document, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH -RESPONSE_DIR = V1_PRODUCT_DATA_DIR / "bank_account_details" / "response_v1" +RESPONSE_DIR = V1_PRODUCT_PATH / "bank_account_details" / "response_v1" BankAccountDetailsV1DocumentType = Document[ BankAccountDetailsV1Document, diff --git a/tests/v1/product/fr/bank_account_details/test_bank_account_details_v1_regression.py b/tests/v1/product/fr/bank_account_details/test_bank_account_details_v1_regression.py index 20a428da..61c7d6cd 100644 --- a/tests/v1/product/fr/bank_account_details/test_bank_account_details_v1_regression.py +++ b/tests/v1/product/fr/bank_account_details/test_bank_account_details_v1_regression.py @@ -5,7 +5,7 @@ from mindee.v1.product.fr.bank_account_details.bank_account_details_v1 import ( BankAccountDetailsV1, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH from tests.v1.product import get_id, get_version @@ -13,16 +13,13 @@ def test_default_sample(): client = Client() with open( - V1_PRODUCT_DATA_DIR - / "bank_account_details" - / "response_v1" - / "default_sample.rst", + V1_PRODUCT_PATH / "bank_account_details" / "response_v1" / "default_sample.rst", encoding="utf-8", ) as rst_file: rst_ref = rst_file.read() sample = PathInput( - V1_PRODUCT_DATA_DIR / "bank_account_details" / "default_sample.jpg", + V1_PRODUCT_PATH / "bank_account_details" / "default_sample.jpg", ) response = client.parse(BankAccountDetailsV1, sample) doc_response = response.document diff --git a/tests/v1/product/fr/bank_account_details/test_bank_account_details_v2.py b/tests/v1/product/fr/bank_account_details/test_bank_account_details_v2.py index ccd98741..c09d8ef5 100644 --- a/tests/v1/product/fr/bank_account_details/test_bank_account_details_v2.py +++ b/tests/v1/product/fr/bank_account_details/test_bank_account_details_v2.py @@ -10,9 +10,9 @@ from mindee.v1.product.fr.bank_account_details.bank_account_details_v2_document import ( BankAccountDetailsV2Document, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH -RESPONSE_DIR = V1_PRODUCT_DATA_DIR / "bank_account_details" / "response_v2" +RESPONSE_DIR = V1_PRODUCT_PATH / "bank_account_details" / "response_v2" BankAccountDetailsV2DocumentType = Document[ BankAccountDetailsV2Document, diff --git a/tests/v1/product/fr/bank_account_details/test_bank_account_details_v2_regression.py b/tests/v1/product/fr/bank_account_details/test_bank_account_details_v2_regression.py index 68e7e2c3..2980bef1 100644 --- a/tests/v1/product/fr/bank_account_details/test_bank_account_details_v2_regression.py +++ b/tests/v1/product/fr/bank_account_details/test_bank_account_details_v2_regression.py @@ -5,7 +5,7 @@ from mindee.v1.product.fr.bank_account_details.bank_account_details_v2 import ( BankAccountDetailsV2, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH from tests.v1.product import get_id, get_version @@ -13,16 +13,13 @@ def test_default_sample(): client = Client() with open( - V1_PRODUCT_DATA_DIR - / "bank_account_details" - / "response_v2" - / "default_sample.rst", + V1_PRODUCT_PATH / "bank_account_details" / "response_v2" / "default_sample.rst", encoding="utf-8", ) as rst_file: rst_ref = rst_file.read() sample = PathInput( - V1_PRODUCT_DATA_DIR / "bank_account_details" / "default_sample.jpg", + V1_PRODUCT_PATH / "bank_account_details" / "default_sample.jpg", ) response = client.parse(BankAccountDetailsV2, sample) doc_response = response.document diff --git a/tests/v1/product/fr/carte_grise/test_carte_grise_v1.py b/tests/v1/product/fr/carte_grise/test_carte_grise_v1.py index d44cdc28..3322d003 100644 --- a/tests/v1/product/fr/carte_grise/test_carte_grise_v1.py +++ b/tests/v1/product/fr/carte_grise/test_carte_grise_v1.py @@ -8,9 +8,9 @@ from mindee.v1.product.fr.carte_grise.carte_grise_v1_document import ( CarteGriseV1Document, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH -RESPONSE_DIR = V1_PRODUCT_DATA_DIR / "carte_grise" / "response_v1" +RESPONSE_DIR = V1_PRODUCT_PATH / "carte_grise" / "response_v1" CarteGriseV1DocumentType = Document[ CarteGriseV1Document, diff --git a/tests/v1/product/fr/carte_grise/test_carte_grise_v1_regression.py b/tests/v1/product/fr/carte_grise/test_carte_grise_v1_regression.py index 1651f59c..c062ded7 100644 --- a/tests/v1/product/fr/carte_grise/test_carte_grise_v1_regression.py +++ b/tests/v1/product/fr/carte_grise/test_carte_grise_v1_regression.py @@ -3,7 +3,7 @@ from mindee import PathInput from mindee.v1.client import Client from mindee.v1.product.fr.carte_grise.carte_grise_v1 import CarteGriseV1 -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH from tests.v1.product import get_id, get_version @@ -11,13 +11,13 @@ def test_default_sample(): client = Client() with open( - V1_PRODUCT_DATA_DIR / "carte_grise" / "response_v1" / "default_sample.rst", + V1_PRODUCT_PATH / "carte_grise" / "response_v1" / "default_sample.rst", encoding="utf-8", ) as rst_file: rst_ref = rst_file.read() sample = PathInput( - V1_PRODUCT_DATA_DIR / "carte_grise" / "default_sample.jpg", + V1_PRODUCT_PATH / "carte_grise" / "default_sample.jpg", ) response = client.parse(CarteGriseV1, sample) doc_response = response.document diff --git a/tests/v1/product/fr/id_card/test_id_card_v1.py b/tests/v1/product/fr/id_card/test_id_card_v1.py index 4733c5d8..9fd395d2 100644 --- a/tests/v1/product/fr/id_card/test_id_card_v1.py +++ b/tests/v1/product/fr/id_card/test_id_card_v1.py @@ -11,9 +11,9 @@ from mindee.v1.product.fr.id_card.id_card_v1_page import ( IdCardV1Page, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH -RESPONSE_DIR = V1_PRODUCT_DATA_DIR / "idcard_fr" / "response_v1" +RESPONSE_DIR = V1_PRODUCT_PATH / "idcard_fr" / "response_v1" IdCardV1DocumentType = Document[ IdCardV1Document, diff --git a/tests/v1/product/fr/id_card/test_id_card_v1_regression.py b/tests/v1/product/fr/id_card/test_id_card_v1_regression.py index 620ac96a..b7bfb9f5 100644 --- a/tests/v1/product/fr/id_card/test_id_card_v1_regression.py +++ b/tests/v1/product/fr/id_card/test_id_card_v1_regression.py @@ -3,7 +3,7 @@ from mindee import PathInput from mindee.v1.client import Client from mindee.v1.product.fr.id_card.id_card_v1 import IdCardV1 -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH from tests.v1.product import get_id, get_version @@ -11,13 +11,13 @@ def test_default_sample(): client = Client() with open( - V1_PRODUCT_DATA_DIR / "idcard_fr" / "response_v1" / "default_sample.rst", + V1_PRODUCT_PATH / "idcard_fr" / "response_v1" / "default_sample.rst", encoding="utf-8", ) as rst_file: rst_ref = rst_file.read() sample = PathInput( - V1_PRODUCT_DATA_DIR / "idcard_fr" / "default_sample.jpg", + V1_PRODUCT_PATH / "idcard_fr" / "default_sample.jpg", ) response = client.parse(IdCardV1, sample) doc_response = response.document diff --git a/tests/v1/product/fr/id_card/test_id_card_v2.py b/tests/v1/product/fr/id_card/test_id_card_v2.py index 6f1aee14..ef8f820b 100644 --- a/tests/v1/product/fr/id_card/test_id_card_v2.py +++ b/tests/v1/product/fr/id_card/test_id_card_v2.py @@ -11,9 +11,9 @@ from mindee.v1.product.fr.id_card.id_card_v2_page import ( IdCardV2Page, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH -RESPONSE_DIR = V1_PRODUCT_DATA_DIR / "idcard_fr" / "response_v2" +RESPONSE_DIR = V1_PRODUCT_PATH / "idcard_fr" / "response_v2" IdCardV2DocumentType = Document[ IdCardV2Document, diff --git a/tests/v1/product/fr/id_card/test_id_card_v2_regression.py b/tests/v1/product/fr/id_card/test_id_card_v2_regression.py index ce6b4f05..7adac085 100644 --- a/tests/v1/product/fr/id_card/test_id_card_v2_regression.py +++ b/tests/v1/product/fr/id_card/test_id_card_v2_regression.py @@ -3,7 +3,7 @@ from mindee import PathInput from mindee.v1.client import Client from mindee.v1.product.fr.id_card.id_card_v2 import IdCardV2 -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH from tests.v1.product import get_id, get_version @@ -11,13 +11,13 @@ def test_default_sample(): client = Client() with open( - V1_PRODUCT_DATA_DIR / "idcard_fr" / "response_v2" / "default_sample.rst", + V1_PRODUCT_PATH / "idcard_fr" / "response_v2" / "default_sample.rst", encoding="utf-8", ) as rst_file: rst_ref = rst_file.read() sample = PathInput( - V1_PRODUCT_DATA_DIR / "idcard_fr" / "default_sample.jpg", + V1_PRODUCT_PATH / "idcard_fr" / "default_sample.jpg", ) response = client.parse(IdCardV2, sample) doc_response = response.document diff --git a/tests/v1/product/generated/test_generated_v1.py b/tests/v1/product/generated/test_generated_v1.py index 2defdd0f..8fe3862d 100644 --- a/tests/v1/product/generated/test_generated_v1.py +++ b/tests/v1/product/generated/test_generated_v1.py @@ -9,7 +9,7 @@ from mindee.v1.parsing.standard.text import StringField from mindee.v1.product.generated import GeneratedV1, GeneratedV1Document from mindee.v1.product.generated.generated_v1_page import GeneratedV1Page -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH @pytest.fixture @@ -17,7 +17,7 @@ def international_id_v1_complete_doc() -> Document[ GeneratedV1Document, Page[GeneratedV1Page] ]: with open( - V1_PRODUCT_DATA_DIR + V1_PRODUCT_PATH / "generated" / "response_v1" / "complete_international_id_v1.json", @@ -32,7 +32,7 @@ def international_id_v1_empty_doc() -> Document[ GeneratedV1Document, Page[GeneratedV1Page] ]: with open( - V1_PRODUCT_DATA_DIR + V1_PRODUCT_PATH / "generated" / "response_v1" / "empty_international_id_v1.json", @@ -46,7 +46,7 @@ def international_id_v1_empty_doc() -> Document[ @pytest.fixture def invoice_v4_empty_doc() -> Document[GeneratedV1Document, Page[GeneratedV1Page]]: with open( - V1_PRODUCT_DATA_DIR / "generated" / "response_v1" / "empty_invoice_v4.json", + V1_PRODUCT_PATH / "generated" / "response_v1" / "empty_invoice_v4.json", encoding="utf-8", ) as json_file: json_data = json.load(json_file) @@ -56,7 +56,7 @@ def invoice_v4_empty_doc() -> Document[GeneratedV1Document, Page[GeneratedV1Page @pytest.fixture def invoice_v4_complete_doc() -> Document[GeneratedV1Document, Page[GeneratedV1Page]]: with open( - V1_PRODUCT_DATA_DIR / "generated" / "response_v1" / "complete_invoice_v4.json", + V1_PRODUCT_PATH / "generated" / "response_v1" / "complete_invoice_v4.json", encoding="utf-8", ) as json_file: json_data = json.load(json_file) @@ -66,7 +66,7 @@ def invoice_v4_complete_doc() -> Document[GeneratedV1Document, Page[GeneratedV1P @pytest.fixture def invoice_v4_page_0() -> Document[GeneratedV1Document, Page[GeneratedV1Page]]: with open( - V1_PRODUCT_DATA_DIR / "generated" / "response_v1" / "complete_invoice_v4.json", + V1_PRODUCT_PATH / "generated" / "response_v1" / "complete_invoice_v4.json", encoding="utf-8", ) as json_file: json_data = json.load(json_file) @@ -75,7 +75,7 @@ def invoice_v4_page_0() -> Document[GeneratedV1Document, Page[GeneratedV1Page]]: def test_international_id_v1_empty_doc(international_id_v1_empty_doc) -> None: with open( - V1_PRODUCT_DATA_DIR + V1_PRODUCT_PATH / "generated" / "response_v1" / "summary_empty_international_id_v1.rst", @@ -225,7 +225,7 @@ def test_international_id_v1_empty_doc(international_id_v1_empty_doc) -> None: def test_international_id_v1_complete_doc(international_id_v1_complete_doc) -> None: with open( - V1_PRODUCT_DATA_DIR + V1_PRODUCT_PATH / "generated" / "response_v1" / "summary_full_international_id_v1.rst", @@ -393,10 +393,7 @@ def test_international_id_v1_complete_doc(international_id_v1_complete_doc) -> N def test_invoice_v4_complete_doc(invoice_v4_complete_doc) -> None: with open( - V1_PRODUCT_DATA_DIR - / "generated" - / "response_v1" - / "summary_full_invoice_v4.rst", + V1_PRODUCT_PATH / "generated" / "response_v1" / "summary_full_invoice_v4.rst", encoding="utf-8", ) as doc: doc_str = doc.read() @@ -639,10 +636,7 @@ def test_invoice_v4_complete_doc(invoice_v4_complete_doc) -> None: def test_invoice_v4_page0(invoice_v4_page_0) -> None: with open( - V1_PRODUCT_DATA_DIR - / "generated" - / "response_v1" - / "summary_page0_invoice_v4.rst", + V1_PRODUCT_PATH / "generated" / "response_v1" / "summary_page0_invoice_v4.rst", encoding="utf-8", ) as doc: doc_str = doc.read() @@ -791,10 +785,7 @@ def test_invoice_v4_page0(invoice_v4_page_0) -> None: def test_invoice_v4_empty_doc(invoice_v4_empty_doc) -> None: with open( - V1_PRODUCT_DATA_DIR - / "generated" - / "response_v1" - / "summary_empty_invoice_v4.rst", + V1_PRODUCT_PATH / "generated" / "response_v1" / "summary_empty_invoice_v4.rst", encoding="utf-8", ) as doc: doc_str = doc.read() diff --git a/tests/v1/product/international_id/test_international_id_v2.py b/tests/v1/product/international_id/test_international_id_v2.py index e5c71b0c..fa57f791 100644 --- a/tests/v1/product/international_id/test_international_id_v2.py +++ b/tests/v1/product/international_id/test_international_id_v2.py @@ -8,9 +8,9 @@ from mindee.v1.product.international_id.international_id_v2_document import ( InternationalIdV2Document, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH -RESPONSE_DIR = V1_PRODUCT_DATA_DIR / "international_id" / "response_v2" +RESPONSE_DIR = V1_PRODUCT_PATH / "international_id" / "response_v2" InternationalIdV2DocumentType = Document[ InternationalIdV2Document, diff --git a/tests/v1/product/invoice/test_invoice_v4.py b/tests/v1/product/invoice/test_invoice_v4.py index 49b90c9d..28b91367 100644 --- a/tests/v1/product/invoice/test_invoice_v4.py +++ b/tests/v1/product/invoice/test_invoice_v4.py @@ -8,9 +8,9 @@ from mindee.v1.product.invoice.invoice_v4_document import ( InvoiceV4Document, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH -RESPONSE_DIR = V1_PRODUCT_DATA_DIR / "invoices" / "response_v4" +RESPONSE_DIR = V1_PRODUCT_PATH / "invoices" / "response_v4" InvoiceV4DocumentType = Document[ InvoiceV4Document, diff --git a/tests/v1/product/invoice/test_invoice_v4_regression.py b/tests/v1/product/invoice/test_invoice_v4_regression.py index 0b38743f..c972cd66 100644 --- a/tests/v1/product/invoice/test_invoice_v4_regression.py +++ b/tests/v1/product/invoice/test_invoice_v4_regression.py @@ -3,7 +3,7 @@ from mindee import PathInput from mindee.v1.client import Client from mindee.v1.product.invoice.invoice_v4 import InvoiceV4 -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH from tests.v1.product import get_id, get_version @@ -11,13 +11,13 @@ def test_default_sample(): client = Client() with open( - V1_PRODUCT_DATA_DIR / "invoices" / "response_v4" / "default_sample.rst", + V1_PRODUCT_PATH / "invoices" / "response_v4" / "default_sample.rst", encoding="utf-8", ) as rst_file: rst_ref = rst_file.read() sample = PathInput( - V1_PRODUCT_DATA_DIR / "invoices" / "default_sample.jpg", + V1_PRODUCT_PATH / "invoices" / "default_sample.jpg", ) response = client.parse(InvoiceV4, sample) doc_response = response.document diff --git a/tests/v1/product/invoice_splitter/test_invoice_splitter_v1.py b/tests/v1/product/invoice_splitter/test_invoice_splitter_v1.py index 4e7dfa7d..a927e2f1 100644 --- a/tests/v1/product/invoice_splitter/test_invoice_splitter_v1.py +++ b/tests/v1/product/invoice_splitter/test_invoice_splitter_v1.py @@ -8,9 +8,9 @@ from mindee.v1.product.invoice_splitter.invoice_splitter_v1_document import ( InvoiceSplitterV1Document, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH -RESPONSE_DIR = V1_PRODUCT_DATA_DIR / "invoice_splitter" / "response_v1" +RESPONSE_DIR = V1_PRODUCT_PATH / "invoice_splitter" / "response_v1" InvoiceSplitterV1DocumentType = Document[ InvoiceSplitterV1Document, diff --git a/tests/v1/product/invoice_splitter/test_invoice_splitter_v1_regression.py b/tests/v1/product/invoice_splitter/test_invoice_splitter_v1_regression.py index 58bf45a2..1cf1ca96 100644 --- a/tests/v1/product/invoice_splitter/test_invoice_splitter_v1_regression.py +++ b/tests/v1/product/invoice_splitter/test_invoice_splitter_v1_regression.py @@ -3,7 +3,7 @@ from mindee import PathInput from mindee.v1.client import Client from mindee.v1.product.invoice_splitter.invoice_splitter_v1 import InvoiceSplitterV1 -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH from tests.v1.product import get_id, get_version @@ -11,12 +11,12 @@ def test_default_sample(): client = Client() with open( - V1_PRODUCT_DATA_DIR / "invoice_splitter" / "response_v1" / "default_sample.rst", + V1_PRODUCT_PATH / "invoice_splitter" / "response_v1" / "default_sample.rst", encoding="utf-8", ) as rst_file: rst_ref = rst_file.read() - sample = PathInput(V1_PRODUCT_DATA_DIR / "invoice_splitter" / "default_sample.pdf") + sample = PathInput(V1_PRODUCT_PATH / "invoice_splitter" / "default_sample.pdf") response = client.enqueue_and_parse(InvoiceSplitterV1, sample) doc_response = response.document diff --git a/tests/v1/product/multi_receipts_detector/test_multi_receipts_detector_v1.py b/tests/v1/product/multi_receipts_detector/test_multi_receipts_detector_v1.py index f4e9f0a2..ca7904dc 100644 --- a/tests/v1/product/multi_receipts_detector/test_multi_receipts_detector_v1.py +++ b/tests/v1/product/multi_receipts_detector/test_multi_receipts_detector_v1.py @@ -10,9 +10,9 @@ from mindee.v1.product.multi_receipts_detector.multi_receipts_detector_v1_document import ( MultiReceiptsDetectorV1Document, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH -RESPONSE_DIR = V1_PRODUCT_DATA_DIR / "multi_receipts_detector" / "response_v1" +RESPONSE_DIR = V1_PRODUCT_PATH / "multi_receipts_detector" / "response_v1" MultiReceiptsDetectorV1DocumentType = Document[ MultiReceiptsDetectorV1Document, diff --git a/tests/v1/product/multi_receipts_detector/test_multi_receipts_detector_v1_regression.py b/tests/v1/product/multi_receipts_detector/test_multi_receipts_detector_v1_regression.py index 062a304c..dd952ba8 100644 --- a/tests/v1/product/multi_receipts_detector/test_multi_receipts_detector_v1_regression.py +++ b/tests/v1/product/multi_receipts_detector/test_multi_receipts_detector_v1_regression.py @@ -5,7 +5,7 @@ from mindee.v1.product.multi_receipts_detector.multi_receipts_detector_v1 import ( MultiReceiptsDetectorV1, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH from tests.v1.product import get_id, get_version @@ -13,7 +13,7 @@ def test_default_sample(): client = Client() with open( - V1_PRODUCT_DATA_DIR + V1_PRODUCT_PATH / "multi_receipts_detector" / "response_v1" / "default_sample.rst", @@ -22,7 +22,7 @@ def test_default_sample(): rst_ref = rst_file.read() sample = PathInput( - V1_PRODUCT_DATA_DIR / "multi_receipts_detector" / "default_sample.jpg", + V1_PRODUCT_PATH / "multi_receipts_detector" / "default_sample.jpg", ) response = client.parse(MultiReceiptsDetectorV1, sample) doc_response = response.document diff --git a/tests/v1/product/passport/test_passport_v1.py b/tests/v1/product/passport/test_passport_v1.py index f9857cfb..c1703c36 100644 --- a/tests/v1/product/passport/test_passport_v1.py +++ b/tests/v1/product/passport/test_passport_v1.py @@ -8,9 +8,9 @@ from mindee.v1.product.passport.passport_v1_document import ( PassportV1Document, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH -RESPONSE_DIR = V1_PRODUCT_DATA_DIR / "passport" / "response_v1" +RESPONSE_DIR = V1_PRODUCT_PATH / "passport" / "response_v1" PassportV1DocumentType = Document[ PassportV1Document, diff --git a/tests/v1/product/passport/test_passport_v1_regression.py b/tests/v1/product/passport/test_passport_v1_regression.py index ff36f803..7f5d8146 100644 --- a/tests/v1/product/passport/test_passport_v1_regression.py +++ b/tests/v1/product/passport/test_passport_v1_regression.py @@ -3,7 +3,7 @@ from mindee import PathInput from mindee.v1.client import Client from mindee.v1.product.passport import PassportV1 -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH from tests.v1.product import get_id, get_version @@ -11,13 +11,13 @@ def test_default_sample(): client = Client() with open( - V1_PRODUCT_DATA_DIR / "passport" / "response_v1" / "default_sample.rst", + V1_PRODUCT_PATH / "passport" / "response_v1" / "default_sample.rst", encoding="utf-8", ) as rst_file: rst_ref = rst_file.read() sample = PathInput( - V1_PRODUCT_DATA_DIR / "passport" / "default_sample.jpg", + V1_PRODUCT_PATH / "passport" / "default_sample.jpg", ) response = client.parse(PassportV1, sample) doc_response = response.document diff --git a/tests/v1/product/receipt/test_receipt_v5.py b/tests/v1/product/receipt/test_receipt_v5.py index d403a204..cfef64a1 100644 --- a/tests/v1/product/receipt/test_receipt_v5.py +++ b/tests/v1/product/receipt/test_receipt_v5.py @@ -8,9 +8,9 @@ from mindee.v1.product.receipt.receipt_v5_document import ( ReceiptV5Document, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH -RESPONSE_DIR = V1_PRODUCT_DATA_DIR / "expense_receipts" / "response_v5" +RESPONSE_DIR = V1_PRODUCT_PATH / "expense_receipts" / "response_v5" ReceiptV5DocumentType = Document[ ReceiptV5Document, diff --git a/tests/v1/product/receipt/test_receipt_v5_regression.py b/tests/v1/product/receipt/test_receipt_v5_regression.py index 6029d590..ba9b21e8 100644 --- a/tests/v1/product/receipt/test_receipt_v5_regression.py +++ b/tests/v1/product/receipt/test_receipt_v5_regression.py @@ -3,7 +3,7 @@ from mindee import PathInput from mindee.v1.client import Client from mindee.v1.product.receipt.receipt_v5 import ReceiptV5 -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH from tests.v1.product import get_id, get_version @@ -11,13 +11,13 @@ def test_default_sample(): client = Client() with open( - V1_PRODUCT_DATA_DIR / "expense_receipts" / "response_v5" / "default_sample.rst", + V1_PRODUCT_PATH / "expense_receipts" / "response_v5" / "default_sample.rst", encoding="utf-8", ) as rst_file: rst_ref = rst_file.read() sample = PathInput( - V1_PRODUCT_DATA_DIR / "expense_receipts" / "default_sample.jpg", + V1_PRODUCT_PATH / "expense_receipts" / "default_sample.jpg", ) response = client.parse(ReceiptV5, sample) doc_response = response.document diff --git a/tests/v1/product/us/bank_check/test_bank_check_v1.py b/tests/v1/product/us/bank_check/test_bank_check_v1.py index 7789db80..7147ccbe 100644 --- a/tests/v1/product/us/bank_check/test_bank_check_v1.py +++ b/tests/v1/product/us/bank_check/test_bank_check_v1.py @@ -11,9 +11,9 @@ from mindee.v1.product.us.bank_check.bank_check_v1_page import ( BankCheckV1Page, ) -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH -RESPONSE_DIR = V1_PRODUCT_DATA_DIR / "bank_check" / "response_v1" +RESPONSE_DIR = V1_PRODUCT_PATH / "bank_check" / "response_v1" BankCheckV1DocumentType = Document[ BankCheckV1Document, diff --git a/tests/v1/product/us/bank_check/test_bank_check_v1_regression.py b/tests/v1/product/us/bank_check/test_bank_check_v1_regression.py index a8c4287d..3fc19253 100644 --- a/tests/v1/product/us/bank_check/test_bank_check_v1_regression.py +++ b/tests/v1/product/us/bank_check/test_bank_check_v1_regression.py @@ -3,7 +3,7 @@ from mindee import PathInput from mindee.v1.client import Client from mindee.v1.product.us.bank_check.bank_check_v1 import BankCheckV1 -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH from tests.v1.product import get_id, get_version @@ -11,13 +11,13 @@ def test_default_sample(): client = Client() with open( - V1_PRODUCT_DATA_DIR / "bank_check" / "response_v1" / "default_sample.rst", + V1_PRODUCT_PATH / "bank_check" / "response_v1" / "default_sample.rst", encoding="utf-8", ) as rst_file: rst_ref = rst_file.read() sample = PathInput( - V1_PRODUCT_DATA_DIR / "bank_check" / "default_sample.jpg", + V1_PRODUCT_PATH / "bank_check" / "default_sample.jpg", ) response = client.parse(BankCheckV1, sample) doc_response = response.document diff --git a/tests/v1/test_cli.py b/tests/v1/test_cli.py index 9ad74c7e..9ac30071 100644 --- a/tests/v1/test_cli.py +++ b/tests/v1/test_cli.py @@ -5,7 +5,7 @@ from mindee.error.mindee_http_error import MindeeHTTPError from mindee.v1.commands import MindeeParser -from tests.utils import FILE_TYPES_DIR, V1_PRODUCT_DATA_DIR, clear_envvars +from tests.utils import FILE_TYPES_PATH, V1_PRODUCT_PATH, clear_envvars @pytest.fixture @@ -22,7 +22,7 @@ def custom_doc(monkeypatch): input_type="path", output_type="summary", include_words=False, - path=FILE_TYPES_DIR / "pdf" / "blank.pdf", + path=FILE_TYPES_PATH / "pdf" / "blank.pdf", parse_type="parse", async_parse=False, ) @@ -42,7 +42,7 @@ def generated_doc_sync(monkeypatch): input_type="path", output_type="summary", include_words=False, - path=FILE_TYPES_DIR / "pdf" / "blank.pdf", + path=FILE_TYPES_PATH / "pdf" / "blank.pdf", parse_type="parse", async_parse=False, ) @@ -62,7 +62,7 @@ def generated_doc_async(monkeypatch): input_type="path", output_type="summary", include_words=False, - path=FILE_TYPES_DIR / "pdf" / "blank.pdf", + path=FILE_TYPES_PATH / "pdf" / "blank.pdf", parse_type="parse", async_parse=True, ) @@ -79,7 +79,7 @@ def ots_doc(monkeypatch): input_type="path", output_type="summary", include_words=False, - path=V1_PRODUCT_DATA_DIR / "invoices" / "invoice.pdf", + path=V1_PRODUCT_PATH / "invoices" / "invoice.pdf", parse_type="parse", async_parse=False, ) @@ -95,7 +95,7 @@ def ots_doc_enqueue_and_parse(monkeypatch): doc_pages=3, input_type="path", include_words=False, - path=V1_PRODUCT_DATA_DIR / "invoice_splitter" / "default_sample.pdf", + path=V1_PRODUCT_PATH / "invoice_splitter" / "default_sample.pdf", parse_type="parse", async_parse=True, ) @@ -115,7 +115,7 @@ def ots_doc_feedback(monkeypatch): queue_id="dummy-queue-id", call_method="parse-queued", input_type="path", - path=FILE_TYPES_DIR / "pdf" / "blank.pdf", + path=FILE_TYPES_PATH / "pdf" / "blank.pdf", parse_type="feedback", feedback=json.loads(dummy_feedback), ) diff --git a/tests/v1/test_client.py b/tests/v1/test_client.py index def0a66b..65e76dfa 100644 --- a/tests/v1/test_client.py +++ b/tests/v1/test_client.py @@ -21,9 +21,9 @@ from mindee.v1.product.invoice_splitter.invoice_splitter_v1 import InvoiceSplitterV1 from mindee.v1.product.receipt.receipt_v5 import ReceiptV5 from tests.utils import ( - FILE_TYPES_DIR, - V1_ERROR_DATA_DIR, - V1_PRODUCT_DATA_DIR, + FILE_TYPES_PATH, + V1_ERROR_PATH, + V1_PRODUCT_PATH, clear_envvars, dummy_envvars, ) @@ -47,24 +47,24 @@ def dummy_client() -> Client: def test_parse_path_without_token(empty_client: Client): - input_doc = PathInput(FILE_TYPES_DIR / "pdf" / "blank.pdf") + input_doc = PathInput(FILE_TYPES_PATH / "pdf" / "blank.pdf") with pytest.raises(RuntimeError): empty_client.parse(product.ReceiptV5, input_doc) def test_parse_path_with_env_token(env_client: Client): - input_doc = PathInput(FILE_TYPES_DIR / "pdf" / "blank.pdf") + input_doc = PathInput(FILE_TYPES_PATH / "pdf" / "blank.pdf") with pytest.raises(MindeeHTTPError): env_client.parse(product.ReceiptV5, input_doc) def test_parse_path_with_wrong_filetype(dummy_client: Client): with pytest.raises(AssertionError): - PathInput(FILE_TYPES_DIR / "receipt.jpga") + PathInput(FILE_TYPES_PATH / "receipt.jpga") def test_parse_path_with_wrong_token(dummy_client: Client): - input_doc = PathInput(FILE_TYPES_DIR / "pdf" / "blank.pdf") + input_doc = PathInput(FILE_TYPES_PATH / "pdf" / "blank.pdf") with pytest.raises(MindeeHTTPError): dummy_client.parse(product.ReceiptV5, input_doc) @@ -85,13 +85,13 @@ def test_interface_version(dummy_client: Client): account_name="dummy", version="1.1", ) - input_doc = PathInput(FILE_TYPES_DIR / "receipt.jpg") + input_doc = PathInput(FILE_TYPES_PATH / "receipt.jpg") with pytest.raises(MindeeHTTPError): dummy_client.parse(product.CustomV1, input_doc, endpoint=dummy_endpoint) def test_keep_file_open(dummy_client: Client): - input_doc: LocalInputSource = PathInput(f"{FILE_TYPES_DIR}/receipt.jpg") + input_doc: LocalInputSource = PathInput(f"{FILE_TYPES_PATH}/receipt.jpg") with contextlib.suppress(MindeeHTTPError): dummy_client.parse(product.ReceiptV5, input_doc, close_file=False) assert not input_doc.file_object.closed @@ -101,7 +101,7 @@ def test_keep_file_open(dummy_client: Client): @pytest.mark.pypdfium2 def test_cut_options(dummy_client: Client): - input_doc: LocalInputSource = PathInput(f"{FILE_TYPES_DIR}/pdf/multipage.pdf") + input_doc: LocalInputSource = PathInput(f"{FILE_TYPES_PATH}/pdf/multipage.pdf") with contextlib.suppress(MindeeHTTPError): dummy_client.parse( ReceiptV5, @@ -113,7 +113,7 @@ def test_cut_options(dummy_client: Client): def test_async_wrong_initial_delay(dummy_client: Client): - input_doc = PathInput(FILE_TYPES_DIR / "pdf" / "blank.pdf") + input_doc = PathInput(FILE_TYPES_PATH / "pdf" / "blank.pdf") with pytest.raises(MindeeClientError): dummy_client.enqueue_and_parse( InvoiceSplitterV1, input_doc, initial_delay_sec=0 @@ -121,23 +121,17 @@ def test_async_wrong_initial_delay(dummy_client: Client): def test_async_wrong_polling_delay(dummy_client: Client): - input_doc = PathInput(FILE_TYPES_DIR / "pdf" / "blank.pdf") + input_doc = PathInput(FILE_TYPES_PATH / "pdf" / "blank.pdf") with pytest.raises(MindeeClientError): dummy_client.enqueue_and_parse(InvoiceSplitterV1, input_doc, delay_sec=0) def test_local_response_from_sync_json(dummy_client: Client): input_file = LocalResponse( - V1_PRODUCT_DATA_DIR - / "multi_receipts_detector" - / "response_v1" - / "complete.json" + V1_PRODUCT_PATH / "multi_receipts_detector" / "response_v1" / "complete.json" ) with open( - V1_PRODUCT_DATA_DIR - / "multi_receipts_detector" - / "response_v1" - / "summary_full.rst" + V1_PRODUCT_PATH / "multi_receipts_detector" / "response_v1" / "summary_full.rst" ) as f: reference_doc = f.read() result = dummy_client.load_prediction(MultiReceiptsDetectorV1, input_file) @@ -147,10 +141,10 @@ def test_local_response_from_sync_json(dummy_client: Client): def test_local_response_from_async_json(dummy_client: Client): input_file = LocalResponse( - V1_PRODUCT_DATA_DIR / "international_id" / "response_v2" / "complete.json" + V1_PRODUCT_PATH / "international_id" / "response_v2" / "complete.json" ) with open( - V1_PRODUCT_DATA_DIR / "international_id" / "response_v2" / "summary_full.rst" + V1_PRODUCT_PATH / "international_id" / "response_v2" / "summary_full.rst" ) as f: reference_doc = f.read() result = dummy_client.load_prediction(InternationalIdV2, input_file) @@ -160,13 +154,13 @@ def test_local_response_from_async_json(dummy_client: Client): def test_local_response_from_invalid_file(dummy_client: Client): local_response = LocalResponse( - V1_PRODUCT_DATA_DIR / "invoices" / "response_v4" / "summary_full.rst" + V1_PRODUCT_PATH / "invoices" / "response_v4" / "summary_full.rst" ) with pytest.raises(MindeeError): print(local_response.as_dict) def test_local_response_from_invalid_dict(dummy_client: Client): - input_file = LocalResponse(V1_ERROR_DATA_DIR / "error_400_no_details.json") + input_file = LocalResponse(V1_ERROR_PATH / "error_400_no_details.json") with pytest.raises(MindeeError): dummy_client.load_prediction(InvoiceV4, input_file) diff --git a/tests/v1/workflows/test_workflow.py b/tests/v1/workflows/test_workflow.py index 1667afdd..31847d8e 100644 --- a/tests/v1/workflows/test_workflow.py +++ b/tests/v1/workflows/test_workflow.py @@ -4,9 +4,9 @@ from mindee.v1.parsing.common import WorkflowResponse from mindee.v1.product.generated import GeneratedV1 -from tests.utils import V1_DATA_DIR +from tests.utils import V1_RESOURCE_PATH -WORKFLOW_DIR = V1_DATA_DIR / "workflows" +WORKFLOW_DIR = V1_RESOURCE_PATH / "workflows" @pytest.fixture diff --git a/tests/v1/workflows/test_workflow_integration.py b/tests/v1/workflows/test_workflow_integration.py index 00544a9c..c5beb415 100644 --- a/tests/v1/workflows/test_workflow_integration.py +++ b/tests/v1/workflows/test_workflow_integration.py @@ -8,7 +8,7 @@ from mindee.v1.client_options.workflow_options import WorkflowOptions from mindee.v1.parsing.common import ExecutionPriority from mindee.v1.product import FinancialDocumentV1, GeneratedV1 -from tests.utils import V1_PRODUCT_DATA_DIR +from tests.utils import V1_PRODUCT_PATH @pytest.fixture @@ -23,7 +23,7 @@ def workflow_id(): @pytest.fixture def input_path(): - return V1_PRODUCT_DATA_DIR / "financial_document" / "default_sample.jpg" + return V1_PRODUCT_PATH / "financial_document" / "default_sample.jpg" @pytest.mark.integration diff --git a/tests/v2/file_operations/test_crop_operation.py b/tests/v2/file_operations/test_crop_operation.py index 0f5d1b22..553f554e 100644 --- a/tests/v2/file_operations/test_crop_operation.py +++ b/tests/v2/file_operations/test_crop_operation.py @@ -8,7 +8,7 @@ from mindee.v2.product.crop.crop_response import ( CropResponse, ) -from tests.utils import V2_PRODUCT_DATA_DIR +from tests.utils import V2_PRODUCT_PATH Image = pytest.importorskip("PIL.Image") @@ -16,8 +16,8 @@ @pytest.mark.pillow @pytest.mark.pypdfium2 def test_single_page_crop(): - input_sample = PathInput(V2_PRODUCT_DATA_DIR / "crop" / "default_sample.jpg") - with open(V2_PRODUCT_DATA_DIR / "crop" / "default_sample.json", "rb") as f: + input_sample = PathInput(V2_PRODUCT_PATH / "crop" / "default_sample.jpg") + with open(V2_PRODUCT_PATH / "crop" / "default_sample.json", "rb") as f: response = CropResponse(json.load(f)) extracted_crops = response.inference.result.extract_from_input_source(input_sample) assert len(extracted_crops) == 2 @@ -38,8 +38,8 @@ def test_single_page_crop(): @pytest.mark.pillow @pytest.mark.pypdfium2 def test_multi_page_crop(): - input_sample = PathInput(V2_PRODUCT_DATA_DIR / "crop" / "multipage_sample.pdf") - with open(V2_PRODUCT_DATA_DIR / "crop" / "multipage_sample.json", "rb") as f: + input_sample = PathInput(V2_PRODUCT_PATH / "crop" / "multipage_sample.pdf") + with open(V2_PRODUCT_PATH / "crop" / "multipage_sample.json", "rb") as f: response = CropResponse(json.load(f)) extracted_crops = response.inference.result.extract_from_input_source(input_sample) assert len(extracted_crops) == 5 diff --git a/tests/v2/file_operations/test_crop_operation_integration.py b/tests/v2/file_operations/test_crop_operation_integration.py index 1ea8623b..12100af1 100644 --- a/tests/v2/file_operations/test_crop_operation_integration.py +++ b/tests/v2/file_operations/test_crop_operation_integration.py @@ -12,7 +12,7 @@ from mindee.input.path_input import PathInput from mindee.v2.client import Client from mindee.v2.file_operations.crop import extract_multiple_crops -from tests.utils import OUTPUT_DIR, V2_PRODUCT_DATA_DIR, cleanup_output_files +from tests.utils import OUTPUT_PATH, V2_PRODUCT_PATH, cleanup_output_files def check_findoc_return(findoc_response: ExtractionResponse): @@ -31,7 +31,7 @@ def check_findoc_return(findoc_response: ExtractionResponse): @pytest.mark.integration def test_image_should_extract_crops(): client = Client() - crop_input = PathInput(V2_PRODUCT_DATA_DIR / "crop" / "default_sample.jpg") + crop_input = PathInput(V2_PRODUCT_PATH / "crop" / "default_sample.jpg") response = client.enqueue_and_get_result( CropResponse, crop_input, @@ -55,9 +55,9 @@ def test_image_should_extract_crops(): ), ) check_findoc_return(invoice_0) - extracted_crops.save_all_to_disk(OUTPUT_DIR) - crop0_size = os.path.getsize(OUTPUT_DIR / output_files[0]) - crop1_size = os.path.getsize(OUTPUT_DIR / output_files[1]) + extracted_crops.save_all_to_disk(OUTPUT_PATH) + crop0_size = os.path.getsize(OUTPUT_PATH / output_files[0]) + crop1_size = os.path.getsize(OUTPUT_PATH / output_files[1]) assert 180000 <= crop0_size <= 230000 assert 190000 <= crop1_size <= 230000 diff --git a/tests/v2/file_operations/test_split_operation.py b/tests/v2/file_operations/test_split_operation.py index 3d754a4e..aaffae1c 100644 --- a/tests/v2/file_operations/test_split_operation.py +++ b/tests/v2/file_operations/test_split_operation.py @@ -6,28 +6,28 @@ from mindee.v2.product.split.split_response import ( SplitResponse, ) -from tests.utils import V2_PRODUCT_DATA_DIR +from tests.utils import V2_PRODUCT_PATH @pytest.fixture def splits_5p(): - return V2_PRODUCT_DATA_DIR / "split" / "invoice_5p.pdf" + return V2_PRODUCT_PATH / "split" / "invoice_5p.pdf" @pytest.fixture def splits_single_page_json_path(): - return V2_PRODUCT_DATA_DIR / "split" / "split_single.json" + return V2_PRODUCT_PATH / "split" / "split_single.json" @pytest.fixture def splits_multi_page_json_path(): - return V2_PRODUCT_DATA_DIR / "split" / "split_multiple.json" + return V2_PRODUCT_PATH / "split" / "split_multiple.json" @pytest.mark.pypdfium2 def test_default_split(): - input_sample = PathInput(V2_PRODUCT_DATA_DIR / "split" / "default_sample.pdf") - with open(V2_PRODUCT_DATA_DIR / "split" / "default_sample.json", "rb") as f: + input_sample = PathInput(V2_PRODUCT_PATH / "split" / "default_sample.pdf") + with open(V2_PRODUCT_PATH / "split" / "default_sample.json", "rb") as f: response = SplitResponse(json.load(f)) extracted_splits = response.inference.result.extract_from_input_source(input_sample) assert len(extracted_splits) == 2 diff --git a/tests/v2/file_operations/test_split_operation_integration.py b/tests/v2/file_operations/test_split_operation_integration.py index 9e3266e3..803d102e 100644 --- a/tests/v2/file_operations/test_split_operation_integration.py +++ b/tests/v2/file_operations/test_split_operation_integration.py @@ -10,7 +10,7 @@ ) from mindee.input.path_input import PathInput from mindee.v2.client import Client -from tests.utils import OUTPUT_DIR, V2_PRODUCT_DATA_DIR, cleanup_output_files +from tests.utils import OUTPUT_PATH, V2_PRODUCT_PATH, cleanup_output_files def check_findoc_return(findoc_response: ExtractionResponse): @@ -28,7 +28,7 @@ def check_findoc_return(findoc_response: ExtractionResponse): @pytest.mark.integration def test_pdf_should_extract_splits(): client = Client() - split_input = PathInput(V2_PRODUCT_DATA_DIR / "split" / "default_sample.pdf") + split_input = PathInput(V2_PRODUCT_PATH / "split" / "default_sample.pdf") response = client.enqueue_and_get_result( SplitResponse, split_input, @@ -53,9 +53,9 @@ def test_pdf_should_extract_splits(): ), ) check_findoc_return(invoice_0) - extracted_splits.save_all_to_disk(OUTPUT_DIR) + extracted_splits.save_all_to_disk(OUTPUT_PATH) for i in range(len(extracted_splits)): - local_input = PathInput(OUTPUT_DIR / output_files[i]) + local_input = PathInput(OUTPUT_PATH / output_files[i]) try: assert local_input.page_count == extracted_splits[i].page_count finally: diff --git a/tests/v2/input/test_inference_parameters.py b/tests/v2/input/test_inference_parameters.py index 93c54e45..9c965d87 100644 --- a/tests/v2/input/test_inference_parameters.py +++ b/tests/v2/input/test_inference_parameters.py @@ -6,10 +6,10 @@ from mindee.v2.product.extraction.params.data_schema import DataSchema from mindee.v2.product.extraction.params.data_schema_field import DataSchemaField from mindee.v2.product.extraction.params.data_schema_replace import DataSchemaReplace -from tests.utils import V2_PRODUCT_DATA_DIR +from tests.utils import V2_PRODUCT_PATH expected_data_schema_dict = json.loads( - (V2_PRODUCT_DATA_DIR / "extraction" / "data_schema_replace_param.json").read_text() + (V2_PRODUCT_PATH / "extraction" / "data_schema_replace_param.json").read_text() ) expected_data_schema_str = json.dumps( expected_data_schema_dict, indent=None, sort_keys=True diff --git a/tests/v2/input/test_local_response.py b/tests/v2/input/test_local_response.py index eff46b5b..2abc2fb7 100644 --- a/tests/v2/input/test_local_response.py +++ b/tests/v2/input/test_local_response.py @@ -4,12 +4,12 @@ from mindee import ExtractionResponse from mindee.input import LocalResponse -from tests.utils import V2_PRODUCT_DATA_DIR +from tests.utils import V2_PRODUCT_PATH @pytest.fixture def file_path() -> Path: - return V2_PRODUCT_DATA_DIR / "extraction" / "standard_field_types.json" + return V2_PRODUCT_PATH / "extraction" / "standard_field_types.json" def _assert_local_response(local_response): diff --git a/tests/v2/parsing/test_error_response.py b/tests/v2/parsing/test_error_response.py new file mode 100644 index 00000000..35102713 --- /dev/null +++ b/tests/v2/parsing/test_error_response.py @@ -0,0 +1,21 @@ +import pytest + +from mindee import LocalResponse +from mindee.v2.parsing import ErrorResponse +from tests.utils import V2_RESOURCE_PATH + + +@pytest.mark.v2 +def test_rst_output_must_be_valid(): + """should load and pretty print an error response""" + + local_response = LocalResponse( + V2_RESOURCE_PATH / "errors/error_422_invalid_fields.json" + ) + response = local_response.deserialize_response(ErrorResponse) + + with open(V2_RESOURCE_PATH / "errors/error_422_invalid_fields.rst") as rst_file: + rst_output = rst_file.read() + + assert response + assert str(response) == rst_output diff --git a/tests/v2/parsing/test_failed_inference_response.py b/tests/v2/parsing/test_failed_inference_response.py index a6539f2a..21ba1b74 100644 --- a/tests/v2/parsing/test_failed_inference_response.py +++ b/tests/v2/parsing/test_failed_inference_response.py @@ -4,14 +4,14 @@ import pytest from mindee.v2.parsing import FailedInferenceResponse -from tests.utils import V2_DATA_DIR +from tests.utils import V2_RESOURCE_PATH @pytest.mark.v2 def test_should_load_when_failed(): """Should load when the webhook didn't return a correct reply.""" - json_path = V2_DATA_DIR / "errors" / "webhook_error_500_failed.json" + json_path = V2_RESOURCE_PATH / "errors" / "webhook_error_500_failed.json" with json_path.open("r", encoding="utf-8") as fh: json_sample = json.load(fh) response = FailedInferenceResponse(json_sample) diff --git a/tests/v2/parsing/test_job_response.py b/tests/v2/parsing/test_job_response.py index 97f0d221..ea9d5b0d 100644 --- a/tests/v2/parsing/test_job_response.py +++ b/tests/v2/parsing/test_job_response.py @@ -6,11 +6,11 @@ from mindee import JobResponse from mindee.v2.parsing.error.error_item import ErrorItem from mindee.v2.parsing.error.error_response import ErrorResponse -from tests.utils import V2_DATA_DIR +from tests.utils import V2_RESOURCE_PATH def _get_job_samples(json_file: str) -> dict: - json_path = V2_DATA_DIR / "job" / json_file + json_path = V2_RESOURCE_PATH / "job" / json_file with json_path.open("r", encoding="utf-8") as fh: json_sample = json.load(fh) return json_sample diff --git a/tests/v2/product/classification/test_classification_integration.py b/tests/v2/product/classification/test_classification_integration.py index b1300a92..da004023 100644 --- a/tests/v2/product/classification/test_classification_integration.py +++ b/tests/v2/product/classification/test_classification_integration.py @@ -5,7 +5,7 @@ from mindee.input.path_input import PathInput from mindee.v2 import ClassificationParameters, ClassificationResponse from mindee.v2.client import Client -from tests.utils import V2_PRODUCT_DATA_DIR +from tests.utils import V2_PRODUCT_PATH @pytest.fixture(scope="session") @@ -22,9 +22,7 @@ def v2_client() -> Client: @pytest.mark.integration @pytest.mark.v2 def test_classification_default_sample(v2_client: Client, classification_model_id: str): - input_source = PathInput( - V2_PRODUCT_DATA_DIR / "classification" / "default_sample.jpg" - ) + input_source = PathInput(V2_PRODUCT_PATH / "classification" / "default_sample.jpg") response = v2_client.enqueue_and_get_result( ClassificationResponse, input_source, diff --git a/tests/v2/product/crop/test_crop_integration.py b/tests/v2/product/crop/test_crop_integration.py index 227d2e22..f84ea197 100644 --- a/tests/v2/product/crop/test_crop_integration.py +++ b/tests/v2/product/crop/test_crop_integration.py @@ -5,7 +5,7 @@ from mindee.input.path_input import PathInput from mindee.v2 import CropParameters, CropResponse from mindee.v2.client import Client -from tests.utils import V2_PRODUCT_DATA_DIR +from tests.utils import V2_PRODUCT_PATH @pytest.fixture(scope="session") @@ -22,7 +22,7 @@ def v2_client() -> Client: @pytest.mark.integration @pytest.mark.v2 def test_crop_default_sample(v2_client: Client, crop_model_id: str): - input_source = PathInput(V2_PRODUCT_DATA_DIR / "crop" / "default_sample.jpg") + input_source = PathInput(V2_PRODUCT_PATH / "crop" / "default_sample.jpg") response = v2_client.enqueue_and_get_result( CropResponse, input_source, CropParameters(crop_model_id) ) diff --git a/tests/v2/product/extraction/test_extraction_response.py b/tests/v2/product/extraction/test_extraction_response.py index 6fbfb55b..8da8aec2 100644 --- a/tests/v2/product/extraction/test_extraction_response.py +++ b/tests/v2/product/extraction/test_extraction_response.py @@ -15,7 +15,7 @@ from mindee.v2.parsing.inference.inference_model import InferenceModel from mindee.v2.parsing.inference.rag_metadata import RAGMetadata from mindee.v2.product.extraction.extraction_inference import ExtractionInference -from tests.utils import V2_PRODUCT_DATA_DIR +from tests.utils import V2_PRODUCT_PATH from tests.v2.product.utils import get_product_samples @@ -334,7 +334,7 @@ def test_text_context_field_is_false() -> None: @pytest.mark.v2 def test_text_context_field_is_true() -> None: - with open(V2_PRODUCT_DATA_DIR / "extraction" / "text_context_enabled.json") as file: + with open(V2_PRODUCT_PATH / "extraction" / "text_context_enabled.json") as file: json_sample = json.load(file) response = ExtractionResponse(json_sample) assert isinstance(response.inference.active_options, InferenceActiveOptions) diff --git a/tests/v2/product/ocr/test_ocr_integration.py b/tests/v2/product/ocr/test_ocr_integration.py index 669285db..7fb0b6bd 100644 --- a/tests/v2/product/ocr/test_ocr_integration.py +++ b/tests/v2/product/ocr/test_ocr_integration.py @@ -6,7 +6,7 @@ from mindee.v2 import OCRParameters, OCRResponse from mindee.v2.client import Client from mindee.v2.product.ocr import OCRInference, OCRResult -from tests.utils import V2_PRODUCT_DATA_DIR +from tests.utils import V2_PRODUCT_PATH @pytest.fixture(scope="session") @@ -23,7 +23,7 @@ def v2_client() -> Client: @pytest.mark.integration @pytest.mark.v2 def test_ocr_default_sample(v2_client: Client, ocr_model_id: str): - input_source = PathInput(V2_PRODUCT_DATA_DIR / "ocr" / "default_sample.jpg") + input_source = PathInput(V2_PRODUCT_PATH / "ocr" / "default_sample.jpg") response = v2_client.enqueue_and_get_result( OCRResponse, input_source, OCRParameters(ocr_model_id) ) diff --git a/tests/v2/product/split/test_split_integration.py b/tests/v2/product/split/test_split_integration.py index 7e053597..0a9c03ae 100644 --- a/tests/v2/product/split/test_split_integration.py +++ b/tests/v2/product/split/test_split_integration.py @@ -5,7 +5,7 @@ from mindee.input.path_input import PathInput from mindee.v2 import SplitParameters, SplitResponse from mindee.v2.client import Client -from tests.utils import V2_PRODUCT_DATA_DIR +from tests.utils import V2_PRODUCT_PATH @pytest.fixture(scope="session") @@ -22,7 +22,7 @@ def v2_client() -> Client: @pytest.mark.integration @pytest.mark.v2 def test_split_default_sample(v2_client: Client, split_model_id: str): - input_source = PathInput(V2_PRODUCT_DATA_DIR / "split" / "default_sample.pdf") + input_source = PathInput(V2_PRODUCT_PATH / "split" / "default_sample.pdf") response = v2_client.enqueue_and_get_result( SplitResponse, input_source, SplitParameters(split_model_id) ) diff --git a/tests/v2/product/utils.py b/tests/v2/product/utils.py index 57029648..5a13c78d 100644 --- a/tests/v2/product/utils.py +++ b/tests/v2/product/utils.py @@ -1,7 +1,7 @@ import json from pathlib import Path -from tests.utils import V2_PRODUCT_DATA_DIR +from tests.utils import V2_PRODUCT_PATH def get_samples(json_path: Path, rst_path: Path) -> tuple[dict, str]: @@ -16,6 +16,6 @@ def get_samples(json_path: Path, rst_path: Path) -> tuple[dict, str]: def get_product_samples(product: str, file_name: str) -> tuple[dict, str]: - json_path = V2_PRODUCT_DATA_DIR / product / f"{file_name}.json" - rst_path = V2_PRODUCT_DATA_DIR / product / f"{file_name}.rst" + json_path = V2_PRODUCT_PATH / product / f"{file_name}.json" + rst_path = V2_PRODUCT_PATH / product / f"{file_name}.rst" return get_samples(json_path, rst_path) diff --git a/tests/v2/search/test_model_search.py b/tests/v2/search/test_model_search.py index 9b08d4dd..4bc92708 100644 --- a/tests/v2/search/test_model_search.py +++ b/tests/v2/search/test_model_search.py @@ -2,12 +2,12 @@ from mindee.input import LocalResponse from mindee.v2.search.models.model_search_response import ModelSearchResponse -from tests.utils import V2_DATA_DIR +from tests.utils import V2_RESOURCE_PATH @pytest.mark.v2 def test_should_load_search_models_locally(): - file_path = V2_DATA_DIR / "search" / "models.json" + file_path = V2_RESOURCE_PATH / "search" / "models.json" local_response = LocalResponse(file_path) response = local_response.deserialize_response(ModelSearchResponse) diff --git a/tests/v2/search/test_rag_document_search.py b/tests/v2/search/test_rag_document_search.py index 5cadfb93..3aafc26b 100644 --- a/tests/v2/search/test_rag_document_search.py +++ b/tests/v2/search/test_rag_document_search.py @@ -6,12 +6,12 @@ from mindee.v2.search.rag_documents.rag_document_search_response import ( RagDocumentSearchResponse, ) -from tests.utils import V2_DATA_DIR +from tests.utils import V2_RESOURCE_PATH @pytest.mark.v2 def test_should_load_search_rag_documents_locally(): - file_path = V2_DATA_DIR / "search" / "rag_documents.json" + file_path = V2_RESOURCE_PATH / "search" / "rag_documents.json" local_response = LocalResponse(file_path) response = local_response.deserialize_response(RagDocumentSearchResponse) diff --git a/tests/v2/test_cli.py b/tests/v2/test_cli.py index cb234b95..71dceb51 100644 --- a/tests/v2/test_cli.py +++ b/tests/v2/test_cli.py @@ -11,7 +11,7 @@ OutputType, SplitCommand, ) -from tests.utils import V2_PRODUCT_DATA_DIR, clear_envvars +from tests.utils import V2_PRODUCT_PATH, clear_envvars @pytest.fixture @@ -190,10 +190,7 @@ def test_v1_group_dispatches_to_v1_product(parser: MindeeParser): "--output-type", "summary", str( - V2_PRODUCT_DATA_DIR - / "extraction" - / "financial_document" - / "complete.json" + V2_PRODUCT_PATH / "extraction" / "financial_document" / "complete.json" ), ] ) diff --git a/tests/v2/test_client.py b/tests/v2/test_client.py index cf62b691..edb1dfd3 100644 --- a/tests/v2/test_client.py +++ b/tests/v2/test_client.py @@ -22,7 +22,12 @@ from mindee.v2.parsing.job.job import Job from mindee.v2.parsing.job.job_response import JobResponse from mindee.v2.product.extraction.extraction_inference import ExtractionInference -from tests.utils import FILE_TYPES_DIR, V2_DATA_DIR, V2_PRODUCT_DATA_DIR, dummy_envvars +from tests.utils import ( + FILE_TYPES_PATH, + V2_PRODUCT_PATH, + V2_RESOURCE_PATH, + dummy_envvars, +) # --- Fixtures & Helper Utilities --- @@ -47,21 +52,19 @@ def dummy_url_client(monkeypatch) -> Client: @pytest.fixture def findoc_json() -> dict: - data_file = ( - V2_PRODUCT_DATA_DIR / "extraction" / "financial_document" / "complete.json" - ) + data_file = V2_PRODUCT_PATH / "extraction" / "financial_document" / "complete.json" return json.loads(data_file.read_text(encoding="utf-8")) @pytest.fixture def job_processing_json() -> dict: - data_file = V2_DATA_DIR / "job" / "ok_processing.json" + data_file = V2_RESOURCE_PATH / "job" / "ok_processing.json" return json.loads(data_file.read_text(encoding="utf-8")) @pytest.fixture def job_fail_422_json() -> dict: - data_file = V2_DATA_DIR / "job" / "fail_422.json" + data_file = V2_RESOURCE_PATH / "job" / "fail_422.json" return json.loads(data_file.read_text(encoding="utf-8")) @@ -96,7 +99,7 @@ def test_enqueue_path_with_env_token(dummy_url_client, job_fail_422_json): assert dummy_url_client.mindee_api.base_headers["Authorization"] == "dummy" assert dummy_url_client.mindee_api.base_headers["User-Agent"] == USER_AGENT - input_doc: LocalInputSource = PathInput(f"{FILE_TYPES_DIR}/receipt.jpg") + input_doc: LocalInputSource = PathInput(f"{FILE_TYPES_PATH}/receipt.jpg") with pytest.raises(MindeeHTTPErrorV2): dummy_url_client.enqueue(input_doc, ExtractionParameters("dummy-model")) @@ -109,7 +112,7 @@ def test_enqueue_and_parse_path_with_env_token(dummy_url_client, job_fail_422_js json=job_fail_422_json, ) - input_doc: LocalInputSource = PathInput(f"{FILE_TYPES_DIR}/receipt.jpg") + input_doc: LocalInputSource = PathInput(f"{FILE_TYPES_PATH}/receipt.jpg") with pytest.raises(MindeeHTTPErrorV2): dummy_url_client.enqueue_and_get_result( ExtractionResponse, @@ -119,7 +122,7 @@ def test_enqueue_and_parse_path_with_env_token(dummy_url_client, job_fail_422_js text_context="ignore this message", data_schema=json.loads( ( - V2_PRODUCT_DATA_DIR + V2_PRODUCT_PATH / "extraction" / "data_schema_replace_param.json" ).read_text() @@ -131,7 +134,7 @@ def test_enqueue_and_parse_path_with_env_token(dummy_url_client, job_fail_422_js @pytest.mark.v2 def test_loads_from_prediction(): input_inference = LocalResponse( - V2_PRODUCT_DATA_DIR / "extraction" / "financial_document" / "complete.json" + V2_PRODUCT_PATH / "extraction" / "financial_document" / "complete.json" ) response = input_inference.deserialize_response(ExtractionResponse) _assert_findoc_inference(response) @@ -186,7 +189,7 @@ def test_error_handling(dummy_url_client): with pytest.raises(MindeeHTTPErrorV2) as e: dummy_url_client.enqueue( PathInput( - V2_PRODUCT_DATA_DIR + V2_PRODUCT_PATH / "extraction" / "financial_document" / "default_sample.jpg" @@ -208,7 +211,7 @@ def test_error_handling_non_json_response(env_client): with pytest.raises(MindeeHTTPUnknownErrorV2) as e: env_client.enqueue( PathInput( - V2_PRODUCT_DATA_DIR + V2_PRODUCT_PATH / "extraction" / "financial_document" / "default_sample.jpg" @@ -258,10 +261,12 @@ def test_client_closes_httpx_connections() -> None: @respx.mock def test_httpx_multiple_calls_thread_safety() -> None: client = Client(api_key="dummy_key") - input_path = FILE_TYPES_DIR / "pdf" / "blank_1.pdf" + input_path = FILE_TYPES_PATH / "pdf" / "blank_1.pdf" def delayed_response(_: httpx.Request) -> httpx.Response: - job_json = json.loads((V2_DATA_DIR / "job" / "ok_processing.json").read_text()) + job_json = json.loads( + (V2_RESOURCE_PATH / "job" / "ok_processing.json").read_text() + ) time.sleep(0.1) return httpx.Response(201, json=job_json) @@ -297,7 +302,7 @@ def test_explicit_timeout_failure(findoc_model_id) -> None: ) client = Client(api_key="dummy") - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "blank_1.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "blank_1.pdf") params = ExtractionParameters(model_id=findoc_model_id) with pytest.raises(httpx.ReadTimeout): @@ -315,7 +320,7 @@ def test_explicit_500_server_error(findoc_model_id: str) -> None: ) client = Client(api_key="dummy") - input_source = PathInput(FILE_TYPES_DIR / "pdf" / "blank_1.pdf") + input_source = PathInput(FILE_TYPES_PATH / "pdf" / "blank_1.pdf") params = ExtractionParameters(model_id=findoc_model_id) with pytest.raises(MindeeHTTPUnknownErrorV2) as exc_info: client.enqueue(input_source, params) diff --git a/tests/v2/test_client_integration.py b/tests/v2/test_client_integration.py index 1d9cd18b..fd477ba5 100644 --- a/tests/v2/test_client_integration.py +++ b/tests/v2/test_client_integration.py @@ -13,7 +13,7 @@ ) from mindee.v2.parsing import InferenceActiveOptions from mindee.v2.product.extraction.extraction_response import ExtractionResponse -from tests.utils import FILE_TYPES_DIR, V2_PRODUCT_DATA_DIR +from tests.utils import FILE_TYPES_PATH, V2_PRODUCT_PATH @pytest.fixture(scope="session") @@ -46,7 +46,7 @@ def test_parse_file_empty_multiple_pages_must_succeed( Upload a 2-page almost blank PDF and make sure the returned inference contains the file & model metadata. """ - input_path: Path = FILE_TYPES_DIR / "pdf" / "multipage_cut-2.pdf" + input_path: Path = FILE_TYPES_PATH / "pdf" / "multipage_cut-2.pdf" input_source = PathInput(input_path) params = ExtractionParameters( @@ -88,7 +88,7 @@ def test_parse_file_empty_single_page_options_must_succeed( """ Upload a blank PDF and make sure the options are set correctly. """ - input_path: Path = FILE_TYPES_DIR / "pdf" / "blank_1.pdf" + input_path: Path = FILE_TYPES_PATH / "pdf" / "blank_1.pdf" input_source = PathInput(input_path) params = ExtractionParameters( @@ -124,7 +124,7 @@ def test_parse_file_filled_single_page_must_succeed( Upload a filled single-page JPEG and verify that common fields are present. """ input_path: Path = ( - V2_PRODUCT_DATA_DIR / "extraction" / "financial_document" / "default_sample.jpg" + V2_PRODUCT_PATH / "extraction" / "financial_document" / "default_sample.jpg" ) input_source = PathInput(input_path) @@ -172,7 +172,7 @@ def test_invalid_uuid_must_throw_error(v2_client: Client) -> None: """ Using an invalid model identifier must trigger a 422 HTTP error. """ - input_path: Path = FILE_TYPES_DIR / "pdf" / "blank_1.pdf" + input_path: Path = FILE_TYPES_PATH / "pdf" / "blank_1.pdf" input_source = PathInput(input_path) params = ExtractionParameters( @@ -195,7 +195,7 @@ def test_unknown_model_must_throw_error(v2_client: Client) -> None: """ Using an unknown model identifier must trigger a 404 HTTP error. """ - input_path: Path = FILE_TYPES_DIR / "pdf" / "blank_1.pdf" + input_path: Path = FILE_TYPES_PATH / "pdf" / "blank_1.pdf" input_source = PathInput(input_path) params = ExtractionParameters(model_id="fc405e37-4ba4-4d03-aeba-533a8d1f0f21") @@ -218,7 +218,7 @@ def test_unknown_webhook_ids_must_throw_error( """ Using an unknown webhook identifier must trigger an error. """ - input_path: Path = FILE_TYPES_DIR / "pdf" / "blank_1.pdf" + input_path: Path = FILE_TYPES_PATH / "pdf" / "blank_1.pdf" input_source = PathInput(input_path) params = ExtractionParameters( @@ -280,9 +280,9 @@ def test_data_schema_must_succeed( """ Load a blank PDF from an HTTPS URL and make sure the inference call completes without raising any errors. """ - input_path: Path = FILE_TYPES_DIR / "pdf" / "blank_1.pdf" + input_path: Path = FILE_TYPES_PATH / "pdf" / "blank_1.pdf" data_schema_replace_path = ( - V2_PRODUCT_DATA_DIR / "extraction" / "data_schema_replace_param.json" + V2_PRODUCT_PATH / "extraction" / "data_schema_replace_param.json" ) input_source = PathInput(input_path) @@ -318,7 +318,7 @@ def log_request(request: httpx.Request): httpx_client = httpx.Client(event_hooks={"request": [log_request]}) client = Client(http_client=httpx_client) - input_path = FILE_TYPES_DIR / "pdf" / "blank_1.pdf" + input_path = FILE_TYPES_PATH / "pdf" / "blank_1.pdf" input_source = PathInput(input_path) params = ExtractionParameters( @@ -343,10 +343,7 @@ def test_http2_client(findoc_model_id) -> None: httpx_client = httpx.Client(http2=True) with Client(http_client=httpx_client) as client: input_source = PathInput( - V2_PRODUCT_DATA_DIR - / "extraction" - / "financial_document" - / "default_sample.jpg" + V2_PRODUCT_PATH / "extraction" / "financial_document" / "default_sample.jpg" ) params = ExtractionParameters(model_id=findoc_model_id) response = client.enqueue_and_get_result( From 3967624e92e0dfe6019f2443f51f8a0234802f42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ianar=C3=A9=20S=C3=A9vi?= Date: Mon, 21 Sep 2026 18:35:56 +0200 Subject: [PATCH 2/3] fix1 --- mindee/v2/error/mindee_http_error_v2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mindee/v2/error/mindee_http_error_v2.py b/mindee/v2/error/mindee_http_error_v2.py index ac34c6ef..4a0de63f 100644 --- a/mindee/v2/error/mindee_http_error_v2.py +++ b/mindee/v2/error/mindee_http_error_v2.py @@ -4,7 +4,7 @@ from mindee.v2.parsing import ErrorItem, ErrorResponse -class MindeeHTTPErrorV2(RuntimeError, ErrorResponse): +class MindeeHTTPErrorV2(RuntimeError): """An exception relating to HTTP calls.""" def __init__(self, response: ErrorResponse) -> None: From 1844d63f9721c4acb9f205600c7e3083d7d83eb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ianar=C3=A9=20S=C3=A9vi?= Date: Mon, 21 Sep 2026 18:40:48 +0200 Subject: [PATCH 3/3] fix2 --- .github/workflows/_test-integrations.yml | 31 ++++++++-------------- mindee/v2/error/mindee_http_error_v2.py | 4 +-- mindee/v2/parsing/error/__init__.py | 3 ++- mindee/v2/parsing/error/error_response.py | 14 ++-------- mindee/v2/parsing/error/ierror_response.py | 22 +++++++++++++++ tests/v2/parsing/test_error_response.py | 2 +- 6 files changed, 40 insertions(+), 36 deletions(-) create mode 100644 mindee/v2/parsing/error/ierror_response.py diff --git a/.github/workflows/_test-integrations.yml b/.github/workflows/_test-integrations.yml index 0c8b1e42..68ec9bc2 100644 --- a/.github/workflows/_test-integrations.yml +++ b/.github/workflows/_test-integrations.yml @@ -10,6 +10,17 @@ on: permissions: contents: read +env: + MINDEE_API_KEY: ${{ secrets.MINDEE_API_KEY_SE_TESTS }} + WORKFLOW_ID: ${{ secrets.WORKFLOW_ID_SE_TESTS }} + MINDEE_V2_API_KEY: ${{ secrets.MINDEE_V2_SE_TESTS_API_KEY }} + MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID }} + MINDEE_V2_SE_TESTS_BLANK_PDF_URL: ${{ secrets.MINDEE_V2_SE_TESTS_BLANK_PDF_URL }} + MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID }} + MINDEE_V2_SE_TESTS_CROP_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_CROP_MODEL_ID }} + MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID }} + MINDEE_V2_SE_TESTS_OCR_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_OCR_MODEL_ID }} + jobs: pytest: name: Run Integration Tests @@ -46,16 +57,6 @@ jobs: python -m pip install pip pip install -e '.[test]' - name: Run Integration Testing - env: - MINDEE_API_KEY: ${{ secrets.MINDEE_API_KEY_SE_TESTS }} - WORKFLOW_ID: ${{ secrets.WORKFLOW_ID_SE_TESTS }} - MINDEE_V2_API_KEY: ${{ secrets.MINDEE_V2_SE_TESTS_API_KEY }} - MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID }} - MINDEE_V2_SE_TESTS_BLANK_PDF_URL: ${{ secrets.MINDEE_V2_SE_TESTS_BLANK_PDF_URL }} - MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID }} - MINDEE_V2_SE_TESTS_CROP_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_CROP_MODEL_ID }} - MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID }} - MINDEE_V2_SE_TESTS_OCR_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_OCR_MODEL_ID }} run: | pytest --cov mindee -m integration @@ -105,15 +106,5 @@ jobs: pip install -e '.[test]' shell: bash - name: Run Integration Testing - env: - MINDEE_API_KEY: ${{ secrets.MINDEE_API_KEY_SE_TESTS }} - WORKFLOW_ID: ${{ secrets.WORKFLOW_ID_SE_TESTS }} - MINDEE_V2_API_KEY: ${{ secrets.MINDEE_V2_SE_TESTS_API_KEY }} - MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID }} - MINDEE_V2_SE_TESTS_BLANK_PDF_URL: ${{ secrets.MINDEE_V2_SE_TESTS_BLANK_PDF_URL }} - MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID }} - MINDEE_V2_SE_TESTS_CROP_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_CROP_MODEL_ID }} - MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID }} - MINDEE_V2_SE_TESTS_OCR_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_OCR_MODEL_ID }} run: | pytest -m "integration and not pypdfium2 and not pillow" diff --git a/mindee/v2/error/mindee_http_error_v2.py b/mindee/v2/error/mindee_http_error_v2.py index 4a0de63f..0cc7af8a 100644 --- a/mindee/v2/error/mindee_http_error_v2.py +++ b/mindee/v2/error/mindee_http_error_v2.py @@ -1,10 +1,10 @@ import json from mindee.parsing.common.string_dict import StringDict -from mindee.v2.parsing import ErrorItem, ErrorResponse +from mindee.v2.parsing.error import ErrorItem, ErrorResponse, IErrorResponse -class MindeeHTTPErrorV2(RuntimeError): +class MindeeHTTPErrorV2(RuntimeError, IErrorResponse): """An exception relating to HTTP calls.""" def __init__(self, response: ErrorResponse) -> None: diff --git a/mindee/v2/parsing/error/__init__.py b/mindee/v2/parsing/error/__init__.py index fd2d1d50..f036c23e 100644 --- a/mindee/v2/parsing/error/__init__.py +++ b/mindee/v2/parsing/error/__init__.py @@ -1,4 +1,5 @@ from mindee.v2.parsing.error.error_item import ErrorItem from mindee.v2.parsing.error.error_response import ErrorResponse +from mindee.v2.parsing.error.ierror_response import IErrorResponse -__all__ = ["ErrorItem", "ErrorResponse"] +__all__ = ["ErrorItem", "ErrorResponse", "IErrorResponse"] diff --git a/mindee/v2/parsing/error/error_response.py b/mindee/v2/parsing/error/error_response.py index 26b16476..d5ddd9ea 100644 --- a/mindee/v2/parsing/error/error_response.py +++ b/mindee/v2/parsing/error/error_response.py @@ -1,22 +1,12 @@ from mindee.parsing.common import CommonResponse from mindee.parsing.common.string_dict import StringDict from mindee.v2.parsing.error.error_item import ErrorItem +from mindee.v2.parsing.error.ierror_response import IErrorResponse -class ErrorResponse(CommonResponse): +class ErrorResponse(CommonResponse, IErrorResponse): """Error response detailing a problem. The format adheres to RFC 9457.""" - status: int - """The HTTP status code returned by the server.""" - detail: str - """A human-readable explanation specific to the occurrence of the problem.""" - title: str - """A short, human-readable summary of the problem.""" - code: str - """A machine-readable code specific to the occurrence of the problem.""" - errors: list[ErrorItem] - """A list of explicit error details.""" - def __init__(self, raw_response: StringDict): super().__init__(raw_response) self.status = raw_response["status"] diff --git a/mindee/v2/parsing/error/ierror_response.py b/mindee/v2/parsing/error/ierror_response.py new file mode 100644 index 00000000..8196c3f1 --- /dev/null +++ b/mindee/v2/parsing/error/ierror_response.py @@ -0,0 +1,22 @@ +from typing import Protocol + +from mindee.v2.parsing.error.error_item import ErrorItem + + +class IErrorResponse(Protocol): + """Error response detailing a problem. The format adheres to RFC 9457.""" + + status: int + """The HTTP status code returned by the server.""" + + detail: str + """A human-readable explanation specific to the occurrence of the problem.""" + + title: str + """A short, human-readable summary of the problem.""" + + code: str + """A machine-readable code specific to the occurrence of the problem.""" + + errors: list[ErrorItem] + """A list of explicit details on the problem.""" diff --git a/tests/v2/parsing/test_error_response.py b/tests/v2/parsing/test_error_response.py index 35102713..14e08c9d 100644 --- a/tests/v2/parsing/test_error_response.py +++ b/tests/v2/parsing/test_error_response.py @@ -7,7 +7,7 @@ @pytest.mark.v2 def test_rst_output_must_be_valid(): - """should load and pretty print an error response""" + """Should load and pretty print an error response.""" local_response = LocalResponse( V2_RESOURCE_PATH / "errors/error_422_invalid_fields.json"