From f6d379dfc07c504e57b1e47064678bd2e8a5a203 Mon Sep 17 00:00:00 2001 From: sebastianMindee <130448732+sebastianMindee@users.noreply.github.com> Date: Tue, 29 Jul 2025 18:49:56 +0200 Subject: [PATCH] :sparkles: add support for page count, mimetype + fixes --- mindee/parsing/v2/inference.py | 13 ++++------ mindee/parsing/v2/inference_file.py | 17 ++++++++++++- mindee/parsing/v2/inference_model.py | 3 +++ mindee/parsing/v2/job.py | 7 ++++-- mindee/parsing/v2/job_webhook.py | 36 ++++++++++++++++++++++++++++ tests/data | 2 +- tests/v2/test_inference_response.py | 2 ++ 7 files changed, 67 insertions(+), 13 deletions(-) create mode 100644 mindee/parsing/v2/job_webhook.py diff --git a/mindee/parsing/v2/inference.py b/mindee/parsing/v2/inference.py index 85b4793d..038746d6 100644 --- a/mindee/parsing/v2/inference.py +++ b/mindee/parsing/v2/inference.py @@ -25,14 +25,9 @@ def __init__(self, raw_response: StringDict): self.id = raw_response["id"] if "id" in raw_response else None def __str__(self) -> str: - alias = f" {self.file.alias}" if self.file.alias else "" return ( - f"Inference\n#########" - f"\nModel\n=====" - f"\n:ID: {self.model.id}" - f"\n\nFile\n====" - f"\n:Name: {self.file.name}" - f"\n:Alias:{alias}" - f"{self.result}" - "\n" + f"Inference\n#########\n" + f"{self.model}\n\n" + f"{self.file}" + f"{self.result}\n" ) diff --git a/mindee/parsing/v2/inference_file.py b/mindee/parsing/v2/inference_file.py index a23ad46c..5cd950f5 100644 --- a/mindee/parsing/v2/inference_file.py +++ b/mindee/parsing/v2/inference_file.py @@ -6,9 +6,24 @@ class InferenceFile: name: str """Name of the file.""" - alais: str + alias: str """Alias of the file.""" + page_count: str + """Number of pages in the file.""" + mime_type: str + """Mime type of the file.""" def __init__(self, raw_response: StringDict) -> None: self.name = raw_response["name"] self.alias = raw_response["alias"] + self.page_count = raw_response["page_count"] + self.mime_type = raw_response["mime_type"] + + def __str__(self) -> str: + return ( + f"File\n====" + f"\n:Name: {self.name}" + f"\n:Alias:{self.alias if self.alias else ''}" + f"\n:Page Count: {self.page_count}" + f"\n:MIME Type: {self.mime_type}" + ) diff --git a/mindee/parsing/v2/inference_model.py b/mindee/parsing/v2/inference_model.py index 0a3dd73e..72fc864c 100644 --- a/mindee/parsing/v2/inference_model.py +++ b/mindee/parsing/v2/inference_model.py @@ -9,3 +9,6 @@ class InferenceModel: def __init__(self, raw_response: StringDict) -> None: self.id = raw_response["id"] + + def __str__(self) -> str: + return f"Model\n=====" f"\n:ID: {self.id}" diff --git a/mindee/parsing/v2/job.py b/mindee/parsing/v2/job.py index b8a045c8..153eb06f 100644 --- a/mindee/parsing/v2/job.py +++ b/mindee/parsing/v2/job.py @@ -3,6 +3,7 @@ from mindee.parsing.common.string_dict import StringDict from mindee.parsing.v2.error_response import ErrorResponse +from mindee.parsing.v2.job_webhook import JobWebhook class Job: @@ -26,7 +27,7 @@ class Job: """URL to poll for the job status.""" result_url: Optional[str] """URL to poll for the job result, redirects to the result if available.""" - webhooks: List[str] + webhooks: List[JobWebhook] """ID of webhooks associated with the job.""" def __init__(self, raw_response: StringDict) -> None: @@ -43,4 +44,6 @@ def __init__(self, raw_response: StringDict) -> None: self.filename = raw_response["filename"] self.result_url = raw_response["result_url"] self.alias = raw_response["alias"] - self.webhooks = raw_response["webhooks"] + self.webhooks = [] + for webhook in raw_response["webhooks"]: + self.webhooks.append(JobWebhook(webhook)) diff --git a/mindee/parsing/v2/job_webhook.py b/mindee/parsing/v2/job_webhook.py new file mode 100644 index 00000000..daf421e1 --- /dev/null +++ b/mindee/parsing/v2/job_webhook.py @@ -0,0 +1,36 @@ +from datetime import datetime +from typing import Optional + +from mindee.parsing.common.string_dict import StringDict +from mindee.parsing.v2.error_response import ErrorResponse + + +class JobWebhook: + """JobWebhook information.""" + + id: str + """JobWebhook ID.""" + created_at: Optional[datetime] + """Created at date.""" + status: str + """Status of the webhook.""" + error: Optional[ErrorResponse] + """Error response, if any.""" + + def __init__(self, server_response: StringDict) -> None: + self.id = server_response["id"] + self.created_at = self.parse_date(server_response.get("created_at")) + self.status = server_response["status"] + self.error = ( + ErrorResponse(server_response["error"]) + if server_response.get("error") is not None + else None + ) + + @staticmethod + def parse_date(date_string: Optional[str]) -> Optional[datetime]: + """Parse the date, if present.""" + if not date_string: + return None + date_string = date_string.replace("Z", "+00:00") + return datetime.fromisoformat(date_string) diff --git a/tests/data b/tests/data index 02ace39f..632af76d 160000 --- a/tests/data +++ b/tests/data @@ -1 +1 @@ -Subproject commit 02ace39f3b8cdd99dcac4f060d5b24b67ff5f2ab +Subproject commit 632af76d6eefe551cdeb2b7fa2f325cecec1b66f diff --git a/tests/v2/test_inference_response.py b/tests/v2/test_inference_response.py index 070f175c..61857b75 100644 --- a/tests/v2/test_inference_response.py +++ b/tests/v2/test_inference_response.py @@ -181,5 +181,7 @@ def test_full_inference_response(): assert isinstance(inference_result.inference.file, InferenceFile) assert inference_result.inference.file.name == "complete.jpg" + assert inference_result.inference.file.page_count == 1 + assert inference_result.inference.file.mime_type == "image/jpeg" assert not inference_result.inference.file.alias assert not inference_result.inference.result.options